test/nvmf: shorten shutdown test

Currently it blindly waits 5 seconds to make sure bdevperf
has started I/O - and it does this for two different tests.
Improve that by using the get_bdevs_iostat RPC to check when
I/O start occurring.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: If7bc773ab65d23f69524d3a42123be090f3b4eac

Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/452753
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Seth Howell <seth.howell5141@gmail.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
Jim Harris 2019-04-30 16:49:08 -07:00 committed by Darek Stojaczyk
parent 36d1cf3ad8
commit e259d2bb61

View File

@ -23,6 +23,30 @@ if [ -z $NVMF_FIRST_TARGET_IP ]; then
exit 0
fi
function waitforio() {
# $1 = RPC socket
if [ -z "$1" ]; then
exit 1
fi
# $2 = bdev name
if [ -z "$2" ]; then
exit 1
fi
local ret=1
local i
for (( i = 10; i != 0; i-- )); do
read_io_count=$($rpc_py -s $1 get_bdevs_iostat -b $2 | jq -r '.[1].num_read_ops')
# A few I/O will happen during initial examine. So wait until at least 100 I/O
# have completed to know that bdevperf is really generating the I/O.
if [ $read_io_count -ge 100 ]; then
ret=0
break
fi
sleep 0.25
done
return $ret
}
timing_enter shutdown
timing_enter start_nvmf_tgt
# Start up the NVMf target in another process
@ -91,8 +115,7 @@ perfpid=$!
waitforlisten $perfpid /var/tmp/bdevperf.sock
$rpc_py -s /var/tmp/bdevperf.sock wait_subsystem_init
# Sleep for a few seconds to allow I/O to begin
sleep 5
waitforio /var/tmp/bdevperf.sock Nvme1n1
# Kill bdevperf half way through
killprocess $perfpid
@ -114,8 +137,7 @@ $rpc_py -s /var/tmp/bdevperf.sock wait_subsystem_init
# Expand the trap to clean up bdevperf if something goes wrong
trap "process_shm --id $NVMF_APP_SHM_ID; killprocess $pid; kill -9 $perfpid; nvmfcleanup; nvmftestfini $1; exit 1" SIGINT SIGTERM EXIT
# Sleep for a few seconds to allow I/O to begin
sleep 5
waitforio /var/tmp/bdevperf.sock Nvme1n1
# Kill the target half way through
killprocess $pid