From 44dcb3113c8ade2e44543746abca861a89362c9b Mon Sep 17 00:00:00 2001 From: pmikus Date: Fri, 2 Oct 2020 05:48:34 +0000 Subject: GSO: TAP/VHOST use case Signed-off-by: pmikus Change-Id: Ibafaaca4438587284d1e255c764f0701002941e8 --- .../robot/performance/performance_actions.robot | 11 +- .../robot/performance/performance_utils.robot | 159 ++++++++++++++++++++- resources/libraries/robot/shared/default.robot | 3 +- resources/libraries/robot/shared/interfaces.robot | 95 +++++++++++- .../libraries/robot/shared/test_teardown.robot | 11 +- resources/libraries/robot/shared/vm.robot | 60 +++++--- 6 files changed, 310 insertions(+), 29 deletions(-) (limited to 'resources/libraries/robot') diff --git a/resources/libraries/robot/performance/performance_actions.robot b/resources/libraries/robot/performance/performance_actions.robot index 2cf954a5b3..c28b2ebdc8 100644 --- a/resources/libraries/robot/performance/performance_actions.robot +++ b/resources/libraries/robot/performance/performance_actions.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -35,6 +35,15 @@ | | | | Clear and show runtime counters with running traffic +| Additional Statistics Action For clear-show-runtime-with-iperf3 +| | [Documentation] +| | ... | Additional Statistics Action for clear and show runtime counters with +| | ... | iPerf3 running traffic. +| | +| | ... | See documentation of the called keyword for required test variables. +| | +| | Clear and show runtime counters with running iperf3 + | Additional Statistics Action For noop | | [Documentation] | | ... | Additional Statistics Action for no operation. diff --git a/resources/libraries/robot/performance/performance_utils.robot b/resources/libraries/robot/performance/performance_utils.robot index 5cf6dba84c..d45adc6cf9 100644 --- a/resources/libraries/robot/performance/performance_utils.robot +++ b/resources/libraries/robot/performance/performance_utils.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -17,6 +17,7 @@ | Library | resources.libraries.python.NodePath | Library | resources.libraries.python.PerfUtil | Library | resources.libraries.python.InterfaceUtil +| Library | resources.libraries.python.Iperf3 | Library | resources.libraries.python.TrafficGenerator | Library | resources.libraries.python.TrafficGenerator.OptimizedSearch | Library | resources.libraries.python.TrafficGenerator.TGDropRateSearchImpl @@ -445,6 +446,162 @@ | | END | | Return From Keyword | ${results} +| Clear and show runtime counters with running iperf3 +| | [Documentation] +| | ... | Start traffic at specified rate then clear runtime counters on all +| | ... | DUTs. Wait for specified amount of time and capture runtime counters +| | ... | on all DUTs. Finally stop traffic. +| | +| | ... | *Example:* +| | +| | ... | \| Clear and show runtime counters with running traffic \| +| | +| | ${runtime_duration} = | Get Runtime Duration +| | ${pids}= | iPerf Client Start Remote Exec +| | | ... | ${nodes['${iperf_client_node}']} +| | | ... | duration=${-1} +| | | ... | rate=${None} +| | | ... | frame_size=${None} +| | | ... | async_call=True +| | | ... | warmup_time=0 +| | | ... | traffic_directions=${1} +| | | ... | namespace=${iperf_client_namespace} +| | | ... | udp=${iperf_client_udp} +| | | ... | host=${iperf_server_bind} +| | | ... | bind=${iperf_client_bind} +| | | ... | affinity=${iperf_client_affinity} +| | FOR | ${action} | IN | @{pre_run_stats} +| | | Run Keyword | Additional Statistics Action For ${action} +| | END +| | Sleep | ${runtime_duration} +| | FOR | ${action} | IN | @{post_run_stats} +| | | Run Keyword | Additional Statistics Action For ${action} +| | END +| | iPerf Client Stop Remote Exec | ${nodes['${iperf_client_node}']} | ${pids} + +| Traffic should pass with maximum rate on iPerf3 +| | [Documentation] +| | ... | Send traffic at maximum rate on iPerf3. +| | +| | ... | *Arguments:* +| | ... | - trial_duration - Duration of single trial [s]. +| | ... | Type: float +| | ... | - trial_multiplicity - How many trials in this measurement. +| | ... | Type: integer +| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic; +| | ... | Type: integer +| | +| | ... | *Example:* +| | +| | ... | \| Traffic should pass with maximum rate on iPerf3 \| \${1} \| \ +| | ... | \| \${10.0} \| \${2} \| +| | +| | [Arguments] | ${trial_duration}=${trial_duration} +| | ... | ${trial_multiplicity}=${trial_multiplicity} +| | ... | ${traffic_directions}=${1} +| | +| | ${results}= | Send iPerf3 traffic at specified rate +| | ... | ${trial_duration} | ${None} | ${None} +| | ... | ${trial_multiplicity} | ${traffic_directions} +| | Set Test Message | ${\n}iPerf3 trial results +| | Set Test Message | in Gbits per second: ${results} +| | ... | append=yes + +| Send iPerf3 traffic at specified rate +| | [Documentation] +| | ... | Perform a warmup, show runtime counters during it. +| | ... | Then send traffic at specified rate, possibly multiple trials. +| | ... | Show various DUT stats, optionally also packet trace. +| | ... | Return list of measured receive rates. +| | +| | ... | *Arguments:* +| | ... | - trial_duration - Duration of single trial [s]. +| | ... | Type: float +| | ... | - rate - Target aggregate transmit rate [bps] / Bits per second +| | ... | Type: float +| | ... | - frame_size - L2 Frame Size [B]. +| | ... | Type: integer or string +| | ... | - trial_multiplicity - How many trials in this measurement. +| | ... | Type: integer +| | ... | - traffic_directions - Bi- (2) or uni- (1) directional traffic. +| | ... | Type: integer +| | ... | - extended_debug - True to enable extended debug. +| | ... | Type: boolean +| | +| | ... | *Example:* +| | +| | ... | \| Send iPerf3 traffic at specified rate \| \${1.0} \| ${4000000.0} \ +| | ... | \| \${64} \| \${10} \| \${1} \| ${False} \| +| | +| | [Arguments] | ${trial_duration} | ${rate} | ${frame_size} +| | ... | ${trial_multiplicity}=${trial_multiplicity} +| | ... | ${traffic_directions}=${1} | ${extended_debug}=${extended_debug} +| | +| | Set Test Variable | ${extended_debug} +| | Set Test Variable | ${rate} +| | Set Test Variable | ${traffic_directions} +| | +| | ${smt_used}= | Is SMT enabled | ${nodes['${iperf_server_node}']['cpuinfo']} +| | ${vm_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Get Library Instance | vnf_manager +| | ${vth}= | Evaluate | (${thr_count_int} + 1) +| | ${cpu_skip_cnt}= | Set Variable If | '${vm_status}' == 'PASS' +| | ... | ${CPU_CNT_SYSTEM} +| | ... | ${${CPU_CNT_SYSTEM} + ${CPU_CNT_MAIN} + ${cpu_count_int} + ${vth}} +| | +| | Initialize iPerf Server +| | ... | ${nodes['${iperf_server_node}']} +| | ... | pf_key=${iperf_server_pf_key} +| | ... | interface=${iperf_server_interface} +| | ... | bind=${iperf_server_bind} +| | ... | bind_gw=${iperf_server_bind_gw} +| | ... | bind_mask=${iperf_server_bind_mask} +| | ... | namespace=${iperf_server_namespace} +| | ... | cpu_skip_cnt=${cpu_skip_cnt} +| | Run Keyword If | '${iperf_client_namespace}' is not '${None}' +| | ... | Set Linux Interface IP +| | ... | ${nodes['${iperf_client_node}']} +| | ... | interface=${iperf_client_interface} +| | ... | ip_addr=${iperf_client_bind} +| | ... | prefix=${iperf_client_bind_mask} +| | ... | namespace=${iperf_client_namespace} +| | Run Keyword If | '${iperf_client_namespace}' is not '${None}' +| | ... | Add Default Route To Namespace +| | ... | ${nodes['${iperf_client_node}']} +| | ... | namespace=${iperf_client_namespace} +| | ... | default_route=${iperf_client_bind_gw} +| | ${pre_stats}= | Create List +| | ... | clear-show-runtime-with-iperf3 +| | ... | vpp-clear-stats | vpp-enable-packettrace | vpp-enable-elog +| | FOR | ${action} | IN | @{pre_stats} +| | | Run Keyword | Additional Statistics Action For ${action} +| | END +| | ${results} = | Create List +| | FOR | ${i} | IN RANGE | ${trial_multiplicity} +| | | ${rr} = | iPerf Client Start Remote Exec +| | | ... | ${nodes['${iperf_client_node}']} +| | | ... | duration=${trial_duration} +| | | ... | rate=${rate} +| | | ... | frame_size=${frame_size} +| | | ... | async_call=False +| | | ... | warmup_time=0 +| | | ... | traffic_directions=${traffic_directions} +| | | ... | namespace=${iperf_client_namespace} +| | | ... | udp=${iperf_client_udp} +| | | ... | host=${iperf_server_bind} +| | | ... | bind=${iperf_client_bind} +| | | ... | affinity=${iperf_client_affinity} +| | | ${conv} = | Convert To Number | ${rr['sum_received']['bits_per_second']} +| | | ${conv} = | Evaluate | ${conv} / ${1000} / ${1000} / ${1000} +| | | ${conv} = | Evaluate | "{:.3f}".format(${conv}) +| | | Append To List +| | | ... | ${results} | ${conv} +| | END +| | FOR | ${action} | IN | @{post_stats} +| | | Run Keyword | Additional Statistics Action For ${action} +| | END +| | Return From Keyword | ${results} + | Start Traffic on Background | | [Documentation] | | ... | Start traffic at specified rate then return control to Robot. diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot index e44141d8ad..1ae21e1049 100644 --- a/resources/libraries/robot/shared/default.robot +++ b/resources/libraries/robot/shared/default.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -34,6 +34,7 @@ | Library | resources.libraries.python.PapiHistory | Library | resources.libraries.python.SchedUtils | Library | resources.libraries.python.Tap +| Library | resources.libraries.python.Tap.TapFeatureMask | Library | resources.libraries.python.TestConfig | Library | resources.libraries.python.TGSetup | Library | resources.libraries.python.topology.Topology diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot index 27908c3cf8..a9b6440173 100644 --- a/resources/libraries/robot/shared/interfaces.robot +++ b/resources/libraries/robot/shared/interfaces.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -44,10 +44,17 @@ | | ... | *Set UP state on VPP interfaces in path on all DUT nodes and set | | ... | maximal MTU.* | | +| | ... | *Arguments:* +| | ... | - validate - Validate interfaces are up. +| | ... | Type: boolean +| | +| | [Arguments] | ${validate}=${True} +| | | | FOR | ${dut} | IN | @{duts} | | | Set interfaces in path up on node | ${dut} | | END -| | All VPP Interfaces Ready Wait | ${nodes} | retries=${60} +| | Run Keyword If | ${validate} +| | ... | All VPP Interfaces Ready Wait | ${nodes} | retries=${60} | Set interfaces in path up on node | | [Documentation] @@ -109,6 +116,18 @@ | | | | Run Keyword | Pre-initialize layer ${driver} on all DUTs +| Pre-initialize layer tap on all DUTs +| | [Documentation] +| | ... | Pre-initialize tap driver. Currently no operation. +| | +| | No operation + +| Pre-initialize layer vhost on all DUTs +| | [Documentation] +| | ... | Pre-initialize vhost driver. Currently no operation. +| | +| | No operation + | Pre-initialize layer vfio-pci on all DUTs | | [Documentation] | | ... | Pre-initialize vfio-pci driver by adding related sections to startup @@ -179,18 +198,20 @@ | | ... | *Arguments:* | | ... | - driver - NIC driver used in test [vfio-pci|avf|rdma-core]. | | ... | Type: string +| | ... | - validate - Validate interfaces are up. +| | ... | Type: boolean | | | | ... | *Example:* | | | | ... | \| Initialize layer driver \| vfio-pci \| | | -| | [Arguments] | ${driver} +| | [Arguments] | ${driver} | ${validate}=${True} | | | | FOR | ${dut} | IN | @{duts} | | | Initialize layer driver on node | ${dut} | ${driver} | | END | | Set Test Variable | ${int} | vf -| | Set interfaces in path up +| | Set interfaces in path up | validate=${validate} | Initialize layer driver on node | | [Documentation] @@ -236,6 +257,72 @@ | | | Run Keyword | Initialize layer ${driver} on node | ${dut} | ${pf} | | END +| Initialize layer tap on node +| | [Documentation] +| | ... | Initialize tap interfaces on DUT. +| | +| | ... | *Arguments:* +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - pf - TAP ID (logical port). +| | ... | Type: integer +| | +| | ... | *Example:* +| | +| | ... | \| Initialize layer tap on node \| DUT1 \| 0 \| +| | +| | [Arguments] | ${dut} | ${pf} +| | +| | Create Namespace +| | ... | ${nodes['${dut}']} | tap${${pf}-1}_namespace +| | ${tap_feature_mask}= | Create Tap feature mask | gso=${enable_gso} +| | ${_tap}= +| | ... | And Add Tap Interface | ${nodes['${dut}']} | tap${${pf}-1} +| | ... | host_namespace=tap${${pf}-1}_namespace +| | ... | num_rx_queues=${rxq_count_int} +| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size} +| | ... | tap_feature_mask=${tap_feature_mask} +| | ${_mac}= +| | ... | Get Interface MAC | ${nodes['${dut}']} | tap${pf} +| | ${_tap}= | Create List | ${_tap} +| | ${_mac}= | Create List | ${_mac} +| | Vhost User Affinity +| | ... | ${nodes['${dut}']} | ${${dut}_pf${pf}}[0] +| | ... | skip_cnt=${${CPU_CNT_MAIN}+${CPU_CNT_SYSTEM}+${cpu_count_int}} +| | Set Test Variable +| | ... | ${${dut}_vf${pf}} | ${_tap} +| | Set Test Variable +| | ... | ${${dut}_vf${pf}_mac} | ${_mac} + +| Initialize layer vhost on node +| | [Documentation] +| | ... | Initialize vhost interfaces on DUT. +| | +| | ... | *Arguments:* +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - pf - VHOST ID (logical port). +| | ... | Type: integer +| | +| | ... | *Example:* +| | +| | ... | \| Initialize layer vhost on node \| DUT1 \| 0 \| +| | +| | [Arguments] | ${dut} | ${pf} +| | +| | ${virtio_feature_mask}= | Create Virtio feature mask | gso=${enable_gso} +| | ${vhost}= | Vpp Create Vhost User Interface +| | ... | ${nodes['${dut}']} | /var/run/vpp/sock-${pf}-1 +| | ... | is_server=${True} | virtio_feature_mask=${virtio_feature_mask} +| | ${_mac}= +| | ... | Get Interface MAC | ${nodes['${dut}']} | vhost${pf} +| | ${_vhost}= | Create List | ${_vhost} +| | ${_mac}= | Create List | ${_mac} +| | Set Test Variable +| | ... | ${${dut}_vf${pf}} | ${_vhost} +| | Set Test Variable +| | ... | ${${dut}_vf${pf}_mac} | ${_mac} + | Initialize layer vfio-pci on node | | [Documentation] | | ... | Initialize vfio-pci interfaces on DUT on NIC PF. diff --git a/resources/libraries/robot/shared/test_teardown.robot b/resources/libraries/robot/shared/test_teardown.robot index a2f35ed76c..18be67cfc5 100644 --- a/resources/libraries/robot/shared/test_teardown.robot +++ b/resources/libraries/robot/shared/test_teardown.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -104,6 +104,13 @@ | | | ... | Show Geneve Tunnel Data | ${nodes['${dut}']} | | END +| Additional Test Tear Down Action For iPerf3 +| | [Documentation] +| | ... | Additional teardown for test which uses iPerf3 server. +| | +| | Run Keyword And Ignore Error +| | ... | Teardown iPerf | ${nodes['${iperf_server_node}']} + | Additional Test Tear Down Action For ipsec_sa | | [Documentation] | | ... | Additional teardown for tests which uses IPSec security association. @@ -200,4 +207,4 @@ | | | | ${vnf_status} | ${value}= | Run Keyword And Ignore Error | | ... | Keyword Should Exist | vnf_manager.Kill All VMs -| | Run Keyword If | '${vnf_status}' == 'PASS' | vnf_manager.Kill All VMs +| | Run Keyword If | '${vnf_status}' == 'PASS' | vnf_manager.Kill All VMs \ No newline at end of file diff --git a/resources/libraries/robot/shared/vm.robot b/resources/libraries/robot/shared/vm.robot index c33ca5fea9..eb6acb371f 100644 --- a/resources/libraries/robot/shared/vm.robot +++ b/resources/libraries/robot/shared/vm.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -12,9 +12,9 @@ # limitations under the License. *** Settings *** -| Documentation | Keywords related to vm lifecycle management -... | Library | resources.libraries.python.InterfaceUtil +| +| Documentation | Keywords related to vm lifecycle management *** Keywords *** | Configure chains of NFs connected via vhost-user @@ -32,6 +32,7 @@ | | ... | Type: boolean | | ... | - auto_scale - Whether to use same amount of RXQs for memif interface | | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean +| | ... | - fixed_auto_scale - Enable fixed auto_scale (nf_dtc). Type: boolean | | ... | - vnf - Network function as a payload. Type: string | | ... | - pinning - Whether to pin QEMU VMs to specific cores | | @@ -42,18 +43,23 @@ | | | | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${jumbo}=${False} | | ... | ${perf_qemu_qsz}=${1024} | ${use_tuned_cfs}=${False} -| | ... | ${auto_scale}=${True} | ${vnf}=vpp | ${pinning}=${True} +| | ... | ${auto_scale}=${True} | ${fixed_auto_scale}=${False} | ${vnf}=vpp +| | ... | ${pinning}=${True} | | +| | ${enable_gso} = | Get Variable Value | ${enable_gso} | ${False} +| | ${enable_csum} = | Get Variable Value | ${enable_csum} | ${False} +| | ${virtio_feature_mask}= | Create Virtio feature mask +| | ... | gso=${enable_gso} | csum=${enable_csum} | | Import Library | resources.libraries.python.QemuManager | ${nodes} | | ... | WITH NAME | vnf_manager | | Run Keyword | vnf_manager.Construct VMs on all nodes | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | jumbo=${jumbo} | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs} -| | ... | auto_scale=${auto_scale} | vnf=${vnf} -| | ... | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0] +| | ... | auto_scale=${auto_scale} | fixed_auto_scale=${fixed_auto_scale} +| | ... | vnf=${vnf} | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0] | | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr} -| | ... | rxq_count_int=${rxq_count_int} | enable_csum=${False} -| | ... | enable_gso=${False} +| | ... | rxq_count_int=${rxq_count_int} +| | ... | virtio_feature_mask=${virtio_feature_mask} | | ${cpu_wt}= | Run Keyword | vnf_manager.Start All VMs | pinning=${pinning} | | ${cpu_alloc_str}= | Catenate | SEPARATOR=, | ${cpu_alloc_str} | ${cpu_wt} | | Set Test Variable | ${cpu_alloc_str} @@ -76,8 +82,10 @@ | | ... | Type: boolean | | ... | - auto_scale - Whether to use same amount of RXQs for memif interface | | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean +| | ... | - fixed_auto_scale - Enable override auto_scale. Type: boolean | | ... | - vnf - Network function as a payload. Type: string | | ... | - pinning - Whether to pin QEMU VMs to specific cores +| | ... | - validate - Validate interfaces are up. Type: boolean | | | | ... | *Example:* | | @@ -87,9 +95,14 @@ | | | | [Arguments] | ${node} | ${nf_chains}=${1} | ${nf_nodes}=${1} | | ... | ${jumbo}=${False} | ${perf_qemu_qsz}=${1024} -| | ... | ${use_tuned_cfs}=${False} | ${auto_scale}=${True} | ${vnf}=vpp -| | ... | ${pinning}=${True} +| | ... | ${use_tuned_cfs}=${False} | ${auto_scale}=${True} +| | ... | ${fixed_auto_scale}=${False} | ${vnf}=vpp | ${pinning}=${True} +| | ... | ${validate}=${True} | | +| | ${enable_gso}= | Get Variable Value | ${enable_gso} | ${False} +| | ${enable_csum}= | Get Variable Value | ${enable_csum} | ${False} +| | ${virtio_feature_mask}= | Create Virtio feature mask +| | ... | gso=${enable_gso} | csum=${enable_csum} | | Import Library | resources.libraries.python.QemuManager | ${nodes} | | ... | WITH NAME | vnf_manager | | Run Keyword | vnf_manager.Initialize @@ -97,15 +110,16 @@ | | ... | node=${node} | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | jumbo=${jumbo} | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs} -| | ... | auto_scale=${auto_scale} | vnf=${vnf} -| | ... | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0] +| | ... | auto_scale=${auto_scale} | fixed_auto_scale=${fixed_auto_scale} +| | ... | vnf=${vnf} | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0] | | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr} -| | ... | rxq_count_int=${rxq_count_int} | enable_csum=${False} -| | ... | enable_gso=${False} +| | ... | rxq_count_int=${rxq_count_int} +| | ... | virtio_feature_mask=${virtio_feature_mask} | | ${cpu_wt}= | Run Keyword | vnf_manager.Start All VMs | pinning=${pinning} | | ${cpu_alloc_str}= | Catenate | SEPARATOR=, | ${cpu_alloc_str} | ${cpu_wt} | | Set Test Variable | ${cpu_alloc_str} -| | All VPP Interfaces Ready Wait | ${nodes} | retries=${300} +| | Run Keyword If | ${validate} +| | ... | All VPP Interfaces Ready Wait | ${nodes} | retries=${300} | | VPP round robin RX placement on all DUTs | ${nodes} | prefix=Virtual | Configure chains of NFs connected via passtrough @@ -123,6 +137,7 @@ | | ... | Type: boolean | | ... | - auto_scale - Whether to use same amount of RXQs for memif interface | | ... | in containers as vswitch, otherwise use single RXQ. Type: boolean +| | ... | - fixed_auto_scale - Enable override auto_scale. Type: boolean | | ... | - vnf - Network function as a payload. Type: string | | ... | - pinning - Whether to pin QEMU VMs to specific cores | | @@ -133,18 +148,23 @@ | | | | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${jumbo}=${False} | | ... | ${perf_qemu_qsz}=${1024} | ${use_tuned_cfs}=${False} -| | ... | ${auto_scale}=${True} | ${vnf}=vpp | ${pinning}=${True} +| | ... | ${auto_scale}=${True} | ${fixed_auto_scale}=${False} | ${vnf}=vpp +| | ... | ${pinning}=${True} | | +| | ${enable_gso} = | Get Variable Value | ${enable_gso} | ${False} +| | ${enable_csum} = | Get Variable Value | ${enable_csum} | ${False} +| | ${virtio_feature_mask}= | Create Virtio feature mask +| | ... | gso=${enable_gso} | csum=${enable_csum} | | Import Library | resources.libraries.python.QemuManager | ${nodes} | | ... | WITH NAME | vnf_manager | | Run Keyword | vnf_manager.Construct VMs on all nodes | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | jumbo=${jumbo} | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs} -| | ... | auto_scale=${auto_scale} | vnf=${vnf} -| | ... | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0] +| | ... | auto_scale=${auto_scale} | fixed_auto_scale=${fixed_auto_scale} +| | ... | vnf=${vnf} | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0] | | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr} -| | ... | rxq_count_int=${rxq_count_int} | enable_csum=${False} -| | ... | enable_gso=${False} +| | ... | rxq_count_int=${rxq_count_int} +| | ... | virtio_feature_mask=${virtio_feature_mask} | | ... | if1=${DUT1_${int}1}[0] | if2=${DUT1_${int}2}[0] | | ${cpu_wt}= | Run Keyword | vnf_manager.Start All VMs | pinning=${pinning} | | ${cpu_alloc_str}= | Catenate | SEPARATOR=, | ${cpu_alloc_str} | ${cpu_wt} -- cgit 1.2.3-korg