14a0c1021SZiye Yang#!/usr/bin/env bash 2eb53c232Spaul luse# SPDX-License-Identifier: BSD-3-Clause 3eb53c232Spaul luse# Copyright (C) 2016 Intel Corporation 4ca59dd5dSAlexey Marchuk# Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. 5eb53c232Spaul luse# All rights reserved. 6eb53c232Spaul luse# 74a0c1021SZiye Yangtestdir=$(readlink -f $(dirname $0)) 84a0c1021SZiye Yangrootdir=$(readlink -f $testdir/../../..) 9c9e5d2a6SSeth Howellsource $rootdir/test/common/autotest_common.sh 104a0c1021SZiye Yangsource $rootdir/test/nvmf/common.sh 114a0c1021SZiye Yang 124a0c1021SZiye YangMALLOC_BDEV_SIZE=64 134a0c1021SZiye YangMALLOC_BLOCK_SIZE=512 144a0c1021SZiye Yang 15b96f97cfSPawel Wodkowskirpc_py="$rootdir/scripts/rpc.py" 164a0c1021SZiye Yang 17c4d5d2fdSJim Harrisnvmftestinit 188cc72fe4SMichal Bergernvmfappstart -m 0xF 194a0c1021SZiye Yang 20191e6ab8SPawel Piatekfunction perf_app() { 21191e6ab8SPawel Piatek if [ $SPDK_RUN_NON_ROOT -eq 1 ]; then 2248ac1225SBen Walker sudo -E -u $SUDO_USER "LD_LIBRARY_PATH=$LD_LIBRARY_PATH" $SPDK_BIN_DIR/spdk_nvme_perf "$@" 23191e6ab8SPawel Piatek else 2448ac1225SBen Walker $SPDK_BIN_DIR/spdk_nvme_perf "$@" 25191e6ab8SPawel Piatek fi 26191e6ab8SPawel Piatek} 27191e6ab8SPawel Piatek 288c3e71f0STomasz Zawadzki$rootdir/scripts/gen_nvme.sh | $rpc_py load_subsystem_config 294a0c1021SZiye Yang 3077628d81SSebastian Brzezinkalocal_nvme_trid=$($rpc_py framework_get_config bdev | jq -r '.[].params | select(.name=="Nvme0").traddr') 317964f1dfSPawel Kaminskibdevs="$bdevs $($rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE)" 324a0c1021SZiye Yang 3360a0f085SDaniel Verkampif [ -n "$local_nvme_trid" ]; then 3460a0f085SDaniel Verkamp bdevs="$bdevs Nvme0n1" 3560a0f085SDaniel Verkampfi 3660a0f085SDaniel Verkamp 37ed1a6c7dSAlexey Marchukif [ "$TEST_TRANSPORT" == "rdma" ]; then 38ed1a6c7dSAlexey Marchuk # set in_capsule_data_size to 0 value to verify that target correctly handles multi SGL payload. 39ed1a6c7dSAlexey Marchuk # Specify io_unit_size in perf tool to force multi SGL payload. 40ed1a6c7dSAlexey Marchuk $rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -c 0 41ed1a6c7dSAlexey Marchukelse 42015ef22aSSeth Howell $rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS 43ed1a6c7dSAlexey Marchukfi 447538af70SMaciej Wawryk$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 45ec1f4258SBen Walkerfor bdev in $bdevs; do 46ec1f4258SBen Walker $rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 $bdev 47ec1f4258SBen Walkerdone 48c4d5d2fdSJim Harris$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 49d98c3749SJim Harris$rpc_py nvmf_subsystem_add_listener discovery -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 504a0c1021SZiye Yang 5160a0f085SDaniel Verkamp# Test multi-process access to local NVMe device 5260a0f085SDaniel Verkampif [ -n "$local_nvme_trid" ]; then 5377628d81SSebastian Brzezinka perf_app -i $NVMF_APP_SHM_ID -q 32 -o 4096 -w randrw -M 50 -t 1 -r "trtype:PCIe traddr:$local_nvme_trid" 5460a0f085SDaniel Verkampfi 5560a0f085SDaniel Verkamp 5648ac1225SBen Walker$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" 5748ac1225SBen Walker$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*e85ca742STomasz Zawadzki# Temporarily disable on e810 due to issue #3228 59*e85ca742STomasz Zawadzkiif ! [[ "$SPDK_TEST_NVMF_NICS" == "e810" && "$TEST_TRANSPORT" == "rdma" ]]; then 6048ac1225SBen Walker $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" 61*e85ca742STomasz Zawadzkifi 62ca59dd5dSAlexey Marchuk# this perf run aims to test handling of multi SGL payload in RDMA transport. Here we send 9 sge elements while 63ca59dd5dSAlexey Marchuk# standard read_depth is 16. That triggers split of Write IO into several parts 6448ac1225SBen Walker$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 6548ac1225SBen Walker$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 664a0c1021SZiye Yangsync 6719baaa9aSMaciej Wawryk$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1 684a0c1021SZiye Yang 69ec25ddd9Swenzhong wuif [ $RUN_NIGHTLY -eq 1 ]; then 70ec25ddd9Swenzhong wu # Configure nvme devices with nvmf lvol_bdev backend 71ec25ddd9Swenzhong wu if [ -n "$local_nvme_trid" ]; then 72de756853SMaciej Wawryk ls_guid=$($rpc_py bdev_lvol_create_lvstore Nvme0n1 lvs_0) 73ec25ddd9Swenzhong wu get_lvs_free_mb $ls_guid 746e4f5e0bSSeth Howell # We don't need to create an lvol larger than 20G for this test. 756e4f5e0bSSeth Howell # decreasing the size of the nested lvol allows us to take less time setting up 766e4f5e0bSSeth Howell #before running I/O. 776e4f5e0bSSeth Howell if [ $free_mb -gt 20480 ]; then 786e4f5e0bSSeth Howell free_mb=20480 796e4f5e0bSSeth Howell fi 80c57cd922SMaciej Wawryk lb_guid=$($rpc_py bdev_lvol_create -u $ls_guid lbd_0 $free_mb) 815dcb2c46Sxuhuagen 825dcb2c46Sxuhuagen # Create lvol bdev for nested lvol stores 83de756853SMaciej Wawryk ls_nested_guid=$($rpc_py bdev_lvol_create_lvstore $lb_guid lvs_n_0) 845dcb2c46Sxuhuagen get_lvs_free_mb $ls_nested_guid 856e4f5e0bSSeth Howell if [ $free_mb -gt 20480 ]; then 866e4f5e0bSSeth Howell free_mb=20480 876e4f5e0bSSeth Howell fi 88c57cd922SMaciej Wawryk lb_nested_guid=$($rpc_py bdev_lvol_create -u $ls_nested_guid lbd_nest_0 $free_mb) 897538af70SMaciej Wawryk $rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 90ec1f4258SBen Walker for bdev in $lb_nested_guid; do 91ec1f4258SBen Walker $rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 $bdev 92ec1f4258SBen Walker done 93c4d5d2fdSJim Harris $rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 94ec25ddd9Swenzhong wu # Test perf as host with different io_size and qd_depth in nightly 9501e85f47Syidong0635 qd_depth=("1" "32" "128") 96ec25ddd9Swenzhong wu io_size=("512" "131072") 97fdc82d3bSMaciej Wawryk for qd in "${qd_depth[@]}"; do 98fdc82d3bSMaciej Wawryk for o in "${io_size[@]}"; do 9948ac1225SBen Walker $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" 100ec25ddd9Swenzhong wu done 101ec25ddd9Swenzhong wu done 102ec25ddd9Swenzhong wu 103ec25ddd9Swenzhong wu # Delete subsystems, lvol_bdev and destroy lvol_store. 10419baaa9aSMaciej Wawryk $rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1 105b5fdf4ecSMaciej Wawryk $rpc_py bdev_lvol_delete "$lb_nested_guid" 1064c049618SMaciej Wawryk $rpc_py bdev_lvol_delete_lvstore -l lvs_n_0 107b5fdf4ecSMaciej Wawryk $rpc_py bdev_lvol_delete "$lb_guid" 1084c049618SMaciej Wawryk $rpc_py bdev_lvol_delete_lvstore -l lvs_0 109ec25ddd9Swenzhong wu fi 110ec25ddd9Swenzhong wufi 111ec25ddd9Swenzhong wu 1124a0c1021SZiye Yangtrap - SIGINT SIGTERM EXIT 1134a0c1021SZiye Yang 114913f5858SJim Harrisnvmftestfini 115