X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Frobot%2Fperformance%2Fperformance_utils.robot;h=66fd3074511301e619e11750347340303ff21fb6;hb=5075d208e29ece6bfd8cf4aa5289dd0b2ade583c;hp=1be3119713c4c9722c850495156fc7b35ac9d7a4;hpb=c59ec1c80ce4292115004fc2182fac088f803c72;p=csit.git diff --git a/resources/libraries/robot/performance/performance_utils.robot b/resources/libraries/robot/performance/performance_utils.robot index 1be3119713..66fd307451 100644 --- a/resources/libraries/robot/performance/performance_utils.robot +++ b/resources/libraries/robot/performance/performance_utils.robot @@ -391,6 +391,9 @@ | | ... | - rate - Rate for sending packets. Type: string | | ... | - framesize - L2 Frame Size [B] or IMIX_v4_1. Type: integer/string | | ... | - topology_type - Topology type. Type: string +| | ... | - unidirection - False if traffic is bidirectional. Type: boolean +| | ... | - tx_port - TX port of TG, default 0. Type: integer +| | ... | - rx_port - RX port of TG, default 1. Type: integer | | ... | - subsamples - How many trials in this measurement. Type:int | | ... | - trial_duration - Duration of single trial [s]. Type: float | | ... | - fail_no_traffic - Whether to fail on zero receive count. Type: boolean @@ -398,14 +401,17 @@ | | ... | *Example:* | | ... | | ... | \| Traffic should pass with maximum rate \| 4.0mpps \| 64 \ -| | ... | \| 3-node-IPv4 \| ${1} \| ${10.0} | ${False} \| +| | ... | \| 3-node-IPv4 \| ${False} \| ${0} | ${1} \| +| | ... | \| ${1} \| ${10.0} \| ${False} \| | | ... | | [Arguments] | ${rate} | ${framesize} | ${topology_type} +| | ... | ${unidirection}=${False} | ${tx_port}=${0} | ${rx_port}=${1} | | ... | ${trial_duration}=${perf_trial_duration} | ${fail_no_traffic}=${True} | | ... | ${subsamples}=${perf_trial_multiplicity} | | ... | | ${results} = | Send traffic at specified rate | ${trial_duration} | ${rate} -| | ... | ${framesize} | ${topology_type} | ${subsamples} +| | ... | ${framesize} | ${topology_type} | ${unidirection} +| | ... | ${tx_port} | ${rx_port} | ${subsamples} | | Set Test Message | ${\n}Maximum Receive Rate trial results | | Set Test Message | in packets per second: ${results} | | ... | append=yes @@ -423,18 +429,23 @@ | | ... | - rate - Rate for sending packets. Type: string | | ... | - framesize - L2 Frame Size [B]. Type: integer/string | | ... | - topology_type - Topology type. Type: string +| | ... | - unidirection - False if traffic is bidirectional. Type: boolean +| | ... | - tx_port - TX port of TG, default 0. Type: integer +| | ... | - rx_port - RX port of TG, default 1. Type: integer | | ... | - subsamples - How many trials in this measurement. Type: int | | ... | | ... | *Example:* | | ... | | ... | \| Send traffic at specified rate \| ${1.0} \| 4.0mpps \| 64 \ -| | ... | \| 3-node-IPv4 \| ${10} \| +| | ... | \| 3-node-IPv4 \| ${False} \| ${0} | ${1} \| ${10} \| | | ... | | [Arguments] | ${trial_duration} | ${rate} | ${framesize} -| | ... | ${topology_type} | ${subsamples}=${1} +| | ... | ${topology_type} | ${unidirection}=${False} | ${tx_port}=${0} +| | ... | ${rx_port}=${1} | ${subsamples}=${1} | | ... | | Clear and show runtime counters with running traffic | ${trial_duration} | | ... | ${rate} | ${framesize} | ${topology_type} +| | ... | ${unidirection} | ${tx_port} | ${rx_port} | | Run Keyword If | ${dut_stats}==${True} | Clear all counters on all DUTs | | Run Keyword If | ${dut_stats}==${True} and ${pkt_trace}==${True} | | ... | VPP Enable Traces On All DUTs | ${nodes} @@ -443,7 +454,8 @@ | | ${results} = | Create List | | :FOR | ${i} | IN RANGE | ${subsamples} | | | Send traffic on tg | ${trial_duration} | ${rate} | ${framesize} -| | | ... | ${topology_type} | warmup_time=0 +| | | ... | ${topology_type} | ${unidirection} | ${tx_port} +| | | ... | ${rx_port} | warmup_time=0 | | | ${rx} = | Get Received | | | ${rr} = | Evaluate | ${rx} / ${trial_duration} | | | Append To List | ${results} | ${rr} @@ -466,15 +478,20 @@ | | ... | - rate - Rate for sending packets. Type: string | | ... | - framesize - L2 Frame Size [B] or IMIX_v4_1. Type: integer/string | | ... | - topology_type - Topology type. Type: string +| | ... | - unidirection - False if traffic is bidirectional. Type: boolean +| | ... | - tx_port - TX port of TG, default 0. Type: integer +| | ... | - rx_port - RX port of TG, default 1. Type: integer | | ... | | ... | *Example:* | | ... -| | ... | \| Traffic should pass with partial loss \| 10 \| 4.0mpps \| 64 \ -| | ... | \| 3-node-IPv4 \| 0.5 \| percentage \| +| | ... | \| Clear and show runtime counters with running traffic \| 10 \ +| | ... | \| 4.0mpps \| 64 \| 3-node-IPv4 \| ${False} \| ${0} | ${1} \| | | ... | | [Arguments] | ${duration} | ${rate} | ${framesize} | ${topology_type} +| | ... | ${unidirection}=${False} | ${tx_port}=${0} | ${rx_port}=${1} | | ... | | Send traffic on tg | -1 | ${rate} | ${framesize} | ${topology_type} +| | ... | ${unidirection} | ${tx_port} | ${rx_port} | | ... | warmup_time=0 | async_call=${True} | latency=${False} | | Run Keyword If | ${dut_stats}==${True} | | ... | Clear runtime counters on all DUTs | ${nodes} @@ -482,3 +499,54 @@ | | Run Keyword If | ${dut_stats}==${True} | | ... | Show runtime counters on all DUTs | ${nodes} | | Stop traffic on tg + +| Create network function CPU list +| | [Documentation] +| | ... | Create list of CPUs allocated for network function base on SUT/DUT +| | ... | placement and other network functions placement. +| | ... +| | ... | *Arguments:* +| | ... | - dut - DUT node. Type: dictionary +| | ... | - chains: Total number of chains. Type: integer +| | ... | - nodeness: Total number of nodes per chain. Type: integer +| | ... | - chain_id - Network function chain ID. Type: integer +| | ... | - node_id - Network function node ID within chain. Type: integer +| | ... | - mtcr - Main thread to core ratio. Type: integer +| | ... | - dtcr - Dataplane thread to core ratio. Type: integer +| | ... | - auto_scale - If True, use same amount of Dataplane threads for +| | ... | network function as DUT, otherwise use single physical core for +| | ... | every network function. Type: boolean +| | ... +| | ... | *Note:* +| | ... | KW uses test variables \${cpu_count_int} set by +| | ... | "Add worker threads and rxqueues to all DUTs" +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Create network function CPU list \| ${nodes['DUT1']} \ +| | ... | \| 1 \| 1 \| 1 \| 1 \| +| | ... +| | [Arguments] | ${dut} | ${chains}=${1} | ${nodeness}=${1} | ${chain_id}=${1} +| | ... | ${node_id}=${1} | ${mtcr}=${2} | ${dtcr}=${1} | ${auto_scale}=${False} +| | ... +| | ${sut_sc}= | Set Variable | ${1} +| | ${dut_mc}= | Set Variable | ${1} +| | ${dut_dc}= | Set Variable | ${cpu_count_int} +| | ${skip}= | Evaluate | ${sut_sc} + ${dut_mc} + ${dut_dc} +| | ${dtc}= | Set Variable If | ${auto_scale} | ${cpu_count_int} | ${1} +| | ${if1_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${${dut}_if1} +| | @{if_list}= | Run Keyword If | '${if1_status}' == 'PASS' +| | ... | Create List | ${${dut}_if1} +| | ... | ELSE | Create List | ${${dut}_if1_1} | ${${dut}_if1_2} +| | ${if2_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${${dut}_if2} +| | Run Keyword If | '${if2_status}' == 'PASS' +| | ... | Append To List | ${if_list} | ${${dut}_if2} +| | ... | ELSE | Append To List | ${if_list} | ${${dut}_if2_1} | ${${dut}_if2_2} +| | ${dut_numa}= | Get interfaces numa node | ${nodes['${dut}']} | @{if_list} +| | ${nf_cpus}= | Cpu slice of list for NF | node=${nodes['${dut}']} +| | ... | cpu_node=${dut_numa} | chains=${chains} | nodeness=${nodeness} +| | ... | chain_id=${chain_id} | node_id=${node_id} | mtcr=${mtcr} +| | ... | dtcr=${dtcr} | dtc=${dtc} | skip_cnt=${skip} +| | Return From Keyword | ${nf_cpus}