diff --git a/test/vhost/common/autotest.config b/test/vhost/common/autotest.config index fa8d19a5a..87500afd5 100644 --- a/test/vhost/common/autotest.config +++ b/test/vhost/common/autotest.config @@ -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 diff --git a/test/vhost/common/common.sh b/test/vhost/common/common.sh index 1f3751947..9e66e2a12 100644 --- a/test/vhost/common/common.sh +++ b/test/vhost/common/common.sh @@ -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" } diff --git a/test/vhost/common/run_vhost.sh b/test/vhost/common/run_vhost.sh index b20ef5bb4..ea3425e85 100755 --- a/test/vhost/common/run_vhost.sh +++ b/test/vhost/common/run_vhost.sh @@ -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 diff --git a/test/vhost/common/vm_setup.sh b/test/vhost/common/vm_setup.sh index ec3740c13..04925da22 100755 --- a/test/vhost/common/vm_setup.sh +++ b/test/vhost/common/vm_setup.sh @@ -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 diff --git a/test/vhost/fiotest/autotest.sh b/test/vhost/fiotest/autotest.sh index 51fd18f4c..7bff0103b 100755 --- a/test/vhost/fiotest/autotest.sh +++ b/test/vhost/fiotest/autotest.sh @@ -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" diff --git a/test/vhost/hotplug/common.sh b/test/vhost/hotplug/common.sh index 9f324d025..70cfab276 100644 --- a/test/vhost/hotplug/common.sh +++ b/test/vhost/hotplug/common.sh @@ -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 "" } diff --git a/test/vhost/initiator/blockdev.sh b/test/vhost/initiator/blockdev.sh index 4e2c50bf7..f773ed937 100755 --- a/test/vhost/initiator/blockdev.sh +++ b/test/vhost/initiator/blockdev.sh @@ -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 diff --git a/test/vhost/integrity/integrity_start.sh b/test/vhost/integrity/integrity_start.sh index 49831693e..646c91ad1 100755 --- a/test/vhost/integrity/integrity_start.sh +++ b/test/vhost/integrity/integrity_start.sh @@ -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" diff --git a/test/vhost/lvol/autotest.config b/test/vhost/lvol/autotest.config index 4b9f6f914..15790c322 100644 --- a/test/vhost/lvol/autotest.config +++ b/test/vhost/lvol/autotest.config @@ -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 diff --git a/test/vhost/lvol/lvol_test.sh b/test/vhost/lvol/lvol_test.sh index 0f0f1dc8d..ea46b596e 100755 --- a/test/vhost/lvol/lvol_test.sh +++ b/test/vhost/lvol/lvol_test.sh @@ -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 diff --git a/test/vhost/migration/migration-malloc.sh b/test/vhost/migration/migration-malloc.sh index bc55a3944..29384515d 100755 --- a/test/vhost/migration/migration-malloc.sh +++ b/test/vhost/migration/migration-malloc.sh @@ -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 "" diff --git a/test/vhost/readonly/readonly.sh b/test/vhost/readonly/readonly.sh index 72468a6a0..740b6e89b 100755 --- a/test/vhost/readonly/readonly.sh +++ b/test/vhost/readonly/readonly.sh @@ -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