1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2021 Intel Corporation 4# All rights reserved. 5# 6testdir=$(readlink -f $(dirname $0)) 7rootdir=$(readlink -f $testdir/../../..) 8source $rootdir/test/common/autotest_common.sh 9source $rootdir/test/vfio_user/common.sh 10source $rootdir/test/vfio_user/nvme/common.sh 11source $rootdir/test/vfio_user/autotest.config 12 13rpc_py="$rootdir/scripts/rpc.py -s $(get_vhost_dir 0)/rpc.sock" 14 15fio_bin="--fio-bin=$FIO_BIN" 16vm_no="2" 17 18trap 'clean_vfio_user "${FUNCNAME}" "${LINENO}"' ERR 19vhosttestinit 20 21timing_enter start_vfio_user 22vfio_user_run 0 23 24# 25# Create multiple malloc bdevs for multiple VMs, last VM uses nvme bdev. 26# 27for i in $(seq 0 $vm_no); do 28 vm_muser_dir="$VM_DIR/$i/muser" 29 rm -rf $vm_muser_dir 30 mkdir -p $vm_muser_dir/domain/muser${i}/$i 31 32 $rpc_py nvmf_create_subsystem nqn.2019-07.io.spdk:cnode${i} -s SPDK00${i} -a 33 if ((i == vm_no)); then 34 $rootdir/scripts/gen_nvme.sh | $rpc_py load_subsystem_config 35 $rpc_py nvmf_subsystem_add_ns nqn.2019-07.io.spdk:cnode${i} Nvme0n1 36 else 37 $rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc${i} 38 $rpc_py nvmf_subsystem_add_ns nqn.2019-07.io.spdk:cnode${i} Malloc${i} 39 fi 40 $rpc_py nvmf_subsystem_add_listener nqn.2019-07.io.spdk:cnode${i} -t VFIOUSER -a $vm_muser_dir/domain/muser${i}/$i -s 0 41done 42 43timing_exit start_vfio_user 44 45used_vms="" 46timing_enter launch_vms 47for i in $(seq 0 $vm_no); do 48 vm_setup --disk-type=vfio_user --force=$i --os=$VM_IMAGE --memory=768 --disks="$i" 49 used_vms+=" $i" 50done 51 52vm_run $used_vms 53vm_wait_for_boot 60 $used_vms 54 55timing_exit launch_vms 56 57timing_enter run_vm_cmd 58 59fio_disks="" 60 61for vm_num in $used_vms; do 62 qemu_mask_param="VM_${vm_num}_qemu_mask" 63 64 host_name="VM-$vm_num-${!qemu_mask_param}" 65 vm_exec $vm_num "hostname $host_name" 66 vm_start_fio_server $fio_bin $vm_num 67 vm_check_nvme_location $vm_num 68 69 fio_disks+=" --vm=${vm_num}$(printf ':/dev/%s' $SCSI_DISK)" 70done 71 72job_file="default_integrity.job" 73run_fio $fio_bin --job-file=$rootdir/test/vhost/common/fio_jobs/$job_file --out="$VHOST_DIR/fio_results" $fio_disks 74 75timing_exit run_vm_cmd 76 77vm_shutdown_all 78 79timing_enter clean_vfio_user 80 81for i in $(seq 0 $vm_no); do 82 vm_muser_dir="$VM_DIR/$i/muser" 83 $rpc_py nvmf_subsystem_remove_listener nqn.2019-07.io.spdk:cnode${i} -t vfiouser -a $vm_muser_dir/domain/muser${i}/$i -s 0 84 $rpc_py nvmf_delete_subsystem nqn.2019-07.io.spdk:cnode${i} 85 if ((i == vm_no)); then 86 $rpc_py bdev_nvme_detach_controller Nvme0 87 else 88 $rpc_py bdev_malloc_delete Malloc${i} 89 fi 90done 91 92vhost_kill 0 93timing_exit clean_vfio_user 94vhosttestfini 95