aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/robot/performance/performance_utils.robot
diff options
context:
space:
mode:
authorVratko Polak <vrpolak@cisco.com>2018-07-16 12:33:10 +0200
committerPeter Mikus <pmikus@cisco.com>2018-07-17 10:57:56 +0000
commit7dda8f57f750c253d3c96ac1b02a84c58e36a6d8 (patch)
tree3563731eb2926f2c73dc71a9f98e910941889f7c /resources/libraries/robot/performance/performance_utils.robot
parentcbdbfe44b7e028706b0286f91df7752781c60d92 (diff)
CSIT-1186: Add srv6 NDRPDR suites
Delete the corresponding ndrpdrdisc suites. MRR suites are also edited, to make them less different from NDRPDR suites. Now, there is a script to re-generate testcases of selected suites. For that, resources/libraries/python/autogen is created, with Regenerator holding the most of script logic. The script looks at files matching a glob expression, reuses a "prolog", but overwites test cases with the default template and hardcoded set of testcase arguments. Also, handling of overhead size has been simplified, using new keyword Get Max Rate And Jumbo And Handle Multi Seg. Default value for search timeout is increased to 12 minutes to make timeout failures less frequent. Change-Id: I394ad61f262b3078e5ca719034b15ada48987ee0 Signed-off-by: Vratko Polak <vrpolak@cisco.com>
Diffstat (limited to 'resources/libraries/robot/performance/performance_utils.robot')
-rw-r--r--resources/libraries/robot/performance/performance_utils.robot132
1 files changed, 114 insertions, 18 deletions
diff --git a/resources/libraries/robot/performance/performance_utils.robot b/resources/libraries/robot/performance/performance_utils.robot
index 2cb8d07cb4..4cabe5660e 100644
--- a/resources/libraries/robot/performance/performance_utils.robot
+++ b/resources/libraries/robot/performance/performance_utils.robot
@@ -38,11 +38,99 @@
| ... | and PDR.
*** Keywords ***
+| Get Max Rate And Jumbo
+| | [Documentation]
+| | ... | Argument framesize can be either integer in case of a single packet
+| | ... | in stream, or IMIX string defining mix of packets.
+| | ... | For jumbo frames detection, the maximal packet size is relevant.
+| | ... | For maximal transmit rate, the average packet size is relevant.
+| | ... | In both cases, encapsulation overhead (if any) has effect.
+| | ... | The maximal rate is computed from line limit bandwidth,
+| | ... | but NICs also have an independent limit in packet rate.
+| | ... | For some NICs, the limit is not reachable (bps limit is stricter),
+| | ... | in those cases None is used (meaning no limiting).
+| | ...
+| | ... | This keyword returns computed maximal unidirectional transmit rate
+| | ... | and jumbo boolean (some suites need that).
+| | ...
+| | ... | *Arguments:*
+| | ... | - bps_limit - Line rate limit in bps. Type: integer
+| | ... | - framesize - Framesize in bytes or IMIX. Type: integer or string
+| | ... | - overhead - Overhead in bytes. Default: 0. Type: integer
+| | ... | - pps_limit - NIC limit rate value in pps. Type: integer or None
+| | ...
+| | ... | *Returns:*
+| | ... | - 2-tuple, consisting of:
+| | ... | - Calculated unidirectional maximal transmit rate.
+| | ... | Type: integer or float
+| | ... | - Jumbo boolean, true if jumbo packet support has to be enabled.
+| | ... | Type: boolean
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Get Max Rate And Jumbo | \${10000000} \| IMIX_v4_1 \
+| | ... | \| overhead=\${40} \| pps_limit=\${18750000} \|
+| | ...
+| | [Arguments] | ${bps_limit} | ${framesize}
+| | ... | ${overhead}=${0} | ${pps_limit}=${None}
+| | ...
+| | ${avg_size} = | Set Variable If | '${framesize}' == 'IMIX_v4_1'
+| | ... | ${353.83333} | ${framesize}
+| | ${max_size} = | Set Variable If | '${framesize}' == 'IMIX_v4_1'
+| | ... | ${1518} | ${framesize}
+| | # swo := size_with_overhead
+| | ${avg_swo} = | Evaluate | ${avg_size} + ${overhead}
+| | ${max_swo} = | Evaluate | ${max_size} + ${overhead}
+| | ${jumbo} = | Set Variable If | ${max_swo} < 1522
+| | ... | ${False} | ${True}
+| | # For testing None see: https://groups.google.com/\
+| | # forum/#!topic/robotframework-users/XntFz0ocD9E
+| | ${limit_set} = | Set Variable | ${pps_limit != None}
+| | ${rate} = | Evaluate | (${bps_limit}/((${avg_swo}+20)*8)).__trunc__()
+| | ${max_rate} = | Set Variable If | ${limit_set} and ${rate} > ${pps_limit}
+| | ... | ${pps_limit} | ${rate}
+| | Return From Keyword | ${max_rate} | ${jumbo}
+
+| Get Max Rate And Jumbo And Handle Multi Seg
+| | [Documentation]
+| | ... | This keyword adds correct multi seg configuration,
+| | ... | then returns the result of Get Max Rate And Jumbo keyword.
+| | ...
+| | ... | See Documentation of Get Max Rate And Jumbo for more details.
+| | ...
+| | ... | *Arguments:*
+| | ... | - bps_limit - Line rate limit in bps. Type: integer
+| | ... | - framesize - Framesize in bytes. Type: integer or string
+| | ... | - overhead - Overhead in bytes. Default: 0. Type: integer
+| | ... | - pps_limit - NIC limit rate value in pps. Type: integer or None
+| | ...
+| | ... | *Returns:*
+| | ... | - 2-tuple, consisting of:
+| | ... | - Calculated unidirectional maximal transmit rate.
+| | ... | Type: integer or float
+| | ... | - Jumbo boolean, true if jumbo packet support has to be enabled.
+| | ... | Type: boolean
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Get Max Rate And Jumbo And Handle Multi Seg | \${10000000} \
+| | ... | \| IMIX_v4_1 \| overhead=\${40} \| pps_limit=\${18750000} \|
+| | ...
+| | [Arguments] | ${bps_limit} | ${framesize}
+| | ... | ${overhead}=${0} | ${pps_limit}=${None}
+| | ...
+| | ${max_rate} | ${jumbo} = | Get Max Rate And Jumbo
+| | ... | ${bps_limit} | ${framesize} | ${overhead} | ${pps_limit}
+| | Run Keyword If | not ${jumbo} | Add no multi seg to all DUTs
+| | Return From Keyword | ${max_rate} | ${jumbo}
+
| Calculate pps
| | [Documentation]
| | ... | Calculate pps for given rate and L2 frame size,
| | ... | additional 20B are added to L2 frame size as padding.
| | ...
+| | ... | FIXME: Migrate callers to Get Max Rate And Jumbo
+| | ...
| | ... | *Arguments*
| | ... | - bps - Rate in bps. Type: integer
| | ... | - framesize - L2 frame size in Bytes. Type: integer
@@ -66,6 +154,8 @@
| | ... | in stream, or set of packets in case of IMIX type or simmilar.
| | ... | This keyword returns average framesize.
| | ...
+| | ... | FIXME: Migrate callers to Get Max Rate And Jumbo
+| | ...
| | ... | *Arguments:*
| | ... | - framesize - Framesize. Type: integer or string
| | ...
@@ -362,6 +452,9 @@
| | ... | Display results as formatted test message.
| | ... | Fail if a resulting lower bound has too high loss fraction.
| | ... | Proceed with Perform additional measurements based on NDRPDR result.
+| | ... | Input rates are understood as uni-directional,
+| | ... | reported result contains bi-directional rates.
+| | ...
| | ... | TODO: Should the trial duration of the additional
| | ... | measurements be configurable?
| | ...
@@ -381,19 +474,20 @@
| | ...
| | ... | \| Find NDR and PDR intervals using optimized search \| \${64} \| \
| | ... | 3-node-IPv4 \| \${100000} \| \${14880952} \| \${0.005} \| \${0.005} \
-| | ... | \| \${30.0} \| \${1.0} \| \${2} \| ${600.0}
+| | ... | \| \${30.0} \| \${1.0} \| \${2} \| ${600.0} \|
| | ...
| | [Arguments] | ${frame_size} | ${topology_type} | ${minimum_transmit_rate}
| | ... | ${maximum_transmit_rate} | ${packet_loss_ratio}=${0.005}
| | ... | ${final_relative_width}=${0.005} | ${final_trial_duration}=${30.0}
| | ... | ${initial_trial_duration}=${1.0}
-| | ... | ${number_of_intermediate_phases}=${2} | ${timeout}=${600.0}
-| | ...
-| | ${result}= | Perform optimized ndrpdr search | ${frame_size}
-| | ... | ${topology_type} | ${minimum_transmit_rate} | ${maximum_transmit_rate}
-| | ... | ${packet_loss_ratio} | ${final_relative_width}
-| | ... | ${final_trial_duration} | ${initial_trial_duration}
-| | ... | ${number_of_intermediate_phases} | timeout=${timeout}
+| | ... | ${number_of_intermediate_phases}=${2} | ${timeout}=${720.0}
+| | ...
+| | ${result} = | Perform optimized ndrpdr search | ${frame_size}
+| | ... | ${topology_type} | ${minimum_transmit_rate*2}
+| | ... | ${maximum_transmit_rate*2} | ${packet_loss_ratio}
+| | ... | ${final_relative_width} | ${final_trial_duration}
+| | ... | ${initial_trial_duration} | ${number_of_intermediate_phases}
+| | ... | timeout=${timeout}
| | Display result of NDRPDR search | ${result} | ${frame_size}
| | Check NDRPDR interval validity | ${result.pdr_interval}
| | ... | ${packet_loss_ratio}
@@ -421,7 +515,7 @@
| | ... | *Example:*
| | ...
| | ... | \| Display single bound \| NDR lower bound \| \${12345.67} \
-| | ... | \| \${64} \| show_latency=\${EMPTY}
+| | ... | \| \${64} \| show_latency=\${EMPTY} \|
| | ...
| | [Arguments] | ${text} | ${rate_total} | ${framesize} | ${latency}=${EMPTY}
| | ...
@@ -449,7 +543,7 @@
| | ...
| | ... | *Example:*
| | ...
-| | ... | \| Display result of NDRPDR search \| \${result} \| \${64}
+| | ... | \| Display result of NDRPDR search \| \${result} \| \${64} \|
| | ...
| | [Arguments] | ${result} | ${framesize}
| | ...
@@ -477,15 +571,17 @@
| | ... | *Example:*
| | ...
| | ... | \| Check NDRPDR interval validity \| \${result.pdr_interval} \
-| | ... | \| \${0.005}
+| | ... | \| \${0.005} \|
| | ...
| | [Arguments] | ${interval} | ${packet_loss_ratio}=${0.0}
| | ...
-| | ${lower_bound_lf}= | Set Variable | ${interval.measured_low.loss_fraction}
+| | ${lower_bound_lf} = | Set Variable | ${interval.measured_low.loss_fraction}
| | Return From Keyword If | ${lower_bound_lf} <= ${packet_loss_ratio}
-| | ${messagge}= | Catenate | SEPARATOR=${SPACE}
-| | ... | Lower bound fraction ${lower_bound_lf}
-| | ... | does not reach ${packet_loss_ratio}.
+| | ${message}= | Catenate | SEPARATOR=${SPACE}
+| | ... | Minimal rate loss fraction ${lower_bound_lf}
+| | ... | does not reach target ${packet_loss_ratio}.
+| | ${message} = | Set Variable If | ${lower_bound_lf} >= 1.0
+| | ... | ${message}${\n}Zero packets forwarded! | ${message}
| | Fail | ${message}
| Perform additional measurements based on NDRPDR result
@@ -503,7 +599,7 @@
| | ...
| | ... | *Example:*
| | ... | \| Perform additional measurements based on NDRPDR result \
-| | ... | \| \${result} \| ${64} \| 3-node-IPv4
+| | ... | \| \${result} \| ${64} \| 3-node-IPv4 \|
| | ...
| | [Arguments] | ${result} | ${framesize} | ${topology_type}
| | ...
@@ -673,7 +769,7 @@
| | ... | *Example:*
| | ...
| | ... | \| Traffic should pass with maximum rate \| 4.0mpps \| 64 \
-| | ... | \| 3-node-IPv4 \| ${1} \| ${10.0} | ${False}
+| | ... | \| 3-node-IPv4 \| ${1} \| ${10.0} | ${False} \|
| | ...
| | [Arguments] | ${rate} | ${framesize} | ${topology_type}
| | ... | ${trial_duration}=${perf_trial_duration} | ${fail_no_traffic}=${True}
@@ -703,7 +799,7 @@
| | ... | *Example:*
| | ...
| | ... | \| Send traffic at specified rate \| ${1.0} \| 4.0mpps \| 64 \
-| | ... | \| 3-node-IPv4 \| ${10}
+| | ... | \| 3-node-IPv4 \| ${10} \|
| | ...
| | [Arguments] | ${trial_duration} | ${rate} | ${framesize}
| | ... | ${topology_type} | ${subsamples}=${1}