From b3c5a6a20926dc9fca32240b89f3dea09d07aa02 Mon Sep 17 00:00:00 2001 From: Luc Provoost Date: Thu, 28 May 2020 12:57:46 +0200 Subject: IPV6 testing & minor changes and fixes IPV6 test has been added. The generator will now generate IPV6 packets using NDP to resolve MAC addresses. The hex IP addresses in the inline definition of the packets in the cfg files is now calculated by a lua function called in parameters.lua. The hard-coded path /home/centos has been replaced by ~. An error in the speed calculations has been fixed. See the RapidTest class for details. The actual number of generated flows is now reported. If the requested number of flows is not a power of 2, the lowest power of 2 that is larger than the requested number of flows will be used and reported. Change-Id: I36b8d345b4a03c2cf358c19ec353ca8ad2831293 Signed-off-by: Luc Provoost --- .../DPPD-PROX/helper-scripts/rapid/basicrapid.test | 8 ++- VNFs/DPPD-PROX/helper-scripts/rapid/centos.json | 12 ++-- .../rapid/check_prox_system_setup.sh | 59 ++++++++-------- VNFs/DPPD-PROX/helper-scripts/rapid/config_file | 2 +- .../helper-scripts/rapid/deploycentostools.sh | 31 ++++----- VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh | 2 +- VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg | 78 ++++++++++++++++++++++ VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua | 61 +++++++++++++++++ VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test | 64 ++++++++++++++++++ .../helper-scripts/rapid/l3framerate.test | 3 +- .../helper-scripts/rapid/openstack-rapid.yaml | 4 +- .../helper-scripts/rapid/params_rapid.yaml | 1 + .../rapid/rapid-openstack-server.yaml | 2 +- .../helper-scripts/rapid/rapid_flowsizetest.py | 2 +- .../rapid/rapid_generator_machine.py | 36 ++++++---- .../helper-scripts/rapid/rapid_impairtest.py | 8 +-- .../helper-scripts/rapid/rapid_machine.py | 12 ++-- VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py | 20 ++++-- .../helper-scripts/rapid/rapid_warmuptest.py | 2 +- VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg | 47 +++++++++++++ 20 files changed, 362 insertions(+), 92 deletions(-) create mode 100644 VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg create mode 100644 VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua create mode 100644 VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test create mode 100644 VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg (limited to 'VNFs/DPPD-PROX/helper-scripts') diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test b/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test index 69a5a309..25561bc4 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test @@ -49,13 +49,17 @@ test=flowsizetest # all combinations must be meeting the same threshold # The threshold is expressed in Mpps pass_threshold=0.1 -imixs=[[64], [64,800],[128]] +# Each element in the imix list will result in a separate test. Each element +# is on its turn a list of packet sizes which will be used during one test +# execution. If you only want to test 1 size, define a list with only one +# element. +imixs=[[64],[64,250,800,800]] # the number of flows in the list need to be powers of 2, max 2^30 # If not a power of 2, we will use the lowest power of 2 that is larger than # the requested number of flows. e.g. 9 will result in 16 flows flows=[64,500000] # Setting one of the following thresholds to infinity (inf) -# results in the criterion not being evaluated to rate the test as scussesful +# results in the criterion not being evaluated to rate the test as succesful drop_rate_threshold = 0.1 lat_avg_threshold = 50 lat_perc_threshold = 80 diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json b/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json index 92617b86..964de93e 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json @@ -19,28 +19,28 @@ { "type": "file", "source": "./check_prox_system_setup.sh", - "destination": "/home/centos/" + "destination": "~/" }, { "type": "file", "source": "./check-prox-system-setup.service", - "destination": "/home/centos/" + "destination": "~/" }, { "type": "file", "source": "./sharkproxlog.sh", - "destination": "/home/centos/" + "destination": "~/" }, { "type": "file", "source": "./deploycentostools.sh", - "destination": "/home/centos/" + "destination": "~/" }, { "type": "shell", "inline": [ - "chmod a+x /home/centos/deploycentostools.sh", - "/home/centos/deploycentostools.sh -u deploy" ] + "chmod a+x ~/deploycentostools.sh", + "~/deploycentostools.sh -u deploy" ] } ] } diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh b/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh index 8621d1f3..984f0255 100755 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh @@ -18,37 +18,38 @@ NCPUS="$(lscpu | egrep '^CPU\(s\):' | awk '{ print $2 }')" MAXCOREID="$((NCPUS-1))" filename="/etc/tuned/realtime-virtual-guest-variables.conf" -logfile="/home/centos/prox_system_setup.log" +#logfile="/home/centos/prox_system_setup.log" +logfile="/opt/rapid/prox_system_setup.log" if [ -f "$filename" ] then - while read -r line - do - case $line in - isolated_cores=1-$MAXCOREID*) - echo "Isolated CPU(s) OK, no reboot: $line">>$logfile - sed -i 's/PubkeyAuthentication no/PubkeyAuthentication yes/g' /etc/ssh/sshd_config - service sshd restart - modprobe uio - insmod /home/centos/dpdk/build/kmod/igb_uio.ko - exit 0 - ;; - isolated_cores=*) - echo "Isolated CPU(s) NOK, change the config and reboot: $line">>$logfile - sed -i "/^isolated_cores=.*/c\isolated_cores=1-$MAXCOREID" $filename - tuned-adm profile realtime-virtual-guest - reboot - exit 0 - ;; - *) - echo "$line" - ;; - esac - done < "$filename" - echo "isolated_cores=1-$MAXCOREID" >> $filename - echo "No Isolated CPU(s) defined in config, line added: $line">>$logfile - tuned-adm profile realtime-virtual-guest - reboot + while read -r line + do + case $line in + isolated_cores=1-$MAXCOREID*) + echo "Isolated CPU(s) OK, no reboot: $line">>$logfile + sed -i 's/PubkeyAuthentication no/PubkeyAuthentication yes/g' /etc/ssh/sshd_config + service sshd restart + modprobe uio + insmod /opt/rapid/dpdk/build/kmod/igb_uio.ko + exit 0 + ;; + isolated_cores=*) + echo "Isolated CPU(s) NOK, change the config and reboot: $line">>$logfile + sed -i "/^isolated_cores=.*/c\isolated_cores=1-$MAXCOREID" $filename + tuned-adm profile realtime-virtual-guest + reboot + exit 0 + ;; + *) + echo "$line" + ;; + esac + done < "$filename" + echo "isolated_cores=1-$MAXCOREID" >> $filename + echo "No Isolated CPU(s) defined in config, line added: $line">>$logfile + tuned-adm profile realtime-virtual-guest + reboot else - echo "$filename not found.">>$logfile + echo "$filename not found.">>$logfile fi diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/config_file b/VNFs/DPPD-PROX/helper-scripts/rapid/config_file index c412b616..e5991649 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/config_file +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/config_file @@ -1,7 +1,7 @@ [OpenStack] cloud_name = openstackL6 stack_name = rapid -heat_template = openstack-rapid.yaml +heat_template= openstack-rapid.yaml heat_param = params_rapid.yaml keypair_name = rapid_key user = centos diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh b/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh index 18b45469..f89d4fe2 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh @@ -17,20 +17,13 @@ # Directory for package build BUILD_DIR="/opt/rapid" -# Directory where the packer tool has copied some files (e.g. check_prox_system_setup.sh) -# Runtime scripts are assuming ${WORK_DIR} as the directory for PROX. Check the rundir variable in runrapid.py. Should be the same! -# This variable is defined in 4 different places and should have the same value: centos.json, deploycentostools.sh, check_prox_system_setup.sh and runrapid.py -WORK_DIR="/home/centos" DPDK_VERSION="19.05" PROX_COMMIT="b71a4cfd" PROX_CHECKOUT="git checkout ${PROX_COMMIT}" ## Next line is overruling the PROX_COMMIT and will replace the version with a very specific patch. Should be commented out ## if you want to use a committed version of PROX with the COMMIT ID specified above -##PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/75/69475/2 && git checkout FETCH_HEAD" -##Following line has the commit for testing IMIX -#PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/88/69488/3 && git checkout FETCH_HEAD" -##Following line has the commit for testing IMIX, IPV6, ... It is the merge of all PROX commits on May 12th -PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/59/69859/7 && git checkout FETCH_HEAD" +##Following line has the commit for testing IMIX, IPV6, ... It is the merge of all PROX commits on May 27th 2020 +PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/23/70223/1 && git checkout FETCH_HEAD" MULTI_BUFFER_LIB_VER="0.52" export RTE_SDK="${BUILD_DIR}/dpdk-${DPDK_VERSION}" export RTE_TARGET="x86_64-native-linuxapp-gcc" @@ -89,9 +82,9 @@ function os_cfg() # Install the check_tuned_params service to make sure that the grub cmd line has the right cpus in isolcpu. The actual number of cpu's # assigned to this VM depends on the flavor used. We don't know at this time what that will be. - ${SUDO} chmod +x ${WORK_DIR}/check_prox_system_setup.sh - ${SUDO} cp -r ${WORK_DIR}/check_prox_system_setup.sh /usr/local/libexec/ - ${SUDO} cp -r ${WORK_DIR}/check-prox-system-setup.service /etc/systemd/system/ + ${SUDO} chmod +x ${HOME}/check_prox_system_setup.sh + ${SUDO} mv ${HOME}/check_prox_system_setup.sh /usr/local/libexec/ + ${SUDO} mv ${HOME}/check-prox-system-setup.service /etc/systemd/system/ ${SUDO} systemctl daemon-reload ${SUDO} systemctl enable check-prox-system-setup.service # Following lines are added to fix the following issue: When the VM gets @@ -155,7 +148,7 @@ function dpdk_install() tar -xf ./dpdk-${DPDK_VERSION}.tar.xz popd > /dev/null 2>&1 - ${SUDO} ln -s ${RTE_SDK} ${WORK_DIR}/dpdk + ${SUDO} ln -s ${RTE_SDK} ${BUILD_DIR}/dpdk pushd ${RTE_SDK} > /dev/null 2>&1 make config T=${RTE_TARGET} @@ -184,6 +177,7 @@ function prox_compile() # Compile PROX pushd ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX make -j`getconf _NPROCESSORS_ONLN` + ${SUDO} cp ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX/build/app/prox ${HOME}/prox popd > /dev/null 2>&1 } @@ -193,10 +187,9 @@ function prox_install() pushd ${BUILD_DIR} > /dev/null 2>&1 git clone https://git.opnfv.org/samplevnf pushd ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX > /dev/null 2>&1 - ${PROX_CHECKOUT} + bash -c "${PROX_CHECKOUT}" popd > /dev/null 2>&1 prox_compile - ${SUDO} cp ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX/build/app/prox ${WORK_DIR}/prox popd > /dev/null 2>&1 } @@ -206,16 +199,16 @@ function port_info_build() pushd ${BUILD_DIR}/port_info > /dev/null 2>&1 make - ${SUDO} cp ${BUILD_DIR}/port_info/build/app/port_info ${WORK_DIR}/port_info + ${SUDO} cp ${BUILD_DIR}/port_info/build/app/port_info ${HOME}/port_info popd > /dev/null 2>&1 } function create_minimal_install() { - ldd ${WORK_DIR}/prox | awk '{ if ($(NF-1) != "=>") print $(NF-1) }' >> ${BUILD_DIR}/list_of_install_components + ldd ${HOME}/prox | awk '{ if ($(NF-1) != "=>") print $(NF-1) }' >> ${BUILD_DIR}/list_of_install_components - echo "${WORK_DIR}/prox" >> ${BUILD_DIR}/list_of_install_components - echo "${WORK_DIR}/port_info" >> ${BUILD_DIR}/list_of_install_components + echo "${HOME}/prox" >> ${BUILD_DIR}/list_of_install_components + echo "${HOME}/port_info" >> ${BUILD_DIR}/list_of_install_components tar -czvhf ${BUILD_DIR}/install_components.tgz -T ${BUILD_DIR}/list_of_install_components } diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh b/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh index ac6ccaa1..f2e3fe29 100755 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh @@ -2,7 +2,7 @@ link="$(sudo ip -o link | grep MACADDRESS |cut -d":" -f 2)" if [ -n "$link" ]; then echo Need to bind - sudo ~/dpdk/usertools/dpdk-devbind.py --force --bind igb_uio $(sudo ~/dpdk/usertools/dpdk-devbind.py --status |grep $link | cut -d" " -f 1) + sudo /opt/rapid/dpdk/usertools/dpdk-devbind.py --force --bind igb_uio $(sudo /opt/rapid/dpdk/usertools/dpdk-devbind.py --status |grep $link | cut -d" " -f 1) else echo Assuming port is already bound to DPDK fi diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg b/VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg new file mode 100644 index 00000000..8f5e399b --- /dev/null +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg @@ -0,0 +1,78 @@ +;; +;; Copyright (c) 2010-2020 Intel Corporation +;; +;; 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 +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, software +;; distributed under the License is distributed on an "AS IS" BASIS, +;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;; See the License for the specific language governing permissions and +;; limitations under the License. +;; + +[lua] +dofile("parameters.lua") + +[eal options] +-n=4 ; force number of memory channels +no-output=no ; disable DPDK debug output +eal=--proc-type auto ${eal} + +[port 0] +name=p0 +rx desc=2048 +tx desc=2048 +vlan=yes + +[variables] +$mbs=8 + +[defaults] +mempool size=8K + +[global] +name=${name} +heartbeat timeout=${heartbeat} + +[core 0] +mode=master + +[core $gencores] +name=gen +task=0 +mode=gen +sub mode=ndp +tx port=p0 +bps=1000 +pkt inline=00 00 01 00 00 01 00 00 02 00 00 02 86 dd 60 00 00 00 00 1a 11 40 ${local_hex_ip1} ${dest_hex_ip1} 13 88 13 88 00 1a 55 7b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +global ipv6=${local_ip1} +min bulk size=$mbs +max bulk size=16 +drop=yes +lat pos=62 +packet id pos=66 +signature pos=72 +signature=0x98765432 +accuracy pos=76 +pkt size=80 + + + +[core $latcores] +name=lat +task=0 +mode=lat +sub mode=ndp +rx port=p0 +lat pos=62 +accuracy pos=76 +packet id pos=66 +signature=0x98765432 +signature pos=72 +accuracy limit nsec=1000000 +latency bucket size=${bucket_size_exp} +global ipv6=${local_ip1} diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua b/VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua new file mode 100644 index 00000000..d38bb808 --- /dev/null +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua @@ -0,0 +1,61 @@ +-- +-- Copyright (c) 2010-2020 Intel Corporation +-- +-- 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 +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +function convertIPToHex(ip) + local address_chunks = {} + if type(ip) ~= "string" then + print ("IP ADDRESS ERROR: ", ip) + return "IP ADDRESS ERROR" + end + + local chunks = {ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")} + if #chunks == 4 then + for i,v in ipairs(chunks) do + if tonumber(v) > 255 then + print ("IPV4 ADDRESS ERROR: ", ip) + return "IPV4 ADDRESS ERROR" + end + address_chunks[#address_chunks + 1] = string.format ("%02x", v) + end + result = table.concat(address_chunks, " ") + print ("Hex IPV4: ", result) + return result + end + + delimiter = ":" + for match in (ip..delimiter):gmatch("(.-)"..delimiter) do + if match ~= "" then + number = tonumber(match, 16) + if number <= 65535 then + table.insert(address_chunks, string.format("%02x %02x",number/256,number % 256)) + end + else + table.insert(address_chunks, "") + end + end + for i, chunk in ipairs(address_chunks) do + if chunk =="" then + table.remove(address_chunks, i) + for j = 1,(8-#address_chunks) do + table.insert(address_chunks, i, "00 00") + end + break + end + end + result = table.concat(address_chunks, " ") + print ("Hex IPV6: ", result) + return result +end diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test b/VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test new file mode 100644 index 00000000..2dd571b5 --- /dev/null +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test @@ -0,0 +1,64 @@ +## +## Copyright (c) 2010-2019 Intel Corporation +## +## 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 +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## + +[TestParameters] +name = BasicSwapTesting +number_of_tests = 2 +total_number_of_test_machines = 2 +lat_percentile = 99 + +[TestM1] +name = Generator +config_file = genv6.cfg +dest_vm = 2 +gencores = [1] +latcores = [3] +#bucket_size_exp = 12 + +[TestM2] +name = Swap +config_file = swapv6.cfg +cores = [1,2] +#prox_socket = true +#prox_launch_exit = true + +[test1] +test=warmuptest +flowsize=512 +imix=[64] +warmupspeed=1 +warmuptime=2 + +[test2] +test=flowsizetest +# Following parameter defines the success criterium for the test. +# When this test uses multiple combinations of packet size and flows, +# all combinations must be meeting the same threshold +# The threshold is expressed in Mpps +pass_threshold=0.1 +imixs=[[64], [128]] +# the number of flows in the list need to be powers of 2, max 2^30 +# If not a power of 2, we will use the lowest power of 2 that is larger than +# the requested number of flows. e.g. 9 will result in 16 flows +flows=[64,500000] +# Setting one of the following thresholds to infinity (inf) +# results in the criterion not being evaluated to rate the test as succesful +drop_rate_threshold = 0.1 +lat_avg_threshold = 50 +lat_perc_threshold = 80 +lat_max_threshold = inf +accuracy = 1 +startspeed = 50 diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test b/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test index 5b4b914f..67a57ce7 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test @@ -42,6 +42,7 @@ warmuptime=2 test=fixed_rate imixs=[[64],[128]] # the number of flows in the list need to be powers of 2, max 2^20 -# Select from following numbers: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576 +# If not a power of 2, we will use the lowest power of 2 that is larger than +# the requested number of flows. e.g. 9 will result in 16 flows flows=[1,64] startspeed=5 diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml b/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml index 2dec7175..1c6fbee4 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml @@ -108,8 +108,8 @@ outputs: data_plane_ips: description: List of list of list of DataPlane IPs of the VMs value: - - {get_attr: [PROXVMs, data_plane_ip]} - - {get_attr: [PROX2VMs, data_plane_ip]} + - {get_attr: [PROXVMs, data_plane_ips]} + - {get_attr: [PROX2VMs, data_plane_ips]} data_plane_macs: description: List of list of list of DataPlane MACs of the VMs value: diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml b/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml index 3640905a..7c1884ee 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml @@ -1,5 +1,6 @@ parameters: public_net_name: admin_floating_net + data_net_name: dataplane-network PROX_image: rapidVM my_availability_zone: nova security_group: prox_security_group diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml index f1b52743..84311e25 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml @@ -72,7 +72,7 @@ outputs: mngmt_ip: description: Management IP of the VM value: {get_attr: [floating_ip, floating_ip_address ]} - data_plane_ip: + data_plane_ips: description: List of DataPlane IPs of the VM value: - {get_attr: [data_port, fixed_ips, 0, ip_address]} diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py index f5155a57..661554df 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py @@ -126,7 +126,7 @@ class FlowSizeTest(RapidTest): self.gen_machine.reset_stats() if self.sut_machine: self.sut_machine.reset_stats() - self.gen_machine.set_flows(flow_number) + flow_number = self.gen_machine.set_flows(flow_number) self.set_background_flows(self.background_machines, flow_number) endspeed = None speed = self.get_start_speed_and_init(size) diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py index cfd0bb11..35407535 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py @@ -37,32 +37,43 @@ class RandomPortBits(object): # and that might be an invalid UDP port and result in # packets begin discarded src_number_of_random_bits = number_of_random_bits // 2 - dst_number_of_random_bits = number_of_random_bits - src_number_of_random_bits - src_port_bitmap = '1000000000000000'.replace ('0','X',src_number_of_random_bits) - dst_port_bitmap = '1000000000000000'.replace ('0','X',dst_number_of_random_bits) - return [src_port_bitmap, dst_port_bitmap] + dst_number_of_random_bits = (number_of_random_bits - + src_number_of_random_bits) + src_port_bitmap = '1000000000000000'.replace ('0','X', + src_number_of_random_bits) + dst_port_bitmap = '1000000000000000'.replace ('0','X', + dst_number_of_random_bits) + return [src_port_bitmap, dst_port_bitmap, 1<5}'.format(flow_number)+" flow) packets ("+ '{:>5}'.format(size) +" bytes) to SUT via GW dropping and delaying packets. SUT sends packets back. Use ctrl-c to stop the test |") RapidLog.info("+--------+--------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+------------+") RapidLog.info("| Test | Speed requested | Sent to NIC | Sent by Gen | Forward by SUT | Rec. by Gen | Avg. Latency | Max. Latency | Packets Lost | Loss Ratio |") RapidLog.info("+--------+--------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+------------+") - attempts = 0 - self.gen_machine.set_udp_packet_size(imix) - self.gen_machine.set_flows(flow_number) - self.gen_machine.start_latency_cores() speed = self.test['startspeed'] self.gen_machine.set_generator_speed(speed) while True: diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py index b5b90d65..a052ba3c 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py @@ -24,11 +24,6 @@ class RapidMachine(object): """ Class to deal with rapid configuration files """ - @staticmethod - def ip2hex(ip): - ip = ip.split('.') - return(hex(int(ip[0]))[2:].zfill(2) + ' ' + hex(int(ip[1]))[2:].zfill(2) + ' ' + hex(int(ip[2]))[2:].zfill(2) + ' ' + hex(int(ip[3]))[2:].zfill(2)) - def __init__(self, key, user, vim, rundir, machine_params): self.name = machine_params['name'] self.ip = machine_params['admin_ip'] @@ -78,10 +73,11 @@ class RapidMachine(object): self.all_tasks_for_this_cfg = set(re.findall("task\s*=\s*(\d+)",PROXConfig)) self.LuaFileName = 'parameters-{}.lua'.format(self.ip) with open(self.LuaFileName, "w") as LuaFile: + LuaFile.write('require "helper"\n') LuaFile.write('name="%s"\n'% self.name) for index, dp_port in enumerate(self.dp_ports, start = 1): LuaFile.write('local_ip{}="{}"\n'.format(index, dp_port['ip'])) - LuaFile.write('local_hex_ip{}="{}"\n'.format(index, self.ip2hex(dp_port['ip']))) + LuaFile.write('local_hex_ip{}=convertIPToHex(local_ip{})\n'.format(index, index)) if vim in ['kubernetes']: LuaFile.write("eal=\"--socket-mem=512,0 --file-prefix %s --pci-whitelist %s\"\n" % (self.name, self.machine_params['dp_pci_dev'])) else: @@ -93,11 +89,11 @@ class RapidMachine(object): if 'dest_ports' in self.machine_params.keys(): for index, dest_port in enumerate(self.machine_params['dest_ports'], start = 1): LuaFile.write('dest_ip{}="{}"\n'.format(index, dest_port['ip'])) - LuaFile.write('dest_hex_ip{}="{}"\n'.format(index, self.ip2hex(dest_port['ip']))) - LuaFile.write('dest_hex_ip{}="{}"\n'.format(index, self.ip2hex(dest_port['ip']))) + LuaFile.write('dest_hex_ip{}=convertIPToHex(dest_ip{})\n'.format(index, index)) LuaFile.write('dest_hex_mac{}="{}"\n'.format(index , dest_port['mac'].replace(':',' '))) LuaFile.write(appendix) self._client.scp_put(self.LuaFileName, self.rundir + '/parameters.lua') + self._client.scp_put('helper.lua', self.rundir + '/helper.lua') def start_prox(self, autostart=''): if self.machine_params['prox_launch_exit']: diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py index 2466d89b..b39520c7 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py @@ -29,22 +29,34 @@ class RapidTest(object): @staticmethod def get_percentageof10Gbps(pps_speed,size): # speed is given in pps, returning % of 10Gb/s - return (pps_speed / 1000000.0 * 0.08 * (size+28)) + # 12 bytes is the inter packet gap + # pre-amble is 7 bytes + # SFD (start of frame delimiter) is 1 byte + # Total of 20 bytes overhead per packet + return (pps_speed / 1000000.0 * 0.08 * (size+20)) @staticmethod def get_pps(speed,size): # speed is given in % of 10Gb/s, returning Mpps - return (speed * 100.0 / (8*(size+28))) + # 12 bytes is the inter packet gap + # pre-amble is 7 bytes + # SFD (start of frame delimiter) is 1 byte + # Total of 20 bytes overhead per packet + return (speed * 100.0 / (8*(size+20))) @staticmethod def get_speed(packet_speed,size): # return speed in Gb/s - return (packet_speed / 1000.0 * (8*(size+28))) + # 12 bytes is the inter packet gap + # pre-amble is 7 bytes + # SFD (start of frame delimiter) is 1 byte + # Total of 20 bytes overhead per packet + return (packet_speed / 1000.0 * (8*(size+20))) @staticmethod def set_background_flows(background_machines, number_of_flows): for machine in background_machines: - machine.set_flows(number_of_flows) + _ = machine.set_flows(number_of_flows) @staticmethod def set_background_speed(background_machines, speed): diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py index 587ef22a..e316f6e2 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py @@ -42,7 +42,7 @@ class WarmupTest(RapidTest): self.gen_machine.set_generator_speed(WARMUPSPEED) self.gen_machine.set_udp_packet_size(imix) # gen_machine['socket'].set_value(gencores,0,56,1,1) - self.gen_machine.set_flows(FLOWSIZE) + _ = self.gen_machine.set_flows(FLOWSIZE) self.gen_machine.start() time.sleep(WARMUPTIME) self.gen_machine.stop() diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg b/VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg new file mode 100644 index 00000000..ce323e9c --- /dev/null +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg @@ -0,0 +1,47 @@ +;; +;; Copyright (c) 2010-2019 Intel Corporation +;; +;; 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 +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, software +;; distributed under the License is distributed on an "AS IS" BASIS, +;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;; See the License for the specific language governing permissions and +;; limitations under the License. +;; + +[lua] +dofile("parameters.lua") + +[eal options] +-n=4 ; force number of memory channels +no-output=no ; disable DPDK debug output +eal=--proc-type auto ${eal} + +[port 0] +name=if0 +mac=hardware +vlan=yes + +[defaults] +mempool size=8K + +[global] +name=${name} + +[core 0] +mode=master + +[core $cores] +name=swap +task=0 +mode=swap +sub mode=ndp +rx port=if0 +tx port=if0 +global ipv6=${local_ip1} +drop=no -- cgit 1.2.3-korg