diff mbox series

[V2] tests/throtl: add a new test 006

Message ID 20250304151858.3795301-1-ming.lei@redhat.com (mailing list archive)
State New
Headers show
Series [V2] tests/throtl: add a new test 006 | expand

Checks

Context Check Description
shin/vmtest-for-next-PR fail merge-conflict

Commit Message

Ming Lei March 4, 2025, 3:18 p.m. UTC
Add test for covering prioritized meta IO when throttling, regression
test for commit 29390bb5661d ("blk-throttle: support prioritized processing
of metadata").

Cc: Yu Kuai <yukuai1@huaweicloud.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
V2:
	- add ext4 jbd2 task into the cgroup(Kuai)
	- use 4M size IO(Kuai)

 tests/throtl/006     | 62 ++++++++++++++++++++++++++++++++++++++++++++
 tests/throtl/006.out |  4 +++
 tests/throtl/rc      | 19 ++++++++++++++
 3 files changed, 85 insertions(+)
 create mode 100755 tests/throtl/006
 create mode 100644 tests/throtl/006.out

Comments

Yu Kuai March 5, 2025, 2:51 a.m. UTC | #1
Hi,

在 2025/03/04 23:18, Ming Lei 写道:
> Add test for covering prioritized meta IO when throttling, regression
> test for commit 29390bb5661d ("blk-throttle: support prioritized processing
> of metadata").
> 
> Cc: Yu Kuai <yukuai1@huaweicloud.com>
> Signed-off-by: Ming Lei <ming.lei@redhat.com>
> ---
> V2:
> 	- add ext4 jbd2 task into the cgroup(Kuai)
> 	- use 4M size IO(Kuai)
> 
>   tests/throtl/006     | 62 ++++++++++++++++++++++++++++++++++++++++++++
>   tests/throtl/006.out |  4 +++
>   tests/throtl/rc      | 19 ++++++++++++++
>   3 files changed, 85 insertions(+)
>   create mode 100755 tests/throtl/006
>   create mode 100644 tests/throtl/006.out
> 

LGTM, just one nit below:

> diff --git a/tests/throtl/006 b/tests/throtl/006
> new file mode 100755
> index 0000000..23b30dc
> --- /dev/null
> +++ b/tests/throtl/006
> @@ -0,0 +1,62 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-3.0+
> +# Copyright (C) 2025 Ming Lei
> +#
> +# Test prioritized meta IO when IO throttling, regression test for
> +# commit 29390bb5661d ("blk-throttle: support prioritized processing of metadata")
> +
> +. tests/throtl/rc
> +
> +DESCRIPTION="test if meta IO has higher priority than data IO"
> +QUICK=1
> +
> +requires() {
> +	_have_program mkfs.ext4

Perhaps also add
_have_kernel_option EXT4_FS

feel free to add:
Reviewed-by: Yu Kuai <yukuai3@huawei.com>

> +}
> +
> +test_meta_io() {
> +	local path="$1"
> +	local start_time
> +	local end_time
> +	local elapsed
> +
> +	start_time=$(date +%s.%N)
> +	mkdir "${path}"/xxx
> +	touch "${path}"/xxx/1
> +	sync "${path}"/xxx
> +
> +	end_time=$(date +%s.%N)
> +	elapsed=$(echo "$end_time - $start_time" | bc)
> +	printf "%.0f\n" "$elapsed"
> +}
> +
> +test() {
> +	echo "Running ${TEST_NAME}"
> +
> +	if ! _set_up_throtl memory_backed=1; then
> +		return 1;
> +	fi
> +
> +	mkdir -p "${TMPDIR}/mnt"
> +	mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -F "/dev/${THROTL_DEV}" >> "$FULL" 2>&1
> +	mount "/dev/${THROTL_DEV}" "${TMPDIR}/mnt" >> "$FULL" 2>&1
> +
> +	_throtl_set_limits wbps=$((1024 * 1024))
> +	{
> +		local jbd2_pid
> +
> +		jbd2_pid=$(ps -eo pid,comm | pgrep -f "jbd2/${THROTL_DEV}" | awk '{print $1}')
> +		echo "$BASHPID" > "$CGROUP2_DIR/$THROTL_DIR/cgroup.procs"
> +		echo "$jbd2_pid" > "$CGROUP2_DIR/$THROTL_DIR/cgroup.procs"
> +		_throtl_issue_fs_io  "${TMPDIR}/mnt/test.img" write 4M 1 &
> +		sleep 2
> +		test_meta_io "${TMPDIR}/mnt"
> +		wait
> +	} &
> +	wait $!
> +
> +	umount "${TMPDIR}/mnt" || return $?
> +	_throtl_remove_limits
> +	_clean_up_throtl
> +	echo "Test complete"
> +}
> diff --git a/tests/throtl/006.out b/tests/throtl/006.out
> new file mode 100644
> index 0000000..8c3d176
> --- /dev/null
> +++ b/tests/throtl/006.out
> @@ -0,0 +1,4 @@
> +Running throtl/006
> +0
> +4
> +Test complete
> diff --git a/tests/throtl/rc b/tests/throtl/rc
> index df54cb9..327084b 100644
> --- a/tests/throtl/rc
> +++ b/tests/throtl/rc
> @@ -75,6 +75,25 @@ _throtl_get_max_io_size() {
>   	cat "/sys/block/$THROTL_DEV/queue/max_sectors_kb"
>   }
>   
> +_throtl_issue_fs_io() {
> +	local path=$1
> +	local start_time
> +	local end_time
> +	local elapsed
> +
> +	start_time=$(date +%s.%N)
> +
> +	if [ "$2" == "read" ]; then
> +		dd if="${path}" of=/dev/null bs="$3" count="$4" iflag=direct status=none
> +	elif [ "$2" == "write" ]; then
> +		dd of="${path}" if=/dev/zero bs="$3" count="$4" oflag=direct conv=fdatasync status=none
> +	fi
> +
> +	end_time=$(date +%s.%N)
> +	elapsed=$(echo "$end_time - $start_time" | bc)
> +	printf "%.0f\n" "$elapsed"
> +}
> +
>   _throtl_issue_io() {
>   	local start_time
>   	local end_time
>
Shin'ichiro Kawasaki March 5, 2025, 1:01 p.m. UTC | #2
On Mar 05, 2025 / 10:51, Yu Kuai wrote:
> Hi,
> 
> 在 2025/03/04 23:18, Ming Lei 写道:
> > Add test for covering prioritized meta IO when throttling, regression
> > test for commit 29390bb5661d ("blk-throttle: support prioritized processing
> > of metadata").

Thank you Ming for this v2 patch. I reverted the commit 29390bb5661d from the
kernel v6.14-rc5, and confirmed the test case fails.

> > 
> > Cc: Yu Kuai <yukuai1@huaweicloud.com>
> > Signed-off-by: Ming Lei <ming.lei@redhat.com>
> > ---
> > V2:
> > 	- add ext4 jbd2 task into the cgroup(Kuai)
> > 	- use 4M size IO(Kuai)
> > 
> >   tests/throtl/006     | 62 ++++++++++++++++++++++++++++++++++++++++++++
> >   tests/throtl/006.out |  4 +++
> >   tests/throtl/rc      | 19 ++++++++++++++
> >   3 files changed, 85 insertions(+)
> >   create mode 100755 tests/throtl/006
> >   create mode 100644 tests/throtl/006.out
> > 
> 
> LGTM, just one nit below:
> 
> > diff --git a/tests/throtl/006 b/tests/throtl/006
> > new file mode 100755
> > index 0000000..23b30dc
> > --- /dev/null
> > +++ b/tests/throtl/006
> > @@ -0,0 +1,62 @@
> > +#!/bin/bash
> > +# SPDX-License-Identifier: GPL-3.0+
> > +# Copyright (C) 2025 Ming Lei
> > +#
> > +# Test prioritized meta IO when IO throttling, regression test for
> > +# commit 29390bb5661d ("blk-throttle: support prioritized processing of metadata")
> > +
> > +. tests/throtl/rc
> > +
> > +DESCRIPTION="test if meta IO has higher priority than data IO"
> > +QUICK=1
> > +
> > +requires() {
> > +	_have_program mkfs.ext4
> 
> Perhaps also add
> _have_kernel_option EXT4_FS

That's a good improvement. "_have_driver ext4" does the same check and is a bit
shorter. So I folded it in.

> 
> feel free to add:
> Reviewed-by: Yu Kuai <yukuai3@huawei.com>

FYI, I applied the patch, folding in my nit comments for the v1 patch also.

Thanks!
diff mbox series

Patch

diff --git a/tests/throtl/006 b/tests/throtl/006
new file mode 100755
index 0000000..23b30dc
--- /dev/null
+++ b/tests/throtl/006
@@ -0,0 +1,62 @@ 
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2025 Ming Lei
+#
+# Test prioritized meta IO when IO throttling, regression test for
+# commit 29390bb5661d ("blk-throttle: support prioritized processing of metadata")
+
+. tests/throtl/rc
+
+DESCRIPTION="test if meta IO has higher priority than data IO"
+QUICK=1
+
+requires() {
+	_have_program mkfs.ext4
+}
+
+test_meta_io() {
+	local path="$1"
+	local start_time
+	local end_time
+	local elapsed
+
+	start_time=$(date +%s.%N)
+	mkdir "${path}"/xxx
+	touch "${path}"/xxx/1
+	sync "${path}"/xxx
+
+	end_time=$(date +%s.%N)
+	elapsed=$(echo "$end_time - $start_time" | bc)
+	printf "%.0f\n" "$elapsed"
+}
+
+test() {
+	echo "Running ${TEST_NAME}"
+
+	if ! _set_up_throtl memory_backed=1; then
+		return 1;
+	fi
+
+	mkdir -p "${TMPDIR}/mnt"
+	mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -F "/dev/${THROTL_DEV}" >> "$FULL" 2>&1
+	mount "/dev/${THROTL_DEV}" "${TMPDIR}/mnt" >> "$FULL" 2>&1
+
+	_throtl_set_limits wbps=$((1024 * 1024))
+	{
+		local jbd2_pid
+
+		jbd2_pid=$(ps -eo pid,comm | pgrep -f "jbd2/${THROTL_DEV}" | awk '{print $1}')
+		echo "$BASHPID" > "$CGROUP2_DIR/$THROTL_DIR/cgroup.procs"
+		echo "$jbd2_pid" > "$CGROUP2_DIR/$THROTL_DIR/cgroup.procs"
+		_throtl_issue_fs_io  "${TMPDIR}/mnt/test.img" write 4M 1 &
+		sleep 2
+		test_meta_io "${TMPDIR}/mnt"
+		wait
+	} &
+	wait $!
+
+	umount "${TMPDIR}/mnt" || return $?
+	_throtl_remove_limits
+	_clean_up_throtl
+	echo "Test complete"
+}
diff --git a/tests/throtl/006.out b/tests/throtl/006.out
new file mode 100644
index 0000000..8c3d176
--- /dev/null
+++ b/tests/throtl/006.out
@@ -0,0 +1,4 @@ 
+Running throtl/006
+0
+4
+Test complete
diff --git a/tests/throtl/rc b/tests/throtl/rc
index df54cb9..327084b 100644
--- a/tests/throtl/rc
+++ b/tests/throtl/rc
@@ -75,6 +75,25 @@  _throtl_get_max_io_size() {
 	cat "/sys/block/$THROTL_DEV/queue/max_sectors_kb"
 }
 
+_throtl_issue_fs_io() {
+	local path=$1
+	local start_time
+	local end_time
+	local elapsed
+
+	start_time=$(date +%s.%N)
+
+	if [ "$2" == "read" ]; then
+		dd if="${path}" of=/dev/null bs="$3" count="$4" iflag=direct status=none
+	elif [ "$2" == "write" ]; then
+		dd of="${path}" if=/dev/zero bs="$3" count="$4" oflag=direct conv=fdatasync status=none
+	fi
+
+	end_time=$(date +%s.%N)
+	elapsed=$(echo "$end_time - $start_time" | bc)
+	printf "%.0f\n" "$elapsed"
+}
+
 _throtl_issue_io() {
 	local start_time
 	local end_time