diff options
author | Jiang, Yunhong <yunhong.jiang@intel.com> | 2017-08-09 05:38:24 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2017-08-09 05:38:24 +0000 |
commit | a074fc668a5b2dd02f5378895c2d36043a5603c5 (patch) | |
tree | b671e7c07df9289eb57816aed4197938b4312ec9 /ci/envs | |
parent | 2dd9dea0edaf1157e4cb914240821d22fe1ca5b0 (diff) | |
parent | 868367c47df84a70a49f7be6b5e6c3150906aa8f (diff) |
Merge "Add Livemigration testcase for KVMFORNFV"
Diffstat (limited to 'ci/envs')
-rwxr-xr-x | ci/envs/host-run-livemigration.sh | 108 | ||||
-rwxr-xr-x | ci/envs/setup_ovsdpdk.sh | 100 |
2 files changed, 208 insertions, 0 deletions
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 |