From cb0d354bb44ebed3f7e8f84056ee076bbeea5796 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Fri, 10 Dec 2021 15:50:55 +0100 Subject: [PATCH] test/nvmf: zero-copy test The test has two phases: first it runs a bdevperf with rw=verify to check data consistency and then runs bdevperf in the background while sending RPC requests causing the subsystem to be constanty paused/resumed. In-capsule data is set to 0 to make sure all IO requests are using zero-copy. Signed-off-by: Konrad Sztyber Change-Id: I1c1d7eb04714c8506307cb95b6cbc5988c8946a3 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10797 Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI --- test/nvmf/nvmf.sh | 1 + test/nvmf/target/zcopy.sh | 47 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100755 test/nvmf/target/zcopy.sh 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