diff --git a/test/nvmf/nvmf.sh b/test/nvmf/nvmf.sh index 1a3e22f32..bb8a16521 100755 --- a/test/nvmf/nvmf.sh +++ b/test/nvmf/nvmf.sh @@ -63,6 +63,7 @@ if ! check_ip_is_soft_roce $NVMF_FIRST_TARGET_IP; then fi run_test "nvmf_multipath" test/nvmf/target/multipath.sh "${TEST_ARGS[@]}" +run_test "nvmf_zcopy" test/nvmf/target/zcopy.sh "${TEST_ARGS[@]}" timing_enter host diff --git a/test/nvmf/target/zcopy.sh b/test/nvmf/target/zcopy.sh new file mode 100755 index 000000000..b95c92024 --- /dev/null +++ b/test/nvmf/target/zcopy.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +testdir=$(readlink -f $(dirname $0)) +rootdir=$(readlink -f $testdir/../../..) + +source $rootdir/test/common/autotest_common.sh +source $rootdir/test/nvmf/common.sh + +rpc_py="$rootdir/scripts/rpc.py" + +nvmftestinit +nvmfappstart + +if [ "$TEST_TRANSPORT" != tcp ]; then + echo "Unsupported transport: $TEST_TRANSPORT" + exit 0 +fi + +# Enable zero-copy and set in-capsule data size to zero to make sure all requests are using +# zero-copy +$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -c 0 --zcopy + +$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 -m 10 +$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT \ + -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT +$rpc_py bdev_malloc_create 32 4096 -b malloc0 +$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 malloc0 -n 1 + +# First send IO with verification +$rootdir/test/bdev/bdevperf/bdevperf --json <(gen_nvmf_target_json) \ + -t 10 -q 128 -w verify -o 8192 + +# Then send IO in the background while pausing/resuming the subsystem +$rootdir/test/bdev/bdevperf/bdevperf --json <(gen_nvmf_target_json) \ + -t 5 -q 128 -w randrw -M 50 -o 8192 & +perfpid=$! + +while kill -0 $perfpid; do + # Add the same namespace again. It'll fail, but will also pause/resume the subsystem and + # the namespace forcing the IO requests to be queued/resubmitted. + $rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 malloc0 -n 1 &> /dev/null || : +done + +wait $perfpid + +trap - SIGINT SIGTERM EXIT +nvmftestfini