xref: /spdk/test/nvmf/host/perf.sh (revision d73077b84a71985da1db1c9847ea7c042189bae2)
1#!/usr/bin/env bash
2
3testdir=$(readlink -f $(dirname $0))
4rootdir=$(readlink -f $testdir/../../..)
5source $rootdir/test/common/autotest_common.sh
6source $rootdir/test/nvmf/common.sh
7
8MALLOC_BDEV_SIZE=64
9MALLOC_BLOCK_SIZE=512
10
11rpc_py="$rootdir/scripts/rpc.py"
12
13nvmftestinit
14nvmfappstart -m 0xF
15
16$rootdir/scripts/gen_nvme.sh | $rpc_py load_subsystem_config
17
18local_nvme_trid="trtype:PCIe traddr:"$($rpc_py framework_get_config bdev | jq -r '.[].params | select(.name=="Nvme0").traddr')
19bdevs="$bdevs $($rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE)"
20
21if [ -n "$local_nvme_trid" ]; then
22	bdevs="$bdevs Nvme0n1"
23fi
24
25$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS
26$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001
27for bdev in $bdevs; do
28	$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 $bdev
29done
30$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
31
32# Test multi-process access to local NVMe device
33if [ -n "$local_nvme_trid" ]; then
34	if [ $SPDK_RUN_NON_ROOT -eq 1 ]; then
35		perf_app="sudo -u $USER $SPDK_EXAMPLE_DIR/perf"
36	else
37		perf_app="$SPDK_EXAMPLE_DIR/perf"
38	fi
39	$perf_app -i $NVMF_APP_SHM_ID -q 32 -o 4096 -w randrw -M 50 -t 1 -r "$local_nvme_trid"
40fi
41
42$SPDK_EXAMPLE_DIR/perf -q 1 -o 4096 -w randrw -M 50 -t 1 -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT"
43$SPDK_EXAMPLE_DIR/perf -q 32 -o 4096 -w randrw -M 50 -t 1 -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT"
44$SPDK_EXAMPLE_DIR/perf -q 128 -o 262144 -w randrw -M 50 -t 2 -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT"
45sync
46$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1
47
48if [ $RUN_NIGHTLY -eq 1 ]; then
49	# Configure nvme devices with nvmf lvol_bdev backend
50	if [ -n "$local_nvme_trid" ]; then
51		ls_guid=$($rpc_py bdev_lvol_create_lvstore Nvme0n1 lvs_0)
52		get_lvs_free_mb $ls_guid
53		# We don't need to create an lvol larger than 20G for this test.
54		# decreasing the size of the nested lvol allows us to take less time setting up
55		#before running I/O.
56		if [ $free_mb -gt 20480 ]; then
57			free_mb=20480
58		fi
59		lb_guid=$($rpc_py bdev_lvol_create -u $ls_guid lbd_0 $free_mb)
60
61		# Create lvol bdev for nested lvol stores
62		ls_nested_guid=$($rpc_py bdev_lvol_create_lvstore $lb_guid lvs_n_0)
63		get_lvs_free_mb $ls_nested_guid
64		if [ $free_mb -gt 20480 ]; then
65			free_mb=20480
66		fi
67		lb_nested_guid=$($rpc_py bdev_lvol_create -u $ls_nested_guid lbd_nest_0 $free_mb)
68		$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001
69		for bdev in $lb_nested_guid; do
70			$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 $bdev
71		done
72		$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
73		# Test perf as host with different io_size and qd_depth in nightly
74		qd_depth=("1" "32" "128")
75		io_size=("512" "131072")
76		for qd in "${qd_depth[@]}"; do
77			for o in "${io_size[@]}"; do
78				$SPDK_EXAMPLE_DIR/perf -q $qd -o $o -w randrw -M 50 -t 10 -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT"
79			done
80		done
81
82		# Delete subsystems, lvol_bdev and destroy lvol_store.
83		$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1
84		$rpc_py bdev_lvol_delete "$lb_nested_guid"
85		$rpc_py bdev_lvol_delete_lvstore -l lvs_n_0
86		$rpc_py bdev_lvol_delete "$lb_guid"
87		$rpc_py bdev_lvol_delete_lvstore -l lvs_0
88	fi
89fi
90
91trap - SIGINT SIGTERM EXIT
92
93nvmftestfini
94