diff --git a/autotest.sh b/autotest.sh index 85b90efc7..440a43349 100755 --- a/autotest.sh +++ b/autotest.sh @@ -220,6 +220,10 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then if [ $SPDK_RUN_ASAN -eq 0 ] && [ $(uname -s) = Linux ]; then run_test "sw_hotplug" test/nvme/sw_hotplug.sh fi + + if [[ $SPDK_TEST_XNVME -eq 1 ]]; then + run_test "nvme_xnvme" test/nvme/xnvme/xnvme.sh + fi fi if [ $SPDK_TEST_IOAT -eq 1 ]; then diff --git a/test/nvme/xnvme/xnvme.sh b/test/nvme/xnvme/xnvme.sh new file mode 100755 index 000000000..3f2ef9979 --- /dev/null +++ b/test/nvme/xnvme/xnvme.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +testdir=$(readlink -f "$(dirname "$0")") +rootdir=$(readlink -f "$testdir/../../../") +# Hook into dd suite to perform some basic IO tests +source "$rootdir/test/dd/common.sh" + +malloc_to_xnvme_copy() { + # Use zram for the xnvme backend + init_zram + + local mbdev0=malloc0 mbdev0_b=1048576 mbdev0_bs=512 + local xnvme0=zram0 xnvme0_dev xnvme_io=() + local io + + xnvme_io+=(libaio) + xnvme_io+=(io_uring) + + xnvme0_dev=$(create_zram_dev) + set_zram_dev "$xnvme0_dev" 512M + + local -A method_bdev_malloc_create_0=( + ["name"]=$mbdev0 + ["num_blocks"]=$mbdev0_b + ["block_size"]=$mbdev0_bs + ) + + local -A method_bdev_xnvme_create_0=() + method_bdev_xnvme_create_0["name"]=$xnvme0 + method_bdev_xnvme_create_0["filename"]="/dev/zram$xnvme0_dev" + + for io in "${xnvme_io[@]}"; do + method_bdev_xnvme_create_0["io_mechanism"]="$io" + + "${DD_APP[@]}" \ + --ib="$mbdev0" \ + --ob="$xnvme0" \ + --json <(gen_conf) + + "${DD_APP[@]}" \ + --ib="$xnvme0" \ + --ob="$mbdev0" \ + --json <(gen_conf) + done + + remove_zram_dev "$xnvme0_dev" +} + +xnvme_bdevperf() { + # Use zram for the xnvme backend + init_zram + + local xnvme0=zram0 xnvme0_dev xnvme_io=() + local io + + xnvme_io+=(libaio) + xnvme_io+=(io_uring) + + xnvme0_dev=$(create_zram_dev) + set_zram_dev "$xnvme0_dev" 512M + + local -A method_bdev_xnvme_create_0=() + method_bdev_xnvme_create_0["name"]=$xnvme0 + method_bdev_xnvme_create_0["filename"]="/dev/zram$xnvme0_dev" + + for io in "${xnvme_io[@]}"; do + method_bdev_xnvme_create_0["io_mechanism"]="$io" + "$rootdir/test/bdev/bdevperf/bdevperf" \ + --json <(gen_conf) \ + -q 64 \ + -w randread \ + -t 5 \ + -T "$xnvme0" \ + -o 4096 + done + + remove_zram_dev "$xnvme0_dev" +} + +run_test "xnvme_to_malloc_dd_copy" malloc_to_xnvme_copy +run_test "xnvme_bdevperf" xnvme_bdevperf