Commit 1fdfb7e3 authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

test/dd: Simple tests utilizing uring RPCs



Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Change-Id: If9c5d0071d30b3a5ac40ea5085dbf564b98cb667
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9947


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent eb77d639
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -159,3 +159,30 @@ check_liburing() {
		fi
	done < <(LD_TRACE_LOADED_OBJECTS=1 "${DD_APP[@]}") >&2
}

init_zram() {
	[[ -e /sys/class/zram-control ]] || modprobe zram num_devices=0
	return
}

create_zram_dev() {
	cat /sys/class/zram-control/hot_add
}

remove_zram_dev() {
	local id=$1

	[[ -e /sys/block/zram$id ]]

	echo 1 > "/sys/block/zram$id/reset"
	echo "$id" > "/sys/class/zram-control/hot_remove"
}

set_zram_dev() {
	local id=$1
	local size=${2:-64M}

	[[ -e /sys/block/zram$id ]]

	echo "$size" > "/sys/block/zram$id/disksize"
}
+3 −0
Original line number Diff line number Diff line
@@ -17,3 +17,6 @@ run_test "spdk_dd_basic_rw" "$testdir/basic_rw.sh" "${nvmes[@]}"
run_test "spdk_dd_posix" "$testdir/posix.sh"
run_test "spdk_dd_malloc" "$testdir/malloc.sh"
run_test "spdk_dd_bdev_to_bdev" "$testdir/bdev_to_bdev.sh" "${nvmes[@]}"
if ((SPDK_TEST_URING == 1)); then
	run_test "spdk_dd_uring" "$testdir/uring.sh"
fi

test/dd/uring.sh

0 → 100755
+98 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../")
source "$testdir/common.sh"

uring_zram_copy() {
	# Use zram for backend device - this is done in order to make the IO as fast
	# as possible.

	local zram_dev_id
	local magic
	local magic_file0=$SPDK_TEST_STORAGE/magic.dump0
	local magic_file1=$SPDK_TEST_STORAGE/magic.dump1
	local verify_magic

	init_zram
	zram_dev_id=$(create_zram_dev)
	set_zram_dev "$zram_dev_id" 512M

	local ubdev=uring0 ufile=/dev/zram$zram_dev_id

	local -A method_bdev_uring_create_0=(
		["filename"]=$ufile
		["name"]=$ubdev
	)

	# Add extra malloc bdev
	local mbdev=malloc0 mbdev_b=1048576 mbdev_bs=512

	local -A method_bdev_malloc_create_0=(
		["name"]=$mbdev
		["num_blocks"]=$mbdev_b
		["block_size"]=$mbdev_bs
	)

	magic=$(gen_bytes $((mbdev_bs * 2)))
	echo "$magic" > "$magic_file0"

	# Inflate the magic file to fill up entire zram of 512MB.
	"${DD_APP[@]}" \
		--if=/dev/zero \
		--of="$magic_file0" \
		--oflag=append \
		--bs=$((mbdev_b * mbdev_bs - ${#magic} - 1)) \
		--count=1

	# Copy magic file to uring bdev
	"${DD_APP[@]}" \
		--if="$magic_file0" \
		--ob="$ubdev" \
		--json <(gen_conf)

	# Copy the whole uring bdev back to a file
	"${DD_APP[@]}" \
		--ib="$ubdev" \
		--of="$magic_file1" \
		--json <(gen_conf)

	# Verify integrity of each copy
	read -rn${#magic} verify_magic < "$magic_file1"
	[[ $verify_magic == "$magic" ]]

	read -rn${#magic} verify_magic < "/dev/zram$zram_dev_id"
	[[ $verify_magic == "$magic" ]]

	diff -q "$magic_file0" "$magic_file1"

	# Copy cotents of uring bdev to malloc bdev
	"${DD_APP[@]}" \
		--ib="$ubdev" \
		--ob="$mbdev" \
		--json <(gen_conf)

	# HACK: small trick to utilize bdev_uring_delete and keep spdk_dd happy -
	# read/write from 0-length files.

	local -A method_bdev_uring_delete_0=(
		["name"]="$ubdev"
	)

	"${DD_APP[@]}" \
		--if=<(:) \
		--of=<(:) \
		--json <(gen_conf)

	# Now try to copy to uring bdev which is explicitly deleted. We expect it
	# to fail.

	NOT "${DD_APP[@]}" \
		--ib="$ubdev" \
		--of=<(:) \
		--json <(gen_conf)

	remove_zram_dev "$zram_dev_id"
	rm -f "$magic_file0" "$magic_file1"
}

run_test "dd_uring_copy" uring_zram_copy