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