1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2016 Intel Corporation 4# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. 5# All rights reserved. 6# 7testdir=$(readlink -f $(dirname $0)) 8rootdir=$(readlink -f $testdir/../../..) 9source $rootdir/test/common/autotest_common.sh 10source $rootdir/test/nvmf/common.sh 11 12MALLOC_BDEV_SIZE=64 13MALLOC_BLOCK_SIZE=512 14 15rpc_py="$rootdir/scripts/rpc.py" 16 17nvmftestinit 18nvmfappstart -m 0xF 19 20function perf_app() { 21 if [ $SPDK_RUN_NON_ROOT -eq 1 ]; then 22 sudo -E -u $SUDO_USER "LD_LIBRARY_PATH=$LD_LIBRARY_PATH" $SPDK_BIN_DIR/spdk_nvme_perf "$@" 23 else 24 $SPDK_BIN_DIR/spdk_nvme_perf "$@" 25 fi 26} 27 28$rootdir/scripts/gen_nvme.sh | $rpc_py load_subsystem_config 29 30local_nvme_trid=$($rpc_py framework_get_config bdev | jq -r '.[].params | select(.name=="Nvme0").traddr') 31bdevs="$bdevs $($rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE)" 32 33if [ -n "$local_nvme_trid" ]; then 34 bdevs="$bdevs Nvme0n1" 35fi 36 37if [ "$TEST_TRANSPORT" == "rdma" ]; then 38 # set in_capsule_data_size to 0 value to verify that target correctly handles multi SGL payload. 39 # Specify io_unit_size in perf tool to force multi SGL payload. 40 $rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -c 0 41else 42 $rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS 43fi 44$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 45for bdev in $bdevs; do 46 $rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 $bdev 47done 48$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 49$rpc_py nvmf_subsystem_add_listener discovery -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 50 51# Test multi-process access to local NVMe device 52if [ -n "$local_nvme_trid" ]; then 53 perf_app -i $NVMF_APP_SHM_ID -q 32 -o 4096 -w randrw -M 50 -t 1 -r "trtype:PCIe traddr:$local_nvme_trid" 54fi 55 56$SPDK_BIN_DIR/spdk_nvme_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" 57$SPDK_BIN_DIR/spdk_nvme_perf -q 32 -o 4096 -w randrw -M 50 -t 1 -HI -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT" 58# Temporarily disable on e810 due to issue #3228 59if ! [[ "$SPDK_TEST_NVMF_NICS" == "e810" && "$TEST_TRANSPORT" == "rdma" ]]; then 60 $SPDK_BIN_DIR/spdk_nvme_perf -q 128 -o 262144 -O 16384 -w randrw -M 50 -t 2 -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT" 61fi 62# this perf run aims to test handling of multi SGL payload in RDMA transport. Here we send 9 sge elements while 63# standard read_depth is 16. That triggers split of Write IO into several parts 64$SPDK_BIN_DIR/spdk_nvme_perf -q 128 -o 36964 -O 4096 -w randrw -M 50 -t 5 -r "trtype:$TEST_TRANSPORT adrfam:IPv4 traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT" -c 0xf -P 4 65$SPDK_BIN_DIR/spdk_nvme_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" --transport-stat 66sync 67$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1 68 69if [ $RUN_NIGHTLY -eq 1 ]; then 70 # Configure nvme devices with nvmf lvol_bdev backend 71 if [ -n "$local_nvme_trid" ]; then 72 ls_guid=$($rpc_py bdev_lvol_create_lvstore Nvme0n1 lvs_0) 73 get_lvs_free_mb $ls_guid 74 # We don't need to create an lvol larger than 20G for this test. 75 # decreasing the size of the nested lvol allows us to take less time setting up 76 #before running I/O. 77 if [ $free_mb -gt 20480 ]; then 78 free_mb=20480 79 fi 80 lb_guid=$($rpc_py bdev_lvol_create -u $ls_guid lbd_0 $free_mb) 81 82 # Create lvol bdev for nested lvol stores 83 ls_nested_guid=$($rpc_py bdev_lvol_create_lvstore $lb_guid lvs_n_0) 84 get_lvs_free_mb $ls_nested_guid 85 if [ $free_mb -gt 20480 ]; then 86 free_mb=20480 87 fi 88 lb_nested_guid=$($rpc_py bdev_lvol_create -u $ls_nested_guid lbd_nest_0 $free_mb) 89 $rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 90 for bdev in $lb_nested_guid; do 91 $rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 $bdev 92 done 93 $rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 94 # Test perf as host with different io_size and qd_depth in nightly 95 qd_depth=("1" "32" "128") 96 io_size=("512" "131072") 97 for qd in "${qd_depth[@]}"; do 98 for o in "${io_size[@]}"; do 99 $SPDK_BIN_DIR/spdk_nvme_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" 100 done 101 done 102 103 # Delete subsystems, lvol_bdev and destroy lvol_store. 104 $rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1 105 $rpc_py bdev_lvol_delete "$lb_nested_guid" 106 $rpc_py bdev_lvol_delete_lvstore -l lvs_n_0 107 $rpc_py bdev_lvol_delete "$lb_guid" 108 $rpc_py bdev_lvol_delete_lvstore -l lvs_0 109 fi 110fi 111 112trap - SIGINT SIGTERM EXIT 113 114nvmftestfini 115