From 75f93c362f8cde64b02e243d26bf9061f48adc34 Mon Sep 17 00:00:00 2001 From: shravani Date: Fri, 9 Dec 2016 17:57:27 +0530 Subject: This patch includes scripts to create multiple yaml file for different environments and run cyclictest. Also contains updated interface scripts to trigger packetforwarding and cyclictest stress scripts. Change-Id: Ibb8694746f8b19d605e50ea07c2be8b2bd141ec0 Co-Authored-By: Y Rajitha Co-Authored-By: Gundarapu Kalyan Reddy Signed-off-by: Shravani --- ci/cyclicTestTrigger.sh | 44 ++++++++-- ci/envs/cyclictest.sh | 3 +- ci/envs/host-setup1.sh | 11 ++- ci/test_kvmfornfv.sh | 106 +++++++++++++++++------ tests/cyclictest-node-context.yaml | 51 ----------- tests/kvmfornfv_cyclictest_hostenv_guestenv.yaml | 51 +++++++++++ tests/kvmfornfv_cyclictest_idle_idle.yaml | 51 ----------- 7 files changed, 178 insertions(+), 139 deletions(-) delete mode 100644 tests/cyclictest-node-context.yaml create mode 100644 tests/kvmfornfv_cyclictest_hostenv_guestenv.yaml delete mode 100644 tests/kvmfornfv_cyclictest_idle_idle.yaml diff --git a/ci/cyclicTestTrigger.sh b/ci/cyclicTestTrigger.sh index 6241452a2..ec0477fde 100755 --- a/ci/cyclicTestTrigger.sh +++ b/ci/cyclicTestTrigger.sh @@ -10,6 +10,7 @@ HOST_IP=$1 testTime=$2 testType=$3 +testName=$4 source $WORKSPACE/ci/envs/utils.sh KERNELRPM_VERSION=$( getKernelVersion ) @@ -33,13 +34,42 @@ function verifyGuestImage { function updateYaml { cd $WORKSPACE/tests/ sed -ri "s/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/${HOST_IP}/" pod.yaml - sed -ri "s/loops: [0-9]*/loops: ${testTime}/" kvmfornfv_cyclictest_idle_idle.yaml - sed -ri "0,/interval: [0-9]*/s//interval: 1000/" kvmfornfv_cyclictest_idle_idle.yaml + sed -ri "s/loops: [0-9]*/loops: ${testTime}/" kvmfornfv_cyclictest_hostenv_guestenv.yaml + sed -ri "0,/interval: [0-9]*/s//interval: 1000/" kvmfornfv_cyclictest_hostenv_guestenv.yaml + sed -ri "s/tc: \"kvmfornfv_cyclictest-node-context\"/tc: \"kvmfornfv_cyclictest_${testName}\"/" kvmfornfv_cyclictest_hostenv_guestenv.yaml + cp kvmfornfv_cyclictest_hostenv_guestenv.yaml kvmfornfv_cyclictest_${testName}.yaml + case $testName in + + idle_idle) + ;; + cpustress_idle) + sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh cpu\"' kvmfornfv_cyclictest_${testName}.yaml + ;; + memorystress_idle) + sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml + ;; + iostress_idle) + sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh io\"' kvmfornfv_cyclictest_${testName}.yaml + ;; + idle_cpustress) + sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh cpu\"' kvmfornfv_cyclictest_${testName}.yaml + ;; + idle_memorystress) + sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml + ;; + idle_iostress) + sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml + ;; + *) + echo "Incorrect test environment: $testName" + exit 1 + ;; + esac } #cleaning the environment after executing the test through yardstick. function env_clean { - container_id=`sudo docker ps -a | grep kvmfornfv_${testType} |awk '{print \$1}'|sed -e 's/\r//g'` + container_id=`sudo docker ps -a | grep kvmfornfv_${testType}_${testName} |awk '{print \$1}'|sed -e 's/\r//g'` sudo docker stop ${container_id} sudo docker rm ${container_id} sudo ssh root@${HOST_IP} "rm -rf /root/workspace/*" @@ -81,14 +111,14 @@ function runCyclicTest { mkdir -p $volume/{image,rpm,scripts} #copying required files to run yardstick cyclic testcase - mv $WORKSPACE/build_output/kernel-${KERNELRPM_VERSION}*.rpm ${volume}/rpm + cp $WORKSPACE/build_output/kernel-${KERNELRPM_VERSION}*.rpm ${volume}/rpm cp -r $WORKSPACE/ci/envs/* ${volume}/scripts - cp -r $WORKSPACE/tests/kvmfornfv_cyclictest_idle_idle.yaml ${volume} + cp -r $WORKSPACE/tests/kvmfornfv_cyclictest_${testName}.yaml ${volume} cp -r $WORKSPACE/tests/pod.yaml ${volume}/scripts #Launching ubuntu docker container to run yardstick - sudo docker run -i -v ${volume}:/opt --net=host --name kvmfornfv_${testType} \ - kvmfornfv:latest /bin/bash -c "cd /opt/scripts && ls; ./cyclictest.sh $testType" + sudo docker run -i -v ${volume}:/opt --net=host --name kvmfornfv_${testType}_${testName} \ + kvmfornfv:latest /bin/bash -c "cd /opt/scripts && ls; ./cyclictest.sh $testType $testName" cyclictest_output=$? #Verifying the results of cyclictest diff --git a/ci/envs/cyclictest.sh b/ci/envs/cyclictest.sh index 805f9088f..920a46b93 100755 --- a/ci/envs/cyclictest.sh +++ b/ci/envs/cyclictest.sh @@ -7,9 +7,10 @@ source utils.sh testType=$1 #daily/verify/merge +testName=$2 #idle_idle/stress_idle HOST_IP=$( getHostIP ) pod_config='/opt/scripts/pod.yaml' -cyclictest_context_file='/opt/kvmfornfv_cyclictest_idle_idle.yaml' +cyclictest_context_file='/opt/kvmfornfv_cyclictest_'${testName}'.yaml' if [ ! -f ${pod_config} ] ; then echo "file ${pod_config} not found" diff --git a/ci/envs/host-setup1.sh b/ci/envs/host-setup1.sh index 3d2de6ddf..e2c028a7a 100755 --- a/ci/envs/host-setup1.sh +++ b/ci/envs/host-setup1.sh @@ -39,16 +39,19 @@ echo 0 > /proc/sys/kernel/watchdog echo 0 > /proc/sys/kernel/nmi_watchdog # Change RT priority of ksoftirqd and rcuc kernel threads on isolated CPUs +startVal=$(echo ${host_isolcpus} | cut -f1 -d-) +endVal=$(echo ${host_isolcpus} | cut -f2 -d-) i=0 -for c in `echo $host_isolcpus | sed 's/,/ /g'` ; do - tid=`pgrep -a ksoftirq | grep "ksoftirqd/${c}$" | cut -d ' ' -f 1` +while [ ${startVal} -lt ${endVal} ]; do + tid=`pgrep -a ksoftirq | grep "ksoftirqd/${startVal}$" | cut -d ' ' -f 1` chrt -fp 2 ${tid} - tid=`pgrep -a rcuc | grep "rcuc/${c}$" | cut -d ' ' -f 1` + tid=`pgrep -a rcuc | grep "rcuc/${startVal}$" | cut -d ' ' -f 1` chrt -fp 3 ${tid} - cpu[$i]=${c} + cpu[$i]=${startVal} i=`expr $i + 1` + startVal=`expr $startVal + 1` done # Change RT priority of rcub kernel threads diff --git a/ci/test_kvmfornfv.sh b/ci/test_kvmfornfv.sh index e9f520059..f33cb9825 100755 --- a/ci/test_kvmfornfv.sh +++ b/ci/test_kvmfornfv.sh @@ -4,42 +4,98 @@ ## This script is an interface to trigger the ## cyclicTestTrigger.sh for test type like patch verification, ## daily testing. -## Releng will trigger this script by passing test type like -## verify/daily as an argument +## Releng will trigger this script by passing test type as +## verify/daily and test name as idle_idle/stress_idle/ +## packet_forward as arguments. +## Verify Job runs idle_idle,packet_forward test +## daily job runs base on the test name parameter ############################################################ test_type=$1 +test_name=$2 +cyclictest_env_verify=("idle_idle" "cpustress_idle" "memorystress_idle" "iostress_idle") #cyclictest environment +cyclictest_env_daily=("idle_idle" "cpustress_idle" "memorystress_idle" "iostress_idle") +cyclictest_result=0 #exit code of cyclictest +packetforward_result=0 #exit code of packet forward +function packetForward { +# source $WORKSPACE/ci/packet_forward_test.sh $HOST_IP + echo "Packetforwarding need to be implemented" + packetforward_result=$? + if [ ${packetforward_result} -ne 0 ];then + echo "Packet Forwarding test case execution FAILED" + else + echo "Packet Forwarding test case executed SUCCESSFULLY" + fi + host_clean +} + +function cyclictest { + test_case=$1 + source $WORKSPACE/ci/cyclicTestTrigger.sh $HOST_IP $test_time $test_type $test_case + #calculating and verifying sha512sum of the guestimage. + if ! verifyGuestImage;then + exit 1 + fi + #Update kvmfornfv_cyclictest_${testName}.yaml with test_time and pod.yaml with IP + updateYaml + #Cleaning up the test environment before running cyclictest through yardstick. + env_clean + #Creating a docker image with yardstick installed and launching ubuntu docker to run yardstick cyclic testcase + if runCyclicTest;then + cyclictest_result=`expr ${cyclictest_result} + 0` + else + echo "Test case execution FAILED for ${test_case} environment" + cyclictest_result=`expr ${cyclictest_result} + 1` + fi +} + +#Execution of testcases based on test type and test name from releng. if [ ${test_type} == "verify" ];then HOST_IP="10.2.117.23" - test_time=600000 # 10m + test_time=120000 # 2m + for env in ${cyclictest_env_verify[@]} + do + #Executing cyclictest through yardstick. + cyclictest ${env} + sleep 10 + done + #Execution of packet forwarding test cases. + packetForward + if [ ${cyclictest_result} -ne 0 ] || [ ${packetforward_result} -ne 0 ];then + echo "Test case FAILED" + exit 1 + else + exit 0 + fi elif [ ${test_type} == "daily" ];then HOST_IP="10.2.117.25" - test_time=7200000 #2h + test_time=3600000 #1h + if [ ${test_name} == "packet_forward" ];then + packetForward + if [ ${packetforward_result} -ne 0 ] ; then + exit 1 + else + exit 0 + fi + elif [ ${test_name} == "cyclictest" ];then + for env in ${cyclictest_env_daily[@]} + do + #Executing cyclictest through yardstick. + cyclictest ${env} + sleep 5 + done + if [ ${cyclictest_result} -ne 0 ] ; then + echo "Cyclictest case execution FAILED" + exit 1 + else + echo "Cyclictest case executed SUCCESSFULLY" + exit 0 + fi + fi elif [ ${test_type} == "merge" ];then echo "Test is not enabled for ${test_type}" exit 0 else echo "Incorrect test type ${test_type}" - exit 1 -fi - -source $WORKSPACE/ci/cyclicTestTrigger.sh $HOST_IP $test_time $test_type - -#calculating and verifying sha512sum of the guestimage. -if ! verifyGuestImage;then - exit 1 -fi - -#Update kvmfornfv_cyclictest_idle_idle.yaml with test_time and pod.yaml with IP -updateYaml - -#Cleaning up the test environment before running cyclictest through yardstick. -env_clean - -#Creating a docker image with yardstick installed and launching ubuntu docker to run yardstick cyclic testcase -if runCyclicTest;then - exit 0 -else - exit 1 fi diff --git a/tests/cyclictest-node-context.yaml b/tests/cyclictest-node-context.yaml deleted file mode 100644 index f3c84c856..000000000 --- a/tests/cyclictest-node-context.yaml +++ /dev/null @@ -1,51 +0,0 @@ ---- -# Sample benchmark task config file -# Measure system high resolution by using Cyclictest -# -# For this sample just like running the command below on the test vm and -# getting latencies info back to the yardstick. -# -# sudo bash cyclictest -a 1 -i 1000 -p 99 -l 1000 -t 1 -h 90 -m -n -q -# - -schema: "yardstick:task:0.1" - -scenarios: -- - type: Cyclictest - options: - affinity: 1 - interval: 1000 - priority: 99 - loops: 600000 - threads: 1 - histogram: 90 - host: kvm.LF - runner: - type: Duration - duration: 1 - interval: 1 - tc: "kvmfornfv_cyclictest-node-context" - sla: - max_min_latency: 50 - max_avg_latency: 100 - max_max_latency: 1000 - action: monitor - setup_options: - rpm_dir: "/opt/rpm" - script_dir: "/opt/scripts" - image_dir: "/opt/image" - host_setup_seqs: - - "host-setup0.sh" - - "reboot" - - "host-setup1.sh" - - "host-run-qemu.sh" - guest_setup_seqs: - - "guest-setup0.sh" - - "reboot" - - "guest-setup1.sh" - -context: - type: Node - name: LF - file: /opt/scripts/pod.yaml diff --git a/tests/kvmfornfv_cyclictest_hostenv_guestenv.yaml b/tests/kvmfornfv_cyclictest_hostenv_guestenv.yaml new file mode 100644 index 000000000..f3c84c856 --- /dev/null +++ b/tests/kvmfornfv_cyclictest_hostenv_guestenv.yaml @@ -0,0 +1,51 @@ +--- +# Sample benchmark task config file +# Measure system high resolution by using Cyclictest +# +# For this sample just like running the command below on the test vm and +# getting latencies info back to the yardstick. +# +# sudo bash cyclictest -a 1 -i 1000 -p 99 -l 1000 -t 1 -h 90 -m -n -q +# + +schema: "yardstick:task:0.1" + +scenarios: +- + type: Cyclictest + options: + affinity: 1 + interval: 1000 + priority: 99 + loops: 600000 + threads: 1 + histogram: 90 + host: kvm.LF + runner: + type: Duration + duration: 1 + interval: 1 + tc: "kvmfornfv_cyclictest-node-context" + sla: + max_min_latency: 50 + max_avg_latency: 100 + max_max_latency: 1000 + action: monitor + setup_options: + rpm_dir: "/opt/rpm" + script_dir: "/opt/scripts" + image_dir: "/opt/image" + host_setup_seqs: + - "host-setup0.sh" + - "reboot" + - "host-setup1.sh" + - "host-run-qemu.sh" + guest_setup_seqs: + - "guest-setup0.sh" + - "reboot" + - "guest-setup1.sh" + +context: + type: Node + name: LF + file: /opt/scripts/pod.yaml diff --git a/tests/kvmfornfv_cyclictest_idle_idle.yaml b/tests/kvmfornfv_cyclictest_idle_idle.yaml deleted file mode 100644 index f3c84c856..000000000 --- a/tests/kvmfornfv_cyclictest_idle_idle.yaml +++ /dev/null @@ -1,51 +0,0 @@ ---- -# Sample benchmark task config file -# Measure system high resolution by using Cyclictest -# -# For this sample just like running the command below on the test vm and -# getting latencies info back to the yardstick. -# -# sudo bash cyclictest -a 1 -i 1000 -p 99 -l 1000 -t 1 -h 90 -m -n -q -# - -schema: "yardstick:task:0.1" - -scenarios: -- - type: Cyclictest - options: - affinity: 1 - interval: 1000 - priority: 99 - loops: 600000 - threads: 1 - histogram: 90 - host: kvm.LF - runner: - type: Duration - duration: 1 - interval: 1 - tc: "kvmfornfv_cyclictest-node-context" - sla: - max_min_latency: 50 - max_avg_latency: 100 - max_max_latency: 1000 - action: monitor - setup_options: - rpm_dir: "/opt/rpm" - script_dir: "/opt/scripts" - image_dir: "/opt/image" - host_setup_seqs: - - "host-setup0.sh" - - "reboot" - - "host-setup1.sh" - - "host-run-qemu.sh" - guest_setup_seqs: - - "guest-setup0.sh" - - "reboot" - - "guest-setup1.sh" - -context: - type: Node - name: LF - file: /opt/scripts/pod.yaml -- cgit 1.2.3-korg