test/vhost: add support for running more than one vhost instance

Change-Id: I9835a37fe7cdde5329e459d486bd693e7164ea17
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/398406
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Pawel Wodkowski 2018-02-01 15:32:21 +01:00 committed by Jim Harris
parent b71294ed66
commit 62a6079437
12 changed files with 112 additions and 42 deletions

View File

@ -1,5 +1,5 @@
vhost_reactor_mask=0x1
vhost_master_core=0
vhost_0_reactor_mask=0x1
vhost_0_master_core=0
VM_0_qemu_mask=0x6
VM_0_qemu_numa_node=0

View File

@ -83,46 +83,99 @@ else
set +x
fi
function get_vhost_dir()
{
if [[ ! -z "$1" ]]; then
assert_number "$1"
local vhost_num=$1
else
local vhost_num=0
fi
echo "$SPDK_VHOST_SCSI_TEST_DIR${vhost_num}"
}
function spdk_vhost_list_all()
{
shopt -s nullglob
local vhost_list="$(echo $SPDK_VHOST_SCSI_TEST_DIR[0-9]*)"
shopt -u nullglob
if [[ ! -z "$vhost_list" ]]; then
vhost_list="$(basename --multiple $vhost_list)"
echo "${vhost_list//vhost/}"
fi
}
function spdk_vhost_run()
{
local vhost_conf_path="$1"
local param
local vhost_num=0
local vhost_conf_path=""
for param in "$@"; do
case $param in
--vhost-num=*)
vhost_num="${param#*=}"
assert_number "$vhost_num"
;;
--conf-path=*) local vhost_conf_path="${param#*=}" ;;
*)
error "Invalid parameter '$param'"
return 1
;;
esac
done
local vhost_dir="$(get_vhost_dir $vhost_num)"
if [[ -z "$vhost_conf_path" ]]; then
error "Missing mandatory parameter '--conf-path'"
return 1
fi
local vhost_app="$SPDK_BUILD_DIR/app/vhost/vhost"
local vhost_log_file="$SPDK_VHOST_SCSI_TEST_DIR/vhost.log"
local vhost_pid_file="$SPDK_VHOST_SCSI_TEST_DIR/vhost.pid"
local vhost_socket="$SPDK_VHOST_SCSI_TEST_DIR/usvhost"
local vhost_log_file="$vhost_dir/vhost.log"
local vhost_pid_file="$vhost_dir/vhost.pid"
local vhost_socket="$vhost_dir/usvhost"
local vhost_conf_template="$vhost_conf_path/vhost.conf.in"
local vhost_conf_file="$vhost_conf_path/vhost.conf"
notice "starting vhost app in background"
[[ -r "$vhost_pid_file" ]] && spdk_vhost_kill
[[ -d $SPDK_VHOST_SCSI_TEST_DIR ]] && rm -f $SPDK_VHOST_SCSI_TEST_DIR/*
mkdir -p $SPDK_VHOST_SCSI_TEST_DIR
[[ -r "$vhost_pid_file" ]] && spdk_vhost_kill $vhost_num
[[ -d $vhost_dir ]] && rm -f $vhost_dir/*
mkdir -p $vhost_dir
if [[ ! -x $vhost_app ]]; then
error "application not found: $vhost_app"
return 1
fi
if [[ -z "$vhost_reactor_mask" ]] || [[ -z "$vhost_master_core" ]]; then
error "Parameters vhost_reactor_mask or vhost_master_core not found in autotest.config file"
local reactor_mask="vhost_${vhost_num}_reactor_mask"
reactor_mask="${!reactor_mask}"
local master_core="vhost_${vhost_num}_master_core"
master_core="${!master_core}"
if [[ -z "$reactor_mask" ]] || [[ -z "$master_core" ]]; then
error "Parameters vhost_${vhost_num}_reactor_mask or vhost_${vhost_num}_master_core not found in autotest.config file"
return 1
fi
cp $vhost_conf_template $vhost_conf_file
$SPDK_BUILD_DIR/scripts/gen_nvme.sh >> $vhost_conf_file
local cmd="$vhost_app -m $vhost_reactor_mask -p $vhost_master_core -c $vhost_conf_file"
local cmd="$vhost_app -m $reactor_mask -p $master_core -c $vhost_conf_file -r $vhost_dir/rpc.sock"
notice "Loging to: $vhost_log_file"
notice "Config file: $vhost_conf_file"
notice "Socket: $vhost_socket"
notice "Command: $cmd"
cd $SPDK_VHOST_SCSI_TEST_DIR; $cmd &
cd $vhost_dir; $cmd &
vhost_pid=$!
echo $vhost_pid > $vhost_pid_file
notice "waiting for app to run..."
waitforlisten "$vhost_pid"
waitforlisten "$vhost_pid" "$vhost_dir/rpc.sock"
notice "vhost started - pid=$vhost_pid"
rm $vhost_conf_file
@ -130,7 +183,13 @@ function spdk_vhost_run()
function spdk_vhost_kill()
{
local vhost_pid_file="$SPDK_VHOST_SCSI_TEST_DIR/vhost.pid"
local vhost_num=0
if [[ ! -z "$1" ]]; then
vhost_num=$1
assert_number "$vhost_num"
fi
local vhost_pid_file="$(get_vhost_dir $vhost_num)/vhost.pid"
if [[ ! -r $vhost_pid_file ]]; then
warning "no vhost pid file found"
@ -438,6 +497,7 @@ function vm_setup()
local force_vm=""
local guest_memory=1024
local queue_number=""
local vhost_dir="$(get_vhost_dir)"
while getopts ':-:' optchar; do
case "$optchar" in
-)
@ -453,6 +513,7 @@ function vm_setup()
queue_num=*) local queue_number=${OPTARG#*=} ;;
incoming=*) local vm_incoming="${OPTARG#*=}" ;;
migrate-to=*) local vm_migrate_to="${OPTARG#*=}" ;;
vhost-num=*) local vhost_dir="$(get_vhost_dir ${OPTARG#*=})" ;;
*)
error "unknown argument $OPTARG"
return 1
@ -627,13 +688,13 @@ function vm_setup()
cmd+="-drive if=none,id=hd$i,file=$raw_disk,format=raw$raw_cache ${eol}"
;;
spdk_vhost_scsi)
notice "using socket $SPDK_VHOST_SCSI_TEST_DIR/naa.$disk.$vm_num"
cmd+="-chardev socket,id=char_$disk,path=$SPDK_VHOST_SCSI_TEST_DIR/naa.$disk.$vm_num ${eol}"
notice "using socket $vhost_dir/naa.$disk.$vm_num"
cmd+="-chardev socket,id=char_$disk,path=$vhost_dir/naa.$disk.$vm_num ${eol}"
cmd+="-device vhost-user-scsi-pci,id=scsi_$disk,num_queues=$queue_number,chardev=char_$disk ${eol}"
;;
spdk_vhost_blk)
notice "using socket $SPDK_VHOST_SCSI_TEST_DIR/naa.$disk.$vm_num"
cmd+="-chardev socket,id=char_$disk,path=$SPDK_VHOST_SCSI_TEST_DIR/naa.$disk.$vm_num ${eol}"
notice "using socket $vhost_dir/naa.$disk.$vm_num"
cmd+="-chardev socket,id=char_$disk,path=$vhost_dir/naa.$disk.$vm_num ${eol}"
cmd+="-device vhost-user-blk-pci,num-queues=$queue_number,chardev=char_$disk ${eol}"
;;
kernel_vhost)
@ -960,12 +1021,17 @@ function run_fio()
#
function at_app_exit()
{
local vhost_num
notice "APP EXITING"
notice "killing all VMs"
vm_kill_all
# Kill vhost application
notice "killing vhost app"
spdk_vhost_kill
for vhost_num in $(spdk_vhost_list_all); do
spdk_vhost_kill $vhost_num
done
notice "EXIT DONE"
}

View File

@ -4,6 +4,8 @@ BASE_DIR=$(readlink -f $(dirname $0))
[[ -z "$COMMON_DIR" ]] && COMMON_DIR="$(cd $BASE_DIR/../common && pwd)"
[[ -z "$TEST_DIR" ]] && TEST_DIR="$(cd $BASE_DIR/../../../../ && pwd)"
vhost_num=""
function usage()
{
[[ ! -z $2 ]] && ( echo "$2"; echo ""; )
@ -15,6 +17,7 @@ function usage()
echo " --gdbserver Run app under gdb-server"
echo " --work-dir=PATH Where to find source/project. [default=$TEST_DIR]"
echo " --conf-dir=PATH Path to directory with configuration for vhost"
echo " --vhost-num=NUM Optional: vhost instance NUM to start. Default: 0"
exit 0
}
@ -30,6 +33,7 @@ while getopts 'xh-:' optchar; do
;;
work-dir=*) TEST_DIR="${OPTARG#*=}" ;;
conf-dir=*) CONF_DIR="${OPTARG#*=}" ;;
vhost-num=*) vhost_num="${OPTARG}" ;;
*) usage $0 echo "Invalid argument '$OPTARG'" ;;
esac
;;
@ -49,4 +53,4 @@ notice ""
. $COMMON_DIR/common.sh
# Starting vhost with valid options
spdk_vhost_run $CONF_DIR
spdk_vhost_run $vhost_num --conf-path=$CONF_DIR

View File

@ -33,6 +33,7 @@ function usage()
echo " orginal - use file directly. Will modify the provided file"
echo " --incoming=VM_NUM Use VM_NUM as source migration VM."
echo " --migrate-to=VM_NUM Use VM_NUM as target migration VM."
echo " --vhost-num=NUM Optional: vhost instance NUM to be used by this VM. Default: 0"
echo "-x Turn on script debug (set -x)"
echo "-v Be more verbose"
exit 0

View File

@ -82,7 +82,7 @@ if [[ $test_type =~ "spdk_vhost" ]]; then
notice ""
notice "running SPDK"
notice ""
spdk_vhost_run $BASE_DIR
spdk_vhost_run --conf-path=$BASE_DIR
notice ""
fi
@ -91,7 +91,7 @@ notice ""
notice "Setting up VM"
notice ""
rpc_py="python $SPDK_BUILD_DIR/scripts/rpc.py "
rpc_py="python $SPDK_BUILD_DIR/scripts/rpc.py -s $(get_vhost_dir)/rpc.sock"
for vm_conf in ${vms[@]}; do
IFS=',' read -ra conf <<< "$vm_conf"

View File

@ -63,7 +63,7 @@ tmp_attach_job=$BASE_DIR/fio_jobs/fio_attach.job.tmp
tmp_detach_job=$BASE_DIR/fio_jobs/fio_detach.job.tmp
. $BASE_DIR/../common/common.sh
rpc_py="python $SPDK_BUILD_DIR/scripts/rpc.py "
rpc_py="python $SPDK_BUILD_DIR/scripts/rpc.py -s $(get_vhost_dir)/rpc.sock"
function print_test_fio_header() {
notice "==============="
@ -81,7 +81,7 @@ function run_vhost() {
notice ""
notice "running SPDK"
notice ""
spdk_vhost_run $BASE_DIR
spdk_vhost_run --conf-path=$BASE_DIR
notice ""
}

View File

@ -5,13 +5,6 @@ BASE_DIR=$(readlink -f $(dirname $0))
[[ -z "$COMMON_DIR" ]] && COMMON_DIR="$(cd $BASE_DIR/../common && pwd)"
ROOT_DIR=$(readlink -f $BASE_DIR/../../..)
PLUGIN_DIR=$ROOT_DIR/examples/bdev/fio_plugin
RPC_PY="$ROOT_DIR/scripts/rpc.py"
FIO_BIN="/usr/src/fio/fio"
virtio_bdevs=""
virtio_with_unmap=""
os_image="/home/sys_sgsw/vhost_vm_image.qcow2"
function usage()
{
[[ ! -z $2 ]] && ( echo "$2"; echo ""; )
@ -38,6 +31,12 @@ while getopts 'h-:' optchar; do
done
source $COMMON_DIR/common.sh
PLUGIN_DIR=$ROOT_DIR/examples/bdev/fio_plugin
RPC_PY="$ROOT_DIR/scripts/rpc.py -s $(get_vhost_dir)/rpc.sock"
FIO_BIN="/usr/src/fio/fio"
virtio_bdevs=""
virtio_with_unmap=""
os_image="/home/sys_sgsw/vhost_vm_image.qcow2"
if [ ! -x $FIO_BIN ]; then
error "Invalid path of fio binary"
@ -85,7 +84,7 @@ function create_bdev_config()
}
timing_enter spdk_vhost_run
spdk_vhost_run $BASE_DIR
spdk_vhost_run --conf-path=$BASE_DIR
timing_exit spdk_vhost_run
timing_enter create_bdev_config

View File

@ -9,7 +9,7 @@ rootdir=$(readlink -f $basedir/../../..)
testdir=$(readlink -f $rootdir/..)
MAKE="make -j$(( $(nproc) * 2 ))"
rpc_py="python $rootdir/scripts/rpc.py "
rpc_py="python $rootdir/scripts/rpc.py -s $(get_vhost_dir)/rpc.sock"
HOST_IP=192.200.200.1
VM_IP=192.200.200.254
VM_UNAME="root"

View File

@ -1,5 +1,5 @@
vhost_reactor_mask=0xfffffffff
vhost_master_core=0
vhost_0_reactor_mask=0xfffffffff
vhost_0_master_core=0
VM_0_qemu_mask=0x2
VM_0_qemu_numa_node=0

View File

@ -9,7 +9,7 @@ BASE_DIR=$(readlink -f $(dirname $0))
[[ -z "$COMMON_DIR" ]] && COMMON_DIR="$(cd $BASE_DIR/../common && pwd)"
. $COMMON_DIR/common.sh
rpc_py="python $SPDK_BUILD_DIR/scripts/rpc.py "
rpc_py="python $SPDK_BUILD_DIR/scripts/rpc.py -s $(get_vhost_dir)/rpc.sock"
vm_count=1
max_disks=""
@ -121,7 +121,7 @@ trap 'error_exit "${FUNCNAME}" "${LINENO}"' SIGTERM SIGABRT ERR
vm_kill_all
notice "running SPDK vhost"
spdk_vhost_run $BASE_DIR
spdk_vhost_run --conf-path=$BASE_DIR
notice "..."
trap 'clean_lvol_cfg; error_exit "${FUNCNAME}" "${LINENO}"' SIGTERM SIGABRT ERR

View File

@ -103,7 +103,7 @@ function vm_migrate()
# FIXME: this shoul'd not be needed
vm_kill_all
rpc="python $SPDK_BUILD_DIR/scripts/rpc.py "
rpc="python $SPDK_BUILD_DIR/scripts/rpc.py -s $(get_vhost_dir)/rpc.sock"
# Use 2 VMs:
# incoming VM - the one we want to migrate
@ -116,7 +116,7 @@ target_vm_ctrlr=naa.Malloc0.$target_vm
vm_setup --os="$os_image" --force=$incoming_vm --disk-type=spdk_vhost_scsi --disks=Malloc0 --migrate-to=$target_vm
vm_setup --force=$target_vm --disk-type=spdk_vhost_scsi --disks=Malloc0 --incoming=$incoming_vm
spdk_vhost_run $BASE_DIR
spdk_vhost_run --conf-path=$BASE_DIR
notice "==============="
notice ""

View File

@ -5,7 +5,7 @@ BASE_DIR=$(readlink -f $(dirname $0))
[[ -z "$TEST_DIR" ]] && TEST_DIR="$(cd $BASE_DIR/../../../../ && pwd)"
[[ -z "$COMMON_DIR" ]] && COMMON_DIR="$(cd $BASE_DIR/../common && pwd)"
rpc_py="$BASE_DIR/../../../scripts/rpc.py "
rpc_py="$BASE_DIR/../../../scripts/rpc.py -s $(get_vhost_dir)/rpc.sock"
vm_img=""
disk="Nvme0n1"
@ -120,7 +120,7 @@ function blk_ro_tc1()
vm_shutdown_all
}
spdk_vhost_run $BASE_DIR
spdk_vhost_run --conf-path=$BASE_DIR
if [[ -z $x ]]; then
set +x
fi