Fix the tuned optimizations 30/72130/5
authorLuc Provoost <luc.provoost@intel.com>
Thu, 25 Feb 2021 17:34:11 +0000 (18:34 +0100)
committerLuc Provoost <luc.provoost@intel.com>
Mon, 15 Mar 2021 17:06:50 +0000 (17:06 +0000)
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>
VNFs/DPPD-PROX/handle_mirror.c
VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh
VNFs/DPPD-PROX/helper-scripts/rapid/config_file
VNFs/DPPD-PROX/helper-scripts/rapid/createrapid.py
VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh
VNFs/DPPD-PROX/helper-scripts/rapid/prox_ctrl.py
VNFs/DPPD-PROX/helper-scripts/rapid/rapid_defaults.py
VNFs/DPPD-PROX/helper-scripts/rapid/rapid_parser.py
VNFs/DPPD-PROX/helper-scripts/rapid/stackdeployment.py
rapidvm/dib/elements/rapid/post-install.d/60-compile-prox
rapidvm/dib/elements/rapid/post-install.d/70-os-cfg

index 53e341e..ba6e590 100644 (file)
@@ -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));
index 84e2f70..834554d 100755 (executable)
@@ -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.
 ## 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
-
index 0cd5c70..612f639 100644 (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/
index 0efea9a..2ff503a 100755 (executable)
@@ -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'
index e519925..f4d92d8 100644 (file)
 # 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"
index 7c598eb..3389bd6 100644 (file)
@@ -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\
index 530dfc9..f45b4dc 100644 (file)
@@ -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
index c1ab36a..8ff586e 100644 (file)
@@ -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 = []
index 925fd8b..6374b84 100755 (executable)
@@ -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()
index 2ae1c3c..ebb87fd 100755 (executable)
@@ -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
index 64bbad5..5171a32 100755 (executable)
@@ -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