From 868367c47df84a70a49f7be6b5e6c3150906aa8f Mon Sep 17 00:00:00 2001 From: RajithaY Date: Wed, 26 Jul 2017 03:39:35 -0700 Subject: Add Livemigration testcase for KVMFORNFV This patch includes the scripts which will create OVS dpdkvhost user ports and test live migration using qemu with ovs dpdk and provide the information of VM downtime,setuptime and totaltime once migration is completed. Signed-off-by:RajithaY Change-Id: I17abf627102d88dffdb99972e5616a0ea5cb62b7 --- ci/envs/host-run-livemigration.sh | 108 ++++++++++++++++++++++++++++++++++++++ ci/envs/setup_ovsdpdk.sh | 100 +++++++++++++++++++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100755 ci/envs/host-run-livemigration.sh create mode 100755 ci/envs/setup_ovsdpdk.sh (limited to 'ci/envs') diff --git a/ci/envs/host-run-livemigration.sh b/ci/envs/host-run-livemigration.sh new file mode 100755 index 000000000..a089ad482 --- /dev/null +++ b/ci/envs/host-run-livemigration.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +############################################################################## +##Copyright (c) 2015 Intel Corp. +## +## All rights reserved. This program and the accompanying materials +## are made available under the terms of the Apache License, Version 2.0 +## which accompanies this distribution, and is available at +## http://www.apache.org/licenses/LICENSE-2.0 +############################################################################### + +source utils.sh +source host-config + +HOST_IP=$( getHostIP ) +#source qmp-sock for conmunication with qemu +qmp_sock_src="/tmp/qmp-sock-src" +#destination qmp-sock for conmunication with qemu, only for local live migration +qmp_sock_dst="/tmp/qmp-sock-dst" + +VHOSTPATH1='/usr/local/var/run/openvswitch/vhost-user1' +VHOSTPATH2='/usr/local/var/run/openvswitch/vhost-user2' + +VHOSTPATH3='/usr/local/var/run/openvswitch/vhost-user3' +VHOSTPATH4='/usr/local/var/run/openvswitch/vhost-user4' + +MACADDRESS1='52:54:00:12:34:56' +MACADDRESS2='54:54:00:12:34:56' + +#destination host ip address +incoming_ip=0 +migrate_port=4444 +max_down_time=10 + + +OVSLOGFILE='/var/log/openvswitch/ovs-vswitchd.log' + +function run_qemusrc() { + $qemu -enable-kvm -cpu host -smp ${guest_cpus} -chardev socket,id=char1,path=$VHOSTPATH1 \ + -netdev type=vhost-user,id=net1,chardev=char1,vhostforce \ + -device virtio-net-pci,netdev=net1,mac=$MACADDRESS1 \ + -chardev socket,id=char2,path=$VHOSTPATH2 \ + -netdev type=vhost-user,id=net2,chardev=char2,vhostforce \ + -device virtio-net-pci,netdev=net2,mac=$MACADDRESS2 -m 1024 -mem-path /dev/hugepages \ + -mem-prealloc -realtime mlock=on -monitor unix:${qmp_sock_src},server,nowait \ + -balloon virtio -drive file=/root/guest1.qcow2 -vnc :1 & + if [ ${?} -ne 0 ] ; then + echo "Qemu Source not started" + exit 1 + fi +} + +function run_qemulisten() { + $qemu -enable-kvm -cpu host -smp ${guest_cpus} -chardev socket,id=char1,path=$VHOSTPATH3 \ + -netdev type=vhost-user,id=net1,chardev=char1,vhostforce \ + -device virtio-net-pci,netdev=net1,mac=$MACADDRESS1 \ + -chardev socket,id=char2,path=$VHOSTPATH4 \ + -netdev type=vhost-user,id=net2,chardev=char2,vhostforce \ + -device virtio-net-pci,netdev=net2,mac=$MACADDRESS2 -m 1024 -mem-path /dev/hugepages \ + -mem-prealloc -realtime mlock=on -monitor unix:${qmp_sock_dst},server,nowait \ + -balloon virtio -drive file=/root/guest1.qcow2 -incoming tcp:${incoming_ip}:${migrate_port} -vnc :3 & + if [ ${?} -ne 0 ] ; then + echo "Qemu Standby not started" + exit 1 + fi +} + +function do_migration() { + + local src=$1 + local dst=$2 +#with no speed limit + echo "migrate_set_speed 0" |nc -U $src +#set the expected max downtime + echo "migrate_set_downtime ${max_down_time}" |nc -U $src +#start live migration + echo "migrate -d tcp:${incoming_ip}:${migrate_port}" |nc -U $src +#wait until live migration completed + status="" + while [ "${status}" == "" ] + do + status=`echo "info migrate" | nc -U $src |grep completed | cut -d: -f2` + echo ${status} + sleep 1; + done +#get the related data + status=`echo "info migrate" | nc -U $src |grep completed | cut -d: -f2` + total_time=`echo "info migrate" | nc -U $src |grep "total time" | cut -d: -f2` + down_time=`echo "info migrate" | nc -U $src |grep "downtime" | cut -d: -f2` + +#print detail information + echo "info migrate" | nc -U $src + echo "quit" | nc -U $src + echo "quit" | nc -U $dst + sleep 5 + echo "Migration executed successfully" +} +echo "Running Qemu Source" +run_qemusrc +sleep 60 +echo "Running Qemu listen" +run_qemulisten +sleep 60 +do_migration $qmp_sock_src $qmp_sock_dst +if [ ${?} -ne 0 ] ; then + echo "Migration Failed" + exit 1 +fi diff --git a/ci/envs/setup_ovsdpdk.sh b/ci/envs/setup_ovsdpdk.sh new file mode 100755 index 000000000..bd26dfbf6 --- /dev/null +++ b/ci/envs/setup_ovsdpdk.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +############################################################################# +#Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +source host-config +OVSLOGFILE="/usr/local/var/run/openvswitch/ovs-vswitchd.log" +HOME='/home/jenkins' +VSPERF="${HOME}/vswitchperf" + +function install_ovsdpdk() { + #Installing ovs dpdk using vsperf environment + echo "Installing ovs dpdk using vsperf environment" + install_vsperf + setup_ovsdpdk +} +function install_vsperf() { + echo "Installing vsperf....." + ( cd $VSPERF/systems ; ./build_base_machine.sh ) + if [ ${?} -ne 0 ]; then + echo "Execution of build_base_machine.sh failed" + exit 1 + fi +} +function setup_ovsdpdk() { + sudo mkdir -p /usr/local/var/run/openvswitch + sudo mkdir -p /usr/local/etc/openvswitch + sudo modprobe openvswitch + + #Kill the ovsswitch and ovsdbserver + cd $VSPERF/src/ovs/ovs + ps aux | grep 'ovsdb-server.pid' | awk '{print $2}' | head -1 | xargs kill -SIGTERM + ps aux | grep 'ovs-vswitchd.pid' | awk '{print $2}' | head -1 | xargs kill -SIGTERM + kill -SIGTERM 39424 + + rm -f /usr/local/var/run/openvswitch/vhost-user* + rm -f /usr/local/etc/openvswitch/conf.db + + #Start database server + echo "Start ovs database server" + export DB_SOCK=/usr/local/var/run/openvswitch/db.sock + cd $VSPERF/src/ovs/ovs/ovsdb + sudo ./ovsdb-tool create /usr/local/etc/openvswitch/conf.db $VSPERF/src/ovs/ovs/vswitchd/vswitch.ovsschema + if [ ${?} -ne 0 ] ; then + echo "Creation of db and schema files failed" + exit 1 + fi + sudo ./ovsdb-server --remote=punix:$DB_SOCK --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach + if [ ${?} -ne 0 ] ; then + echo "Starting of DB server failed" + exit 1 + fi + #Start OVS + echo "Start OVS" + cd $VSPERF/src/ovs/ovs/utilities + sudo ./ovs-vsctl --no-wait init + sudo ./ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0xf + sudo ./ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=1024 + sudo ./ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true + + echo "Setting Huge pages on Node0" + node0_pages=10 + node0_dir="/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages" + node0_pages+=`cat $node0_dir` + echo ${node0_pages} > ${node0_dir} + + echo "Setting Huge pages on Node1" + node1_pages=10 + node1_dir="/sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages" + node1_pages+=`cat $node1_dir` + echo ${node1_pages} > ${node1_dir} + + free_hp0=`cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/free_hugepages` + free_hp1=`cat /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/free_hugepages` + echo "Free Hugepages:${free_hp0}" + echo "Free_Hugepages:${free_hp1}" + + cd $VSPERF/src/ovs/ovs/vswitchd + sudo ./ovs-vswitchd unix:$DB_SOCK --pidfile --detach --log-file=$OVSLOGFILE + if [ ${?} -ne 0 ] ; then + echo "ovs-vswitchd not started" + exit 1 + fi + sleep 180 + #Configure the bridge + echo "configure OVS Bridge" + cd $VSPERF/src/ovs/ovs/utilities + sudo ./ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev + sudo ./ovs-vsctl add-port ovsbr0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser + sudo ./ovs-vsctl add-port ovsbr0 vhost-user2 -- set Interface vhost-user2 type=dpdkvhostuser + sudo ./ovs-vsctl add-port ovsbr0 vhost-user3 -- set Interface vhost-user3 type=dpdkvhostuser + sudo ./ovs-vsctl add-port ovsbr0 vhost-user4 -- set Interface vhost-user4 type=dpdkvhostuser +} +install_ovsdpdk -- cgit 1.2.3-korg