xref: /spdk/test/vfio_user/nvme/vfio_user_fio.sh (revision b3bec07939ebe2ea2e0c43931705d32aa9e06719)
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