diff options
author | Luc Provoost <luc.provoost@intel.com> | 2021-02-25 18:34:11 +0100 |
---|---|---|
committer | Luc Provoost <luc.provoost@intel.com> | 2021-03-15 17:06:50 +0000 |
commit | c8b5dd5aa379c9b8fd60a66be16351f62e5e5ebb (patch) | |
tree | 24bf27741728e7b9e2cc1b921ad523271f8f90f6 | |
parent | 296cfb0b4fd5fdc534a1c2f6104d83be21a4f62b (diff) |
Fix the tuned optimizations
tuned-adm is now run through check_prox_system_setup.sh at the first
system startup/reboot. This will result in the correct grub cmdline
parameters.
We are also coying the default rapid_rsa_key in the authorized_keys of
the rapid user, which is now the default user to run the tests.
Fixed also an issue in handle_mirror.c: using now ETYPE_IPv4.
Changed deploycentostools.sh to reflect the changes done when building
the image with disk-image-create.
Change-Id: I5933d21faef9fe02b56c01d0b96e2c143cc5476d
Signed-off-by: Luc Provoost <luc.provoost@intel.com>
11 files changed, 62 insertions, 36 deletions
diff --git a/VNFs/DPPD-PROX/handle_mirror.c b/VNFs/DPPD-PROX/handle_mirror.c index 53e341e2..ba6e590c 100644 --- a/VNFs/DPPD-PROX/handle_mirror.c +++ b/VNFs/DPPD-PROX/handle_mirror.c @@ -71,7 +71,7 @@ static int handle_mirror_bulk(struct task_base *tbase, struct rte_mbuf **mbufs, for (uint16_t j = 0; j < n_pkts; ++j) { rte_pktmbuf_refcnt_update(mbufs2[j], (task->n_dests - 1) * task->multiplier); prox_rte_ipv4_hdr *pip = (prox_rte_ipv4_hdr *) (hdr[j] + 1); - if ((task->mirror_size != 0) && (hdr[j]->ether_type == RTE_ETHER_TYPE_IPV4) && ((pip->next_proto_id == IPPROTO_UDP) || (pip->next_proto_id == IPPROTO_TCP))) { + if ((task->mirror_size != 0) && (hdr[j]->ether_type == ETYPE_IPv4) && ((pip->next_proto_id == IPPROTO_UDP) || (pip->next_proto_id == IPPROTO_TCP))) { rte_pktmbuf_pkt_len(mbufs2[j]) = task->mirror_size; rte_pktmbuf_data_len(mbufs2[j]) = task->mirror_size; pip->total_length = rte_bswap16(task->mirror_size-sizeof(prox_rte_ether_hdr)); 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 84e2f70f..834554dc 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 @@ -1,6 +1,6 @@ #!/usr/bin/env bash ## -## Copyright (c) 2010-2020 Intel Corporation +## Copyright (c) 2010-2021 Intel Corporation ## ## Licensed under the Apache License, Version 2.0 (the "License"); ## you may not use this file except in compliance with the License. @@ -14,43 +14,59 @@ ## See the License for the specific language governing permissions and ## limitations under the License. ## +## This script should run after booting: see check-prox-system-setup.service + NCPUS="$(lscpu | egrep '^CPU\(s\):' | awk '{ print $2 }')" MAXCOREID="$((NCPUS-1))" -filename="/etc/tuned/realtime-virtual-guest-variables.conf" -logfile="/opt/rapid/prox_system_setup.log" -if [ -f "$filename" ] +tuned_config="/etc/tuned/realtime-virtual-guest-variables.conf" +log_file="/opt/rapid/prox_system_setup.log" +system_ready="/opt/rapid/system_ready_for_rapid" +tuned_done="/opt/rapid/tuned_done" +after_boot_file="/opt/rapid/after_boot.sh" + +tuned_and_reboot () { + echo "Applying tuned profile">>$log_file + tuned-adm profile realtime-virtual-guest + touch "$tuned_done" + echo "Rebooting...">>$log_file + reboot + exit 0 +} + +if [ -f "$tuned_config" ] then while read -r line do case $line in isolated_cores=1-$MAXCOREID*) - echo "Isolated CPU(s) OK, no reboot: $line">>$logfile - FILE=/opt/rapid/after_boot.sh - if test -f "$FILE"; then - ("$FILE") - echo "Executing: $FILE">>$logfile + if test ! -f "$tuned_done"; then + tuned_and_reboot fi - touch /opt/rapid/system_ready_for_rapid + if test -f "$after_boot_file"; then + echo "Executing: $after_boot_file">>$log_file + ("$after_boot_file") + fi + echo "Isolated CPU(s) OK, no reboot: $line">>$log_file + ## rapid scripts will wait for the system_ready file to exist + ## Only then, they will be able to connect to the PROX instance + ## and start the testing + touch "$system_ready" 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 "Isolated CPU(s) NOK: $line">>$log_file + sed -i "/^isolated_cores=.*/c\isolated_cores=1-$MAXCOREID" $tuned_config + tuned_and_reboot ;; *) 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 + done < "$tuned_config" + echo "isolated_cores=1-$MAXCOREID" >> $tuned_config + echo "No Isolated CPU(s) defined in config, line added: isolated_cores=1-$MAXCOREID">>$log_file + tuned_and_reboot else - echo "$filename not found.">>$logfile + echo "$tuned_config not found.">>$log_file fi - diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/config_file b/VNFs/DPPD-PROX/helper-scripts/rapid/config_file index 0cd5c707..612f639f 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/config_file +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/config_file @@ -3,7 +3,7 @@ cloud_name = openstackL6 stack_name = rapid heat_template= openstack-rapid.yaml heat_param = params_rapid.yaml -keypair_name = rapid_key -user = centos +keypair_name = rapid_rsa_key +user = rapid dataplane_subnet_mask = 24 ;push_gateway = http://192.168.36.61:9091/metrics/job/ diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/createrapid.py b/VNFs/DPPD-PROX/helper-scripts/rapid/createrapid.py index 0efea9a1..2ff503ae 100755 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/createrapid.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/createrapid.py @@ -53,7 +53,7 @@ def main(): rapid_stack_params = {} RapidStackManager.parse_config(rapid_stack_params) log_file = 'CREATE{}.log'.format(rapid_stack_params['stack_name']) - RapidLog.log_init(log_file, 'DEBUG', 'INFO', '2021.01.27') + RapidLog.log_init(log_file, 'DEBUG', 'INFO', '2021.03.15') #cloud_name = 'openstackL6' #stack_name = 'rapid' #heat_template = 'openstack-rapid.yaml' diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh b/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh index e5199257..f4d92d88 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh @@ -18,15 +18,15 @@ # Directory for package build BUILD_DIR="/opt/rapid" DPDK_VERSION="20.05" -PROX_COMMIT="80dfeb5c734cc4d681f467e853a541a8a91fe1cf" +PROX_COMMIT="8442f6a8ce0962d818b7cd800150980c65983719" 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 ## As an example: 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" +export RTE_SDK="${BUILD_DIR}/dpdk" +export RTE_TARGET="build" # By default, do not update OS OS_UPDATE="n" diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/prox_ctrl.py b/VNFs/DPPD-PROX/helper-scripts/rapid/prox_ctrl.py index 7c598ebe..3389bd6c 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/prox_ctrl.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/prox_ctrl.py @@ -53,6 +53,8 @@ class prox_ctrl(object): self.test_connect() break except RuntimeWarning as ex: + RapidLog.debug("RuntimeWarning %d:\n%s" + % (ex.returncode, ex.output.strip())) attempts += 1 if attempts > 20: RapidLog.exception("Failed to connect to instance after %d\ diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_defaults.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_defaults.py index 530dfc99..f45b4dcf 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_defaults.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_defaults.py @@ -21,7 +21,7 @@ class RapidDefaults(object): Class to define the test defaults """ test_params = { - 'version' : '2021.01.27', # Please do NOT change, used for debugging + 'version' : '2021.03.15', # Please do NOT change, used for debugging 'environment_file' : 'rapid.env', #Default string for environment 'test_file' : 'tests/basicrapid.test', #Default string for test 'machine_map_file' : 'machine.map', #Default string for machine map file diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_parser.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_parser.py index c1ab36a0..8ff586ee 100644 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_parser.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_parser.py @@ -55,6 +55,12 @@ class RapidConfigParser(object): test_params['vim_type'] = config.get('Varia', 'vim') test_params['key'] = config.get('ssh', 'key') test_params['user'] = config.get('ssh', 'user') + if test_params['user'] in ['rapid']: + if test_params['key'] != 'rapid_rsa_key': + RapidLog.debug(("Key file {} for user {} overruled by key file:" + " rapid_rsa_key").format(test_params['key'], + test_params['user'])) + test_params['key'] = 'rapid_rsa_key' test_params['total_number_of_machines'] = int(config.get('rapid', 'total_number_of_machines')) tests = [] diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/stackdeployment.py b/VNFs/DPPD-PROX/helper-scripts/rapid/stackdeployment.py index 925fd8bd..6374b843 100755 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/stackdeployment.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/stackdeployment.py @@ -152,7 +152,8 @@ class StackDeployment(object): def deploy(self, stack_name, keypair_name, heat_template, heat_param): self.key_name = keypair_name - self.private_key_filename = '{}.pem'.format(keypair_name) + #self.private_key_filename = '{}.pem'.format(keypair_name) + self.private_key_filename = keypair_name if not self.IsDeployed(stack_name): if not self.IsKey(): self.create_key() diff --git a/rapidvm/dib/elements/rapid/post-install.d/60-compile-prox b/rapidvm/dib/elements/rapid/post-install.d/60-compile-prox index 2ae1c3cb..ebb87fd8 100755 --- a/rapidvm/dib/elements/rapid/post-install.d/60-compile-prox +++ b/rapidvm/dib/elements/rapid/post-install.d/60-compile-prox @@ -24,4 +24,5 @@ cp helper-scripts/rapid/check_prox_system_setup.sh ${BUILD_DIR} cp helper-scripts/rapid/check-prox-system-setup.service ${BUILD_DIR} cp helper-scripts/rapid/sharkproxlog.sh ${BUILD_DIR} cp helper-scripts/rapid/deploycentostools.sh ${BUILD_DIR} +cp helper-scripts/rapid/rapid_rsa_key.pub ${BUILD_DIR} popd > /dev/null 2>&1 diff --git a/rapidvm/dib/elements/rapid/post-install.d/70-os-cfg b/rapidvm/dib/elements/rapid/post-install.d/70-os-cfg index 64bbad5a..5171a32b 100755 --- a/rapidvm/dib/elements/rapid/post-install.d/70-os-cfg +++ b/rapidvm/dib/elements/rapid/post-install.d/70-os-cfg @@ -23,14 +23,10 @@ sh -c '(echo "vfio") > /etc/modules-load.d/vfio.conf' sh -c '(echo "vfio-pci") > /etc/modules-load.d/vfio.conf' # Enabling tuned with the realtime-virtual-guest profile pushd ${BUILD_DIR} > /dev/null 2>&1 -#wget http://linuxsoft.cern.ch/cern/centos/7/rt/x86_64/Packages/tuned-profiles-realtime-2.8.0-5.el7_4.2.noarch.rpm wget http://linuxsoft.cern.ch/cern/centos/7/rt/x86_64/Packages/tuned-profiles-realtime-2.9.0-1.el7_5.2.noarch.rpm -#wget http://linuxsoft.cern.ch/cern/centos/7/rt/x86_64/Packages/tuned-profiles-nfv-guest-2.8.0-5.el7_4.2.noarch.rpm wget http://linuxsoft.cern.ch/cern/centos/7/rt/x86_64/Packages/tuned-profiles-nfv-guest-2.9.0-1.el7_5.2.noarch.rpm # Install with --nodeps. The latest CentOS cloud images come with a tuned version higher than 2.8. These 2 packages however # do not depend on v2.8 and also work with tuned 2.9. Need to be careful in the future -#rpm -ivh ${BUILD_DIR}/tuned-profiles-realtime-2.8.0-5.el7_4.2.noarch.rpm --nodeps -#rpm -ivh ${BUILD_DIR}/tuned-profiles-nfv-guest-2.8.0-5.el7_4.2.noarch.rpm --nodeps rpm -ivh ${BUILD_DIR}/tuned-profiles-realtime-2.9.0-1.el7_5.2.noarch.rpm --nodeps rpm -ivh ${BUILD_DIR}/tuned-profiles-nfv-guest-2.9.0-1.el7_5.2.noarch.rpm --nodeps # Although we do no know how many cores the VM will have when begin deployed for real testing, we already put a number for the @@ -38,13 +34,17 @@ rpm -ivh ${BUILD_DIR}/tuned-profiles-nfv-guest-2.9.0-1.el7_5.2.noarch.rpm --node # When the VM will be instantiated, the check_kernel_params service will check for the real number of cores available to this VM # and update the realtime-virtual-guest-variables.conf accordingly. echo "isolated_cores=1-3" | tee -a /etc/tuned/realtime-virtual-guest-variables.conf -tuned-adm profile realtime-virtual-guest +# The actual tuned-adm profile is now done in check_prox_system_setup.sh and is started through +# the check-prox-system-setup.service. This will happen when the system is booting. # 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. chmod +x ${BUILD_DIR}/check_prox_system_setup.sh mv ${BUILD_DIR}/check_prox_system_setup.sh /usr/local/libexec/ mv ${BUILD_DIR}/check-prox-system-setup.service /etc/systemd/system/ +# systemctl daemon-reload, will be skipped when building image with disk-image-builder. That is OK systemctl daemon-reload systemctl enable check-prox-system-setup.service +# Add the default rapid key as an authorized key for the rapid user +cat ${BUILD_DIR}/rapid_rsa_key.pub >> /home/rapid/.ssh/authorized_keys popd > /dev/null 2>&1 |