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:
parent
b71294ed66
commit
62a6079437
@ -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
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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 ""
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 ""
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user