test/bdev: Replace old style config with json config

Overwrite ini config with json and use it in such a form throughout
the entire test run.

This patch is the beginning of the series targeting conversion of
ini config to json in blockbdev tests.

Change-Id: Ic64f24b2ea9df85ad1ba3d038a78384e6f2badf9
Signed-off-by: Pawel Kaminski <pawelx.kaminski@intel.com>
Signed-off-by: Michal Berger <michalx.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/530
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Seth Howell <seth.howell5141@gmail.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
Pawel Kaminski 2020-01-29 11:07:09 -05:00 committed by Tomasz Zawadzki
parent db43b387ba
commit 970601af86

View File

@ -7,6 +7,25 @@ source $testdir/nbd_common.sh
rpc_py="$rootdir/scripts/rpc.py"
conf_file="$testdir/bdev.conf"
# Make sure the configuration is clean
:>"$conf_file"
function start_spdk_tgt() {
local spdk_cmd
if [[ -n $spdk_tgt_pid ]] && kill -0 "$spdk_tgt_pid" &>/dev/null; then
return 0
fi
if [[ -s $conf_file ]]; then
spdk_cmd+=(--config "$conf_file")
fi
"$rootdir/app/spdk_tgt/spdk_tgt" "${spdk_cmd[@]}" &
spdk_tgt_pid=$!
trap 'killprocess "$spdk_tgt_pid"; exit 1' SIGINT SIGTERM EXIT
waitforlisten "$spdk_tgt_pid"
}
function setup_bdev_conf() {
# Create a file to be used as an AIO backend
@ -27,9 +46,10 @@ dd if=/dev/zero of=/tmp/aiofile bs=2048 count=5000
[Passthru]
PT Malloc3 TestPT
[QoS]
Limit_IOPS Malloc0 20000
Limit_BPS Malloc3 100
# FIXME: QoS doesn't work properly with json_config: issue 1146
# [QoS]
# Limit_IOPS Malloc0 20000
# Limit_BPS Malloc3 100
[RAID0]
Name raid0
@ -45,8 +65,15 @@ function setup_nvme_conf() {
}
function setup_gpt_conf() {
# FIXME: Remove this
if [[ $1 == reset ]]; then
# Make sure that on reset we use ini config only as part_dev_by_gpt()
# still depends on it
:>"$conf_file"
fi
setup_nvme_conf
if grep -q Nvme0 $conf_file; then
[[ $1 == reset ]] && return 0
part_dev_by_gpt $conf_file Nvme0n1 $rootdir
else
return 1
@ -82,7 +109,7 @@ function setup_rbd_conf() {
}
function bdev_bounds() {
$testdir/bdevio/bdevio -w -s $PRE_RESERVED_MEM -c $conf_file &
$testdir/bdevio/bdevio -w -s $PRE_RESERVED_MEM --json "$conf_file" &
bdevio_pid=$!
trap 'killprocess $bdevio_pid; exit 1' SIGINT SIGTERM EXIT
echo "Process bdevio pid: $bdevio_pid"
@ -110,7 +137,7 @@ function nbd_function_test() {
fi
modprobe nbd
$rootdir/test/app/bdev_svc/bdev_svc -r $rpc_server -i 0 -c ${conf} &
$rootdir/test/app/bdev_svc/bdev_svc -r $rpc_server -i 0 --json "$conf" &
nbd_pid=$!
trap 'killprocess $nbd_pid; exit 1' SIGINT SIGTERM EXIT
echo "Process nbd pid: $nbd_pid"
@ -134,11 +161,11 @@ function fio_test_suite() {
done
if [ $RUN_NIGHTLY_FAILING -eq 0 ]; then
local fio_params="--ioengine=spdk_bdev --iodepth=8 --bs=4k --runtime=10 $testdir/bdev.fio --spdk_conf=./test/bdev/bdev.conf"
local fio_params="--ioengine=spdk_bdev --iodepth=8 --bs=4k --runtime=10 $testdir/bdev.fio --spdk_json_conf=./test/bdev/bdev.conf"
else
# Use size 192KB which both exceeds typical 128KB max NVMe I/O
# size and will cross 128KB Intel DC P3700 stripe boundaries.
local fio_params="--ioengine=spdk_bdev --iodepth=128 --bs=192k --runtime=100 $testdir/bdev.fio --spdk_conf=./test/bdev/bdev.conf"
local fio_params="--ioengine=spdk_bdev --iodepth=128 --bs=192k --runtime=100 $testdir/bdev.fio --spdk_json_conf=./test/bdev/bdev.conf"
fi
run_test "bdev_fio_rw_verify" fio_bdev $fio_params --spdk_mem=$PRE_RESERVED_MEM \
@ -234,7 +261,7 @@ function qos_function_test() {
function qos_test_suite() {
# Run bdevperf with QoS disabled first
$testdir/bdevperf/bdevperf -z -m 0x2 -q 256 -o 4096 -w randread -t 60 &
"$testdir/bdevperf/bdevperf" -z -m 0x2 -q 256 -o 4096 -w randread -t 60 &
QOS_PID=$!
echo "Process qos testing pid: $QOS_PID"
trap 'killprocess $QOS_PID; exit 1' SIGINT SIGTERM EXIT
@ -289,14 +316,26 @@ if [ -n "$test_type" ]; then
esac
fi
bdevs=$(discover_bdevs $rootdir $conf_file | jq -r '.[] | select(.claimed == false)')
start_spdk_tgt
# Overwrite ini config with json and use it as such throughout all the tests
cat <<-CONF >"$conf_file"
{"subsystems":[
$("$rpc_py" save_subsystem_config -n bdev)
]}
CONF
bdevs=$("$rpc_py" bdev_get_bdevs | jq -r '.[] | select(.claimed == false)')
bdevs_name=$(echo $bdevs | jq -r '.name')
bdev_list=($bdevs_name)
hello_world_bdev=${bdev_list[0]}
trap - SIGINT SIGTERM EXIT
killprocess "$spdk_tgt_pid"
# End bdev configuration
#-----------------------------------------------------
run_test "bdev_hello_world" $rootdir/examples/bdev/hello_world/hello_bdev -c $conf_file -b $hello_world_bdev
run_test "bdev_hello_world" $rootdir/examples/bdev/hello_world/hello_bdev --json "$conf_file" -b "$hello_world_bdev"
run_test "bdev_bounds" bdev_bounds
run_test "bdev_nbd" nbd_function_test $conf_file "$bdevs_name"
if [[ $CONFIG_FIO_PLUGIN == y ]]; then
@ -311,8 +350,8 @@ else
exit 1
fi
run_test "bdev_verify" $testdir/bdevperf/bdevperf -c $conf_file -q 128 -o 4096 -w verify -t 5
run_test "bdev_write_zeroes" $testdir/bdevperf/bdevperf -c $conf_file -q 128 -o 4096 -w write_zeroes -t 1
run_test "bdev_verify" $testdir/bdevperf/bdevperf --json "$conf_file" -q 128 -o 4096 -w verify -t 5
run_test "bdev_write_zeroes" $testdir/bdevperf/bdevperf --json "$conf_file" -q 128 -o 4096 -w write_zeroes -t 1
if [ -z $test_type ]; then
run_test "bdev_qos" qos_test_suite
@ -320,12 +359,13 @@ fi
# Temporarily disabled - infinite loop
# if [ $RUN_NIGHTLY -eq 1 ]; then
# run_test "bdev_reset" $testdir/bdevperf/bdevperf -c $conf_file -q 16 -w reset -o 4096 -t 60
# run_test "bdev_reset" $testdir/bdevperf/bdevperf --json "$conf_file" -q 16 -w reset -o 4096 -t 60
# fi
# Bdev and configuration cleanup below this line
#-----------------------------------------------------
if [ "$test_type" = "gpt" ]; then
setup_gpt_conf reset
part_dev_by_gpt $conf_file Nvme0n1 $rootdir reset
fi