diff options
Diffstat (limited to 'resources')
-rw-r--r-- | resources/libraries/bash/config/config | 7 | ||||
-rw-r--r-- | resources/libraries/bash/config/defaults | 7 | ||||
-rwxr-xr-x | resources/libraries/bash/qemu_build.sh | 86 | ||||
-rw-r--r-- | resources/libraries/bash/shell/qemu_utils.sh | 38 | ||||
-rw-r--r-- | resources/libraries/python/QemuUtils.py | 4 | ||||
-rw-r--r-- | resources/libraries/robot/performance/performance_configuration.robot | 227 |
6 files changed, 195 insertions, 174 deletions
diff --git a/resources/libraries/bash/config/config b/resources/libraries/bash/config/config index 2b71edcc49..42f23bdaf8 100644 --- a/resources/libraries/bash/config/config +++ b/resources/libraries/bash/config/config @@ -1,5 +1,8 @@ -QEMU_INSTALL_DIR=/opt +QEMU_INSTALL_DIR=/opt/qemu-2.5.0 QEMU_INSTALL_VERSION=qemu-2.5.0 +QEMU_PATCH=false +QEMU_FORCE_INSTALL=false +QEMU_TARGET_LIST=x86_64-softmmu DPDK_INSTALL_DIR=/opt -DPDK_INSTALL_VERSION=dpdk-17.11
\ No newline at end of file +DPDK_INSTALL_VERSION=dpdk-17.11 diff --git a/resources/libraries/bash/config/defaults b/resources/libraries/bash/config/defaults index 1547452982..a70add12b1 100644 --- a/resources/libraries/bash/config/defaults +++ b/resources/libraries/bash/config/defaults @@ -2,11 +2,14 @@ typeset -A cfg cfg=( # set default values in config array - [QEMU_INSTALL_DIR]="/opt" + [QEMU_INSTALL_DIR]="/opt/qemu-2.5.0" [QEMU_INSTALL_VERSION]="qemu-2.5.0" + [QEMU_PATCH]=false + [QEMU_FORCE_INSTALL]=false + [QEMU_TARGET_LIST]=x86_64-softmmu [DPDK_INSTALL_DIR]=/opt [DPDK_INSTALL_VERSION]=dpdk-17.11 [K8S_CALICO]="${SCRIPT_DIR}/../../templates/kubernetes/calico_v2.6.3.yaml" [K8S_CONTIV_VPP]="https://raw.githubusercontent.com/contiv/vpp/master/k8s/contiv-vpp.yaml" [K8S_CSIT]="${SCRIPT_DIR}/../../templates/kubernetes/csit.yaml" -)
\ No newline at end of file +) diff --git a/resources/libraries/bash/qemu_build.sh b/resources/libraries/bash/qemu_build.sh index 57520a9b5e..4638ec1bcb 100755 --- a/resources/libraries/bash/qemu_build.sh +++ b/resources/libraries/bash/qemu_build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2016 Cisco and/or its affiliates. +# Copyright (c) 2018 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,81 +12,47 @@ # See the License for the specific language governing permissions and # limitations under the License. -QEMU_VERSION="qemu-2.5.0" -QEMU_DOWNLOAD_REPO="http://download.qemu-project.org/" -QEMU_DOWNLOAD_PACKAGE="${QEMU_VERSION}.tar.xz" -QEMU_PACKAGE_URL="${QEMU_DOWNLOAD_REPO}${QEMU_DOWNLOAD_PACKAGE}" -QEMU_INSTALL_DIR="/opt/${QEMU_VERSION}" +set -x + SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -TARGET_LIST="x86_64-softmmu" +# Include +source ${SCRIPT_DIR}/config/defaults +source ${SCRIPT_DIR}/shell/qemu_utils.sh + +# Read configuration +while read line +do + if echo $line | grep -F = &>/dev/null + then + varname=$(echo "$line" | cut -d '=' -f 1) + cfg[$varname]=$(echo "$line" | cut -d '=' -f 2-) + fi +done < ${SCRIPT_DIR}/config/config + +# Read parameters for i in "$@"; do case $i in --version=*) - QEMU_VERSION="${i#*=}" + cfg['QEMU_INSTALL_VERSION']="${i#*=}" shift ;; --directory=*) - QEMU_INSTALL_DIR="${i#*=}" + cfg['QEMU_INSTALL_DIR']="${i#*=}" shift ;; --patch) - PATCH=1 + cfg['QEMU_PATCH']=true shift ;; --force) - FORCE=1 + cfg['QEMU_FORCE_INSTALL']=true shift ;; --target-list) - TARGET_LIST="${i#*=}" + cfg['QEMU_TARGET_LIST']="${i#*=}" shift ;; *) ;; esac done -if test "$(id -u)" -ne 0 -then - echo "Please use root or sudo to be able to install into: ${QEMU_INSTALL_DIR}" - exit 1 -fi - -WORKING_DIR=$(mktemp -d) || \ - { echo "Failed to create temporary working dir"; exit 1; } -trap "rm -r ${WORKING_DIR}" EXIT - -if [ $FORCE ] -then - rm -rf ${QEMU_INSTALL_DIR} -else - test -d ${QEMU_INSTALL_DIR} && \ - { echo "Qemu already installed: ${QEMU_INSTALL_DIR}"; exit 0; } -fi - -# Download QEMU source code if no local copy exists -if [ ! -f /opt/${QEMU_DOWNLOAD_PACKAGE} ]; then - wget -P /opt -q ${QEMU_PACKAGE_URL} || \ - { echo "Failed to download ${QEMU_VERSION}"; exit 1; } -fi - -# Extract archive into temp directory -tar --strip-components 1 -xf /opt/${QEMU_DOWNLOAD_PACKAGE} -C ${WORKING_DIR} || \ - { echo "Failed to extract ${QEMU_VERSION}.tar.xz"; exit 1; } - -cd ${WORKING_DIR} -mkdir ${QEMU_INSTALL_DIR} || \ - { echo "Failed to create ${QEMU_INSTALL_DIR}"; exit 1; } - -# Apply additional patches -if [ $PATCH ] -then - chmod +x ${SCRIPT_DIR}/qemu_patches/${QEMU_VERSION}/* - run-parts --verbose --report ${SCRIPT_DIR}/qemu_patches/${QEMU_VERSION} -fi - -# Build -./configure --target-list=${TARGET_LIST} --prefix=${QEMU_INSTALL_DIR} || \ - { echo "Failed to configure ${QEMU_VERSION}"; exit 1; } -make -j`nproc` || \ - { echo "Failed to compile ${QEMU_VERSION}"; exit 1; } -make install || \ - { echo "Failed to install ${QEMU_VERSION}"; exit 1; } - -echo QEMU ${QEMU_VERSION} ready +# Install qemu +qemu_utils.qemu_install ${cfg[QEMU_INSTALL_DIR]} ${cfg[QEMU_INSTALL_VERSION]} \ + ${cfg[QEMU_PATCH]} ${cfg[QEMU_FORCE_INSTALL]} ${cfg[QEMU_TARGET_LIST]} diff --git a/resources/libraries/bash/shell/qemu_utils.sh b/resources/libraries/bash/shell/qemu_utils.sh index 510d9f2838..cabf93d978 100644 --- a/resources/libraries/bash/shell/qemu_utils.sh +++ b/resources/libraries/bash/shell/qemu_utils.sh @@ -15,47 +15,47 @@ function qemu_utils.qemu_delete { # Deletes the QEMU directory # QEMU install directory - qemu_install_dir=$1 - # QEMU install version - qemu_install_ver=$2 + local qemu_install_dir=$1 - [ -d ${qemu_install_dir}/${qemu_install_ver} ] && \ - sudo rm -r ${qemu_install_dir}/${qemu_install_ver} && \ - echo "${qemu_install_dir}/${qemu_install_ver} removed" + [ -d ${qemu_install_dir} ] && \ + sudo rm -r ${qemu_install_dir} && \ + echo "${qemu_install_dir} removed" } function qemu_utils.qemu_install { # Downloads and installs QEMU # QEMU install directory - qemu_install_dir=$1 + local qemu_install_dir=$1 # QEMU install version - qemu_install_ver=$2 + local qemu_install_ver=$2 # QEMU patch - qemu_patch=$3 + local qemu_patch=${3:-false} # Force install (if true then remove previous installation; default false) - force_install=${4:-false} + local force_install=${4:-false} # QEMU repo URL - qemu_package_url="http://download.qemu-project.org/${qemu_install_ver}.tar.xz" + local qemu_package_url="http://download.qemu-project.org/${qemu_install_ver}.tar.xz" + # QEMU target arch + local qemu_target_list=${5:-x86_64-softmmu} - if [ $force_install ]; then + if [ $force_install = true ]; then # Cleanup QEMU dir - qemu_utils.qemu_delete $qemu_install_dir $qemu_install_ver + qemu_utils.qemu_delete $qemu_install_dir else # Test if QEMU was installed previously test -d $qemu_install_dir && \ { echo "Qemu already installed: $qemu_install_dir"; exit 0; } fi - tmp_dir=$(mktemp -d) || \ + local tmp_dir=$(mktemp -d) || \ { echo "Failed to create temporary working dir"; exit 1; } - trap "rm -r ${tmp_dir}" EXIT + trap "sudo rm -r ${tmp_dir}" EXIT # Download QEMU source code if no local copy exists if [ ! -f /opt/${qemu_install_ver}.tar.xz ]; then sudo wget -e use_proxy=yes -P /opt -q ${qemu_package_url} || \ { echo "Failed to download ${qemu_install_ver}"; exit 1; } fi - tar --strip-components 1 -xvJf ${tmp_dir}/${qemu_install_ver}.tar.xz -C ${tmp_dir} && \ + tar --strip-components 1 -xf /opt/${qemu_install_ver}.tar.xz -C ${tmp_dir} || \ { echo "Failed to exctract ${qemu_install_ver}.tar.xz"; exit 1; } cd ${tmp_dir} @@ -63,14 +63,14 @@ function qemu_utils.qemu_install { { echo "Failed to create ${qemu_install_dir}"; exit 1; } # Apply additional patches - if [ $qemu_patch ] + if [ $qemu_patch = true ] then chmod +x ${SCRIPT_DIR}/qemu_patches/${qemu_install_ver}/* run-parts --verbose --report ${SCRIPT_DIR}/qemu_patches/${qemu_install_ver} fi # Build - sudo ./configure --target-list=x86_64-softmmu --prefix=${qemu_install_dir}/${qemu_install_ver} || \ + sudo ./configure --target-list=${qemu_target_list} --prefix=${qemu_install_dir} || \ { echo "Failed to configure ${qemu_install_ver}"; exit 1; } sudo make -j`nproc` || \ { echo "Failed to compile ${qemu_install_ver}"; exit 1; } @@ -78,4 +78,4 @@ function qemu_utils.qemu_install { { echo "Failed to install ${qemu_install_ver}"; exit 1; } echo "QEMU ${qemu_install_ver} ready" -}
\ No newline at end of file +} diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py index 6426394bf4..ecce4e7a8b 100644 --- a/resources/libraries/python/QemuUtils.py +++ b/resources/libraries/python/QemuUtils.py @@ -677,6 +677,10 @@ class QemuUtils(object): ssh.connect(node) directory = ' --directory={0}'.format(Constants.QEMU_INSTALL_DIR) + if apply_patch: + directory += '-patch' + else: + directory += '-base' version = ' --version={0}'.format(Constants.QEMU_INSTALL_VERSION) force = ' --force' if force_install else '' patch = ' --patch' if apply_patch else '' diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot index 542583d1bd..e544cdd3a3 100644 --- a/resources/libraries/robot/performance/performance_configuration.robot +++ b/resources/libraries/robot/performance/performance_configuration.robot @@ -890,40 +890,40 @@ | | ${port_limit}= | Set Variable | ${65535} | | ${acl}= | Set Variable | ipv4 permit | | :FOR | ${nr} | IN RANGE | 0 | ${no_hit_aces_number} -| | | ${src_ip_int} = | Evaluate | $src_ip_int + $ip_step -| | | ${dst_ip_int} = | Evaluate | $dst_ip_int + $ip_step -| | | ${sport}= | Evaluate | $sport + $port_step -| | | ${dport}= | Evaluate | $dport + $port_step -| | | ${ipv4_limit_reached}= | Set Variable If -| | | ... | $src_ip_int > $ip_limit_int or $src_ip_int > $ip_limit_int -| | | ... | ${True} -| | | ${udp_limit_reached}= | Set Variable If -| | | ... | $sport > $port_limit or $dport > $port_limit | ${True} -| | | Run Keyword If | $ipv4_limit_reached is True | Log -| | | ... | Can't do more iterations - IPv4 address limit has been reached. -| | | ... | WARN -| | | Run Keyword If | $udp_limit_reached is True | Log -| | | ... | Can't do more iterations - UDP port limit has been reached. -| | | ... | WARN -| | | ${src_ip} = | Run Keyword If | $ipv4_limit_reached is True -| | | ... | Set Variable | ${ip_limit} -| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($src_ip_int)) -| | | ... | modules=ipaddress -| | | ${dst_ip} = | Run Keyword If | $ipv4_limit_reached is True -| | | ... | Set Variable | ${ip_limit} -| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($dst_ip_int)) -| | | ... | modules=ipaddress -| | | ${sport}= | Set Variable If | ${sport} > $port_limit | $port_limit -| | | ... | ${sport} -| | | ${dport}= | Set Variable If | ${dport} > $port_limit | $port_limit -| | | ... | ${dport} -| | | ${acl}= | Catenate | ${acl} | src ${src_ip}/32 dst ${dst_ip}/32 -| | | ... | sport ${sport} | dport ${dport}, -| | | Exit For Loop If -| | | ... | $ipv4_limit_reached is True or $udp_limit_reached is True +| | | ${src_ip_int} = | Evaluate | $src_ip_int + $ip_step +| | | ${dst_ip_int} = | Evaluate | $dst_ip_int + $ip_step +| | | ${sport}= | Evaluate | $sport + $port_step +| | | ${dport}= | Evaluate | $dport + $port_step +| | | ${ipv4_limit_reached}= | Set Variable If +| | | ... | $src_ip_int > $ip_limit_int or $src_ip_int > $ip_limit_int +| | | ... | ${True} +| | | ${udp_limit_reached}= | Set Variable If +| | | ... | $sport > $port_limit or $dport > $port_limit | ${True} +| | | Run Keyword If | $ipv4_limit_reached is True | Log +| | | ... | Can't do more iterations - IPv4 address limit has been reached. +| | | ... | WARN +| | | Run Keyword If | $udp_limit_reached is True | Log +| | | ... | Can't do more iterations - UDP port limit has been reached. +| | | ... | WARN +| | | ${src_ip} = | Run Keyword If | $ipv4_limit_reached is True +| | | ... | Set Variable | ${ip_limit} +| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($src_ip_int)) +| | | ... | modules=ipaddress +| | | ${dst_ip} = | Run Keyword If | $ipv4_limit_reached is True +| | | ... | Set Variable | ${ip_limit} +| | | ... | ELSE | Evaluate | str(ipaddress.ip_address($dst_ip_int)) +| | | ... | modules=ipaddress +| | | ${sport}= | Set Variable If | ${sport} > $port_limit | $port_limit +| | | ... | ${sport} +| | | ${dport}= | Set Variable If | ${dport} > $port_limit | $port_limit +| | | ... | ${dport} +| | | ${acl}= | Catenate | ${acl} | src ${src_ip}/32 dst ${dst_ip}/32 +| | | ... | sport ${sport} | dport ${dport}, +| | | Exit For Loop If +| | | ... | $ipv4_limit_reached is True or $udp_limit_reached is True | | ${acl}= | Catenate | ${acl} -| | ... | ipv4 ${acl_action} src ${trex_stream1_subnet}, -| | ... | ipv4 ${acl_action} src ${trex_stream2_subnet} +| | ... | ipv4 ${acl_action} src ${trex_stream1_subnet}, +| | ... | ipv4 ${acl_action} src ${trex_stream2_subnet} | | Add Replace Acl Multi Entries | ${dut} | rules=${acl} | | @{acl_list}= | Create List | ${0} | | Run Keyword If | 'input' in $acl_apply_type and $dut_if1 is not None @@ -1433,6 +1433,8 @@ | | ... | Type: integer | | ... | - qemu_id - Qemu Id when starting more then one guest VM on DUT node. | | ... | Type: integer +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1444,7 +1446,7 @@ | | ... | \| qemu_id=${2} \| | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | ${skip}=${6} -| | ... | ${count}=${5} | ${qemu_id}=${1} +| | ... | ${count}=${5} | ${qemu_id}=${1} | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | qemu_id=${qemu_id} | | ... | WITH NAME | ${vm_name} @@ -1458,12 +1460,17 @@ | | ${qemu_cpus}= | Cpu slice of list per node | ${dut_node} | ${dut_numa} | | ... | skip_cnt=${skip_cnt} | cpu_cnt=${count} | smt_used=${False} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1} +| | ... | jumbo_frames=${jumbo_frames} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} -| | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} -| | ... | force_install=${True} | apply_patch=${apply_patch} -| | Run keyword | ${vm_name}.Qemu Set Bin | ${perf_qemu_bin} +| | ${perf_qemu_path}= | Set Variable If | ${apply_patch} +| | ... | ${perf_qemu_path}-patch/bin/ +| | ... | ${perf_qemu_path}-base/bin/ +| | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${dut_node} +| | ... | apply_patch=${apply_patch} +| | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} | | Run keyword | ${vm_name}.Qemu Set Node | ${dut_node} | | Run keyword | ${vm_name}.Qemu Set Smp | ${count} | ${count} | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 @@ -1471,9 +1478,11 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | eal_mem_channels=4 | | ... | pmd_fwd_mode=io | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure '${nr}' guest VMs with dpdk-testpmd connected via vhost-user in 3-node circular topology @@ -1488,10 +1497,12 @@ | | ... | - ${system_cpus} - Number of CPUs allocated for OS itself. | | ... | - ${vpp_cpus} - Number of CPUs allocated for VPP. | | ... | - ${vm_cpus} - Number of CPUs to be allocated per QEMU instance. +| | ... | - ${jumbo_frames} - Jumbo frames are used (True) or are not used +| | ... | (False) in the test. | | ... | | ... | *Example:* | | ... -| | ... | \| Configure '2' guest VMs with dpdk-testpmd connected via vhost-user \ +| | ... | \| Configure '2' guest VMs with dpdk-testpmd connected via vhost-user\ | | ... | in 3-node circular topology \| | | ... | | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 @@ -1501,13 +1512,13 @@ | | | ${vm1}= | Configure guest VM with dpdk-testpmd connected via vhost-user | | | ... | ${dut1} | ${sock1} | ${sock2} | DUT1_VM${number} | | | ... | skip=${skip_cpus} | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut1_vm_refs} | DUT1_VM${number} | ${vm1} | | | ${vm2}= | Configure guest VM with dpdk-testpmd connected via vhost-user | | | ... | ${dut2} | ${sock1} | ${sock2} | DUT2_VM${number} | | | ... | skip=${skip_cpus} | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut2_vm_refs} | DUT2_VM${number} | ${vm2} -| | | Run Keyword Unless | ${qemu_built} | Set Suite Variable | ${qemu_built} -| | | ... | ${True} | Configure guest VM with dpdk-testpmd using SMT connected via vhost-user | | [Documentation] @@ -1524,6 +1535,8 @@ | | ... | - vm_name - QemuUtil instance name. Type: string | | ... | - skip - number of cpus which will be skipped. Type: int | | ... | - count - number of cpus which will be allocated for qemu. Type: int +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1532,7 +1545,7 @@ | | ... | \| ${6} \| ${5} \| | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | ${skip}=${6} -| | ... | ${count}=${5} +| | ... | ${count}=${5} | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | | ... | WITH NAME | ${vm_name} @@ -1541,12 +1554,17 @@ | | ${qemu_cpus}= | Cpu slice of list per node | ${dut_node} | ${dut_numa} | | ... | skip_cnt=${skip} | cpu_cnt=${count} | smt_used=${True} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1} +| | ... | jumbo_frames=${jumbo_frames} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} -| | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} -| | ... | force_install=${True} | apply_patch=${apply_patch} -| | Run keyword | ${vm_name}.Qemu Set Bin | ${perf_qemu_bin} +| | ${perf_qemu_path}= | Set Variable If | ${apply_patch} +| | ... | ${perf_qemu_path}-patch/bin/ +| | ... | ${perf_qemu_path}-base/bin/ +| | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${dut_node} +| | ... | apply_patch=${apply_patch} +| | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} | | Run keyword | ${vm_name}.Qemu Set Node | ${dut_node} | | Run keyword | ${vm_name}.Qemu Set Smp | ${count} | ${count} | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 @@ -1554,9 +1572,11 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | eal_mem_channels=4 | | ... | pmd_fwd_mode=io | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure guest VM with dpdk-testpmd-mac connected via vhost-user @@ -1579,6 +1599,8 @@ | | ... | Type: integer | | ... | - qemu_id - Qemu Id when starting more then one guest VM on DUT node. | | ... | Type: integer +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1592,7 +1614,7 @@ | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | | ... | ${eth0_mac} | ${eth1_mac} | ${skip}=${6} | ${count}=${5} -| | ... | ${qemu_id}=${1} +| | ... | ${qemu_id}=${1} | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | qemu_id=${qemu_id} | | ... | WITH NAME | ${vm_name} @@ -1606,12 +1628,17 @@ | | ${qemu_cpus}= | Cpu slice of list per node | ${dut_node} | ${dut_numa} | | ... | skip_cnt=${skip_cnt} | cpu_cnt=${count} | smt_used=${False} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1} +| | ... | jumbo_frames=${jumbo_frames} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} -| | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} -| | ... | force_install=${True} | apply_patch=${apply_patch} -| | Run keyword | ${vm_name}.Qemu Set Bin | ${perf_qemu_bin} +| | ${perf_qemu_path}= | Set Variable If | ${apply_patch} +| | ... | ${perf_qemu_path}-patch/bin/ +| | ... | ${perf_qemu_path}-base/bin/ +| | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${dut_node} +| | ... | apply_patch=${apply_patch} +| | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} | | Run keyword | ${vm_name}.Qemu Set Node | ${dut_node} | | Run keyword | ${vm_name}.Qemu Set Smp | ${count} | ${count} | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 @@ -1619,10 +1646,12 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | | ... | eal_mem_channels=4 | pmd_fwd_mode=mac | pmd_eth_peer_0=0,${eth0_mac} | | ... | pmd_eth_peer_1=1,${eth1_mac} | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure '${nr}' guest VMs with dpdk-testpmd-mac connected via vhost-user in 3-node circular topology @@ -1638,10 +1667,12 @@ | | ... | - ${system_cpus} - Number of CPUs allocated for OS itself. | | ... | - ${vpp_cpus} - Number of CPUs allocated for VPP. | | ... | - ${vm_cpus} - Number of CPUs to be allocated per QEMU instance. +| | ... | - ${jumbo_frames} - Jumbo frames are used (True) or are not used +| | ... | (False) in the test. | | ... | | ... | *Example:* | | ... -| | ... | \| Configure '2' guest VMs with dpdk-testpmd-mac connected via vhost-user \ +| | ... | \| Configure '2' guest VMs with dpdk-testpmd-mac connected via vhost-user\ | | ... | in 3-node circular topology \| | | ... | | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 @@ -1654,6 +1685,7 @@ | | | ... | ${dut1-vhost-${number}-if1_mac} | | | ... | ${dut1-vhost-${number}-if2_mac} | skip=${skip_cpus} | | | ... | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut1_vm_refs} | DUT1_VM${number} | ${vm1} | | | ${vm2}= | | | ... | Configure guest VM with dpdk-testpmd-mac connected via vhost-user @@ -1661,9 +1693,8 @@ | | | ... | ${dut2-vhost-${number}-if1_mac} | | | ... | ${dut2-vhost-${number}-if2_mac} | skip=${skip_cpus} | | | ... | count=${vm_cpus} | qemu_id=${number} +| | | ... | jumbo_frames=${jumbo_frames} | | | Set To Dictionary | ${dut2_vm_refs} | DUT2_VM${number} | ${vm2} -| | | Run Keyword Unless | ${qemu_built} | Set Suite Variable | ${qemu_built} -| | | ... | ${True} | Configure guest VM with dpdk-testpmd-mac using SMT connected via vhost-user | | [Documentation] @@ -1682,6 +1713,8 @@ | | ... | - eth1_mac - MAC address of second Vhost interface. Type: string | | ... | - skip - number of cpus which will be skipped. Type: int | | ... | - count - number of cpus which will be allocated for qemu. Type: int +| | ... | - jumbo_frames - Set True if jumbo frames are used in the test. +| | ... | Type: bool | | ... | | ... | *Example:* | | ... @@ -1691,6 +1724,7 @@ | | ... | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vm_name} | | ... | ${eth0_mac} | ${eth1_mac} | ${skip}=${6} | ${count}=${5} +| | ... | ${jumbo_frames}=${False} | | ... | | Import Library | resources.libraries.python.QemuUtils | | ... | WITH NAME | ${vm_name} @@ -1699,12 +1733,17 @@ | | ${qemu_cpus}= | Cpu slice of list per node | ${dut_node} | ${dut_numa} | | ... | skip_cnt=${skip} | cpu_cnt=${count} | smt_used=${True} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1} +| | ... | jumbo_frames=${jumbo_frames} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} +| | ... | jumbo_frames=${jumbo_frames} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} -| | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} -| | ... | force_install=${True} | apply_patch=${apply_patch} -| | Run keyword | ${vm_name}.Qemu Set Bin | ${perf_qemu_bin} +| | ${perf_qemu_path}= | Set Variable If | ${apply_patch} +| | ... | ${perf_qemu_path}-patch/bin/ +| | ... | ${perf_qemu_path}-base/bin/ +| | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${dut_node} +| | ... | apply_patch=${apply_patch} +| | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} | | Run keyword | ${vm_name}.Qemu Set Node | ${dut_node} | | Run keyword | ${vm_name}.Qemu Set Smp | ${count} | ${count} | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 @@ -1712,10 +1751,12 @@ | | ${vm}= | Run keyword | ${vm_name}.Qemu Start | | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy +| | ${max_pkt_len}= | Set Variable If | ${jumbo_frames} | 9000 | ${EMPTY} | | Dpdk Testpmd Start | ${vm} | eal_coremask=0x1f | | ... | eal_mem_channels=4 | pmd_fwd_mode=mac | pmd_eth_peer_0=0,${eth0_mac} | | ... | pmd_eth_peer_1=1,${eth1_mac} | pmd_disable_hw_vlan=${True} | | ... | pmd_txd=${perf_qemu_qsz} | pmd_rxd=${perf_qemu_qsz} +| | ... | pmd_max_pkt_len=${max_pkt_len} | | Return From Keyword | ${vm} | Configure guest VM with linux bridge connected via vhost-user @@ -1750,9 +1791,12 @@ | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} -| | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} -| | ... | force_install=${True} | apply_patch=${apply_patch} -| | Run keyword | ${vm_name}.Qemu Set Bin | ${perf_qemu_bin} +| | ${perf_qemu_path}= | Set Variable If | ${apply_patch} +| | ... | ${perf_qemu_path}-patch/bin/ +| | ... | ${perf_qemu_path}-base/bin/ +| | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${dut_node} +| | ... | apply_patch=${apply_patch} +| | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} | | Run keyword | ${vm_name}.Qemu Set Node | ${dut_node} | | Run keyword | ${vm_name}.Qemu Set Smp | ${count} | ${count} | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 @@ -1800,9 +1844,12 @@ | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} | | ${apply_patch}= | Set Variable If | "${perf_qemu_qsz}" == "256" | ${False} | | ... | ${True} -| | Run Keyword Unless | ${qemu_built} | ${vm_name}.Build QEMU | ${dut_node} -| | ... | force_install=${True} | apply_patch=${apply_patch} -| | Run keyword | ${vm_name}.Qemu Set Bin | ${perf_qemu_bin} +| | ${perf_qemu_path}= | Set Variable If | ${apply_patch} +| | ... | ${perf_qemu_path}-patch/bin/ +| | ... | ${perf_qemu_path}-base/bin/ +| | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${dut_node} +| | ... | apply_patch=${apply_patch} +| | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} | | Run keyword | ${vm_name}.Qemu Set Node | ${dut_node} | | Run keyword | ${vm_name}.Qemu Set Smp | ${count} | ${count} | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 @@ -2092,8 +2139,7 @@ | | ... | | ... | *Note:* | | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-${number}-1 -| | ... | - /tmp/memif-${number}-2 +| | ... | - /tmp/memif-DUT1_VNF${number}-${sid} | | ... | | ... | *Example:* | | ... @@ -2104,29 +2150,29 @@ | | Set Interface State | ${dut2} | ${dut2_if1} | up | | Set Interface State | ${dut2} | ${dut2_if2} | up | | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | ${sock1}= | Set Variable | /tmp/memif-DUT1_VNF${number}-1 -| | | ${sock2}= | Set Variable | /tmp/memif-DUT1_VNF${number}-2 -| | | ${prev_index}= | Evaluate | ${number}-1 -| | | Set up memif interfaces on DUT node | ${dut1} -| | | ... | ${sock1} | ${sock2} | ${number} | dut1-memif-${number}-if1 -| | | ... | dut1-memif-${number}-if2 -| | | ${dut1_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut1_if1} -| | | ... | ${dut1-memif-${prev_index}-if2} -| | | Configure L2XC | ${dut1} | ${dut1_xconnect_if1} -| | | ... | ${dut1-memif-${number}-if1} -| | | ${sock1}= | Set Variable | /tmp/memif-DUT2_VNF${number}-1 -| | | ${sock2}= | Set Variable | /tmp/memif-DUT2_VNF${number}-2 -| | | Set up memif interfaces on DUT node | ${dut2} -| | | ... | ${sock1} | ${sock2} | ${number} | dut2-memif-${number}-if1 -| | | ... | dut2-memif-${number}-if2 -| | | ${dut2_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut2_if1} -| | | ... | ${dut2-memif-${prev_index}-if2} -| | | Configure L2XC | ${dut2} | ${dut2_xconnect_if1} -| | | ... | ${dut2-memif-${number}-if1} -| | | Run Keyword If | ${number}==${nr} | Configure L2XC -| | | ... | ${dut1} | ${dut1-memif-${number}-if2} | ${dut1_if2} -| | | Run Keyword If | ${number}==${nr} | Configure L2XC -| | | ... | ${dut2} | ${dut2-memif-${number}-if2} | ${dut2_if2} +| | | ${sock1}= | Set Variable | memif-DUT1_VNF +| | | ${sock2}= | Set Variable | memif-DUT1_VNF +| | | ${prev_index}= | Evaluate | ${number}-1 +| | | Set up memif interfaces on DUT node | ${dut1} +| | | ... | ${sock1} | ${sock2} | ${number} | dut1-memif-${number}-if1 +| | | ... | dut1-memif-${number}-if2 +| | | ${dut1_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut1_if1} +| | | ... | ${dut1-memif-${prev_index}-if2} +| | | Configure L2XC | ${dut1} | ${dut1_xconnect_if1} +| | | ... | ${dut1-memif-${number}-if1} +| | | ${sock1}= | Set Variable | memif-DUT2_VNF +| | | ${sock2}= | Set Variable | memif-DUT2_VNF +| | | Set up memif interfaces on DUT node | ${dut2} +| | | ... | ${sock1} | ${sock2} | ${number} | dut2-memif-${number}-if1 +| | | ... | dut2-memif-${number}-if2 +| | | ${dut2_xconnect_if1}= | Set Variable If | ${number}==1 | ${dut2_if1} +| | | ... | ${dut2-memif-${prev_index}-if2} +| | | Configure L2XC | ${dut2} | ${dut2_xconnect_if1} +| | | ... | ${dut2-memif-${number}-if1} +| | | Run Keyword If | ${number}==${nr} | Configure L2XC +| | | ... | ${dut1} | ${dut1-memif-${number}-if2} | ${dut1_if2} +| | | Run Keyword If | ${number}==${nr} | Configure L2XC +| | | ... | ${dut2} | ${dut2-memif-${number}-if2} | ${dut2_if2} | Initialize L2 Bridge Domain for '${nr}' memif pairs in 3-node circular topology | | [Documentation] @@ -2139,8 +2185,7 @@ | | ... | | ... | *Note:* | | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-${number}-1 -| | ... | - /tmp/memif-${number}-2 +| | ... | - /tmp/memif-DUT1_VNF${number}-${sid} | | ... | | ... | *Example:* | | ... @@ -2153,8 +2198,8 @@ | | Add interface to bridge domain | ${dut2} | ${dut2_if1} | ${1} | | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2} | | :FOR | ${number} | IN RANGE | 1 | ${nr}+1 -| | | ${sock1}= | Set Variable | /tmp/memif-DUT1_VNF${number}-1 -| | | ${sock2}= | Set Variable | /tmp/memif-DUT1_VNF${number}-2 +| | | ${sock1}= | Set Variable | memif-DUT1_VNF +| | | ${sock2}= | Set Variable | memif-DUT1_VNF | | | Set up memif interfaces on DUT node | ${dut1} | | | ... | ${sock1} | ${sock2} | ${number} | dut1-memif-${number}-if1 | | | ... | dut1-memif-${number}-if2 @@ -2163,8 +2208,8 @@ | | | ... | ${dut1-memif-${number}-if1} | ${number} | | | Add interface to bridge domain | ${dut1} | | | ... | ${dut1-memif-${number}-if2} | ${bd_id2} -| | | ${sock1}= | Set Variable | /tmp/memif-DUT2_VNF${number}-1 -| | | ${sock2}= | Set Variable | /tmp/memif-DUT2_VNF${number}-2 +| | | ${sock1}= | Set Variable | memif-DUT2_VNF +| | | ${sock2}= | Set Variable | memif-DUT2_VNF | | | Set up memif interfaces on DUT node | ${dut2} | | | ... | ${sock1} | ${sock2} | ${number} | dut2-memif-${number}-if1 | | | ... | dut2-memif-${number}-if2 |