bdevperf application is utilized in multiple test scenarios and most prominently in SPDK performance reports. Similar to perf and fio_plugins, it is used to measure performance. It is intended to represent the expected behavior of users application that use SPDK bdev layer. Applications under --enable-tests are intended for specific test scenarios and user interaction is usually via a test scripts. Meanwhile --enable-examples are used more broadly to teach and show usage of SPDK libraries. As an added benefit with this patch, its possible to compile bdevperf without need to satisfy additional requirements to compile all the test applications. Change-Id: I9aaec1f9d729a1cdee89b5fdc365d61c19b03f82 Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14558 Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot
143 lines
5.1 KiB
Bash
Executable File
143 lines
5.1 KiB
Bash
Executable File
#!/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
|
|
|
|
MALLOC_BDEV_SIZE=64
|
|
MALLOC_BLOCK_SIZE=512
|
|
|
|
rpc_py="$rootdir/scripts/rpc.py"
|
|
bpf_sh="$rootdir/scripts/bpftrace.sh"
|
|
|
|
bdevperf_rpc_sock=/var/tmp/bdevperf.sock
|
|
|
|
nvmftestinit
|
|
|
|
nvmfappstart -m 0x3
|
|
|
|
trap 'process_shm --id $NVMF_APP_SHM_ID; killprocess $bdevperf_pid || :; nvmftestfini; exit 1' SIGINT SIGTERM EXIT
|
|
|
|
$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192
|
|
$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc0
|
|
$rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001
|
|
$rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 Malloc0
|
|
$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
|
|
$rootdir/build/examples/bdevperf -m 0x4 -z -r $bdevperf_rpc_sock -q 128 -o 4096 -w verify -t 20 -f &
|
|
bdevperf_pid=$!
|
|
|
|
waitforlisten $bdevperf_pid $bdevperf_rpc_sock
|
|
|
|
function get_bdev() {
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_get_bdevs | jq -r '.[].name'
|
|
}
|
|
|
|
function get_controller() {
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_nvme_get_controllers | jq -r '.[].name'
|
|
}
|
|
|
|
# Case 1 test ctrlr_loss_timeout_sec time to try reconnecting to a ctrlr before deleting it
|
|
# ctrlr_loss_timeout_sec is 10 reconnect_delay_sec is 5
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_nvme_set_options -r -1
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_nvme_attach_controller -b NVMe0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT -f ipv4 -n nqn.2016-06.io.spdk:cnode1 -l 10 -o 5
|
|
|
|
$rootdir/examples/bdev/bdevperf/bdevperf.py -s $bdevperf_rpc_sock perform_tests &
|
|
rpc_pid=$!
|
|
|
|
sleep 1
|
|
|
|
$rpc_py nvmf_subsystem_remove_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
sleep 5
|
|
[[ "$(get_controller)" == "NVMe0" ]]
|
|
[[ "$(get_bdev)" == "NVMe0n1" ]]
|
|
|
|
# wait for the ctrlr_loss_timeout_sec time 10 sec and check bdevs and controller are deleted
|
|
sleep 10
|
|
[[ "$(get_controller)" == "" ]]
|
|
[[ "$(get_bdev)" == "" ]]
|
|
|
|
wait $rpc_pid
|
|
|
|
killprocess $bdevperf_pid
|
|
|
|
# Case 2 test fast_io_fail_timeout_sec
|
|
# Time to wait until ctrlr is reconnected before failing I/O to ctrlr
|
|
$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
|
|
$rootdir/build/examples/bdevperf -m 0x4 -z -r $bdevperf_rpc_sock -q 128 -o 4096 -w verify -t 20 -f &
|
|
bdevperf_pid=$!
|
|
|
|
waitforlisten $bdevperf_pid $bdevperf_rpc_sock
|
|
|
|
# ctrlr_loss_timeout_sec is 10 fast_io_fail_timeout_sec is 2 -o reconnect_delay_sec is 1
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_nvme_set_options -r -1
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_nvme_attach_controller -b NVMe0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT \
|
|
-f ipv4 -n nqn.2016-06.io.spdk:cnode1 -l 10 -u 2 -o 1
|
|
|
|
$rootdir/examples/bdev/bdevperf/bdevperf.py -s $bdevperf_rpc_sock perform_tests &
|
|
rpc_pid=$!
|
|
|
|
sleep 1
|
|
$rpc_py nvmf_subsystem_remove_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
|
|
# ctrlr should try to reconnect and I/O submitted should be queued until the listener is added back before 5 sec fast_io_fail_timeout_sec
|
|
sleep 1
|
|
$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
wait $rpc_pid
|
|
|
|
# TODO: Check the IO fail if we wait for 5 sec, needs information from bdevperf
|
|
|
|
$rootdir/examples/bdev/bdevperf/bdevperf.py -s $bdevperf_rpc_sock perform_tests &
|
|
rpc_pid=$!
|
|
sleep 1
|
|
$rpc_py nvmf_subsystem_remove_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
# bdevperf fails to process the I/O fast_io_fail_timeout_sec expires at 2 sec
|
|
sleep 5
|
|
$rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
wait $rpc_pid
|
|
|
|
killprocess $bdevperf_pid
|
|
|
|
# Case 3 test reconnect_delay_sec
|
|
# Time to delay a reconnect trial
|
|
$rootdir/build/examples/bdevperf -m 0x4 -z -r $bdevperf_rpc_sock -q 128 -o 4096 -w randread -t 20 -f &
|
|
bdevperf_pid=$!
|
|
|
|
waitforlisten $bdevperf_pid $bdevperf_rpc_sock
|
|
|
|
#start_trace
|
|
$bpf_sh $bdevperf_pid $rootdir/scripts/bpf/nvmf_timeout.bt &> $testdir/trace.txt &
|
|
dtrace_pid=$!
|
|
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_nvme_set_options -r -1 -e 9
|
|
|
|
# ctrlr_loss_timeout_sec is 10 reconnect_delay_sec is 2
|
|
$rpc_py -s $bdevperf_rpc_sock bdev_nvme_attach_controller -b NVMe0 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP \
|
|
-s $NVMF_PORT -f ipv4 -n nqn.2016-06.io.spdk:cnode1 -l 10 -o 2
|
|
$rootdir/examples/bdev/bdevperf/bdevperf.py -s $bdevperf_rpc_sock perform_tests &
|
|
rpc_pid=$!
|
|
sleep 1
|
|
$rpc_py nvmf_subsystem_remove_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT
|
|
|
|
wait $rpc_pid
|
|
cat $testdir/trace.txt
|
|
|
|
# Disabling this test for now due to issue #2595.
|
|
# Check the frequency of delay reconnect
|
|
#if (("$(grep -c "reconnect delay bdev controller NVMe0" < $testdir/trace.txt)" <= 2)); then
|
|
# false
|
|
#fi
|
|
|
|
kill $dtrace_pid
|
|
rm -f $testdir/trace.txt
|
|
|
|
killprocess $bdevperf_pid
|
|
|
|
$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1
|
|
|
|
trap - SIGINT SIGTERM EXIT
|
|
|
|
nvmftestfini
|