xref: /spdk/test/nvmf/host/fio.sh (revision c680e3a05b1a903c18bf3f75b732765607126f45)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (C) 2017 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/scripts/common.sh
10source $rootdir/test/nvmf/common.sh
11
12nvmftestinit
13
14if [[ $CONFIG_FIO_PLUGIN != y ]]; then
15	echo "FIO not available"
16	exit 1
17fi
18
19timing_enter start_nvmf_tgt
20
21"${NVMF_APP[@]}" -m 0xF &
22nvmfpid=$!
23
24trap 'process_shm --id $NVMF_APP_SHM_ID; nvmftestfini; exit 1' SIGINT SIGTERM EXIT
25
26waitforlisten $nvmfpid
27$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192
28timing_exit start_nvmf_tgt
29
30$rpc_py bdev_malloc_create 64 512 -b Malloc1
31$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001
32$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 Malloc1
33$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
34$rpc_py nvmf_subsystem_add_listener discovery -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
35
36PLUGIN_DIR=$rootdir/examples/nvme/fio_plugin
37
38# Test fio_plugin as host with malloc backend
39fio_nvme $PLUGIN_DIR/example_config.fio --filename="trtype=$TEST_TRANSPORT adrfam=IPv4 \
40traddr=$NVMF_FIRST_TARGET_IP trsvcid=$NVMF_PORT ns=1" --bs=4096
41
42# second test mocking multiple SGL elements
43fio_nvme $PLUGIN_DIR/mock_sgl_config.fio --filename="trtype=$TEST_TRANSPORT adrfam=IPv4 \
44traddr=$NVMF_FIRST_TARGET_IP trsvcid=$NVMF_PORT ns=1"
45$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1
46
47if [ $RUN_NIGHTLY -eq 1 ]; then
48	# Test fio_plugin as host with nvme lvol backend
49	bdfs=$(get_nvme_bdfs)
50	$rpc_py bdev_nvme_attach_controller -b Nvme0 -t PCIe -a $(echo $bdfs | awk '{ print $1 }') -i $NVMF_FIRST_TARGET_IP
51	ls_guid=$($rpc_py bdev_lvol_create_lvstore -c 1073741824 Nvme0n1 lvs_0)
52	get_lvs_free_mb $ls_guid
53	$rpc_py bdev_lvol_create -l lvs_0 lbd_0 $free_mb
54	$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode2 -a -s SPDK00000000000001
55	$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode2 lvs_0/lbd_0
56	$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode2 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
57	fio_nvme $PLUGIN_DIR/example_config.fio --filename="trtype=$TEST_TRANSPORT adrfam=IPv4 \
58	traddr=$NVMF_FIRST_TARGET_IP trsvcid=$NVMF_PORT ns=1" --bs=4096
59	$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode2
60
61	# Test fio_plugin as host with nvme lvol nested backend
62	ls_nested_guid=$($rpc_py bdev_lvol_create_lvstore --clear-method none lvs_0/lbd_0 lvs_n_0)
63	get_lvs_free_mb $ls_nested_guid
64	$rpc_py bdev_lvol_create -l lvs_n_0 lbd_nest_0 $free_mb
65	$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode3 -a -s SPDK00000000000001
66	$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode3 lvs_n_0/lbd_nest_0
67	$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode3 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
68	fio_nvme $PLUGIN_DIR/example_config.fio --filename="trtype=$TEST_TRANSPORT adrfam=IPv4 \
69	traddr=$NVMF_FIRST_TARGET_IP trsvcid=$NVMF_PORT ns=1" --bs=4096
70	$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode3
71
72	sync
73	# Delete lvol_bdev and destroy lvol_store.
74	$rpc_py bdev_lvol_delete lvs_n_0/lbd_nest_0
75	$rpc_py bdev_lvol_delete_lvstore -l lvs_n_0
76	$rpc_py bdev_lvol_delete lvs_0/lbd_0
77	$rpc_py bdev_lvol_delete_lvstore -l lvs_0
78	$rpc_py bdev_nvme_detach_controller Nvme0
79fi
80
81trap - SIGINT SIGTERM EXIT
82
83rm -f ./local-test-0-verify.state
84nvmftestfini
85