aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
authorPeter Mikus <pmikus@cisco.com>2018-03-22 13:21:05 +0100
committerJan Gelety <jgelety@cisco.com>2018-03-28 08:07:06 +0000
commitafd6aacb635a508f3ecc330dbe254b0ccf513bf1 (patch)
tree8f8f4993d071692420095856b970d92348031a7b /resources
parent3eb25826bfbd594714f78a5aab2b0c4de1550450 (diff)
Optimize Qemu installation to speed up vhost tests
Currently Qemu is being installed if there is a change of qsz parameter between tests/suites. Qemu is installed always into the same directory. This patch changes the default behavior to install qemu over and install pathced version to separate directory. It also disables force install. Change-Id: I0d7493a02b026a6ae4a5ea8bacf54656de9db567 Signed-off-by: Peter Mikus <pmikus@cisco.com>
Diffstat (limited to 'resources')
-rw-r--r--resources/libraries/bash/config/config7
-rw-r--r--resources/libraries/bash/config/defaults7
-rwxr-xr-xresources/libraries/bash/qemu_build.sh86
-rw-r--r--resources/libraries/bash/shell/qemu_utils.sh38
-rw-r--r--resources/libraries/python/QemuUtils.py4
-rw-r--r--resources/libraries/robot/performance/performance_configuration.robot227
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