All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Uday Shankar <ushankar@purestorage.com>
Cc: Jens Axboe <axboe@kernel.dk>,
	Caleb Sander Mateos <csander@purestorage.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Shuah Khan <shuah@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
	linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH v8 8/9] selftests: ublk: add stress test for per io daemons
Date: Fri, 30 May 2025 10:13:00 +0800	[thread overview]
Message-ID: <aDkULJG9zwqCWqTk@fedora> (raw)
In-Reply-To: <20250529-ublk_task_per_io-v8-8-e9d3b119336a@purestorage.com>

On Thu, May 29, 2025 at 05:47:17PM -0600, Uday Shankar wrote:
> Add a new test_stress_06 for the per io daemons feature. This is just a
> copy of test_stress_01 with the per_io_tasks flag added, with varying
> amounts of nthreads. This test is able to reproduce a panic which was
> caught manually during development [1]; in the current version of this
> patch set, it passes.
> 
> Note that this commit also makes all stress tests using the
> run_io_and_remove helper more stressful by additionally exercising the
> batch submit (queue_rqs) path.
> 
> [1] https://lore.kernel.org/linux-block/aDgwGoGCEpwd1mFY@fedora/
> 
> Suggested-by: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Uday Shankar <ushankar@purestorage.com>
> ---
>  tools/testing/selftests/ublk/Makefile          |  1 +
>  tools/testing/selftests/ublk/test_common.sh    |  5 ++++
>  tools/testing/selftests/ublk/test_stress_06.sh | 36 ++++++++++++++++++++++++++
>  3 files changed, 42 insertions(+)
> 
> diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftests/ublk/Makefile
> index 5d7f4ecfb81612f919a89eb442f948d6bfafe225..1fb1a95d452c2e9a7ed78cb8b12be2b759074e11 100644
> --- a/tools/testing/selftests/ublk/Makefile
> +++ b/tools/testing/selftests/ublk/Makefile
> @@ -38,6 +38,7 @@ TEST_PROGS += test_stress_02.sh
>  TEST_PROGS += test_stress_03.sh
>  TEST_PROGS += test_stress_04.sh
>  TEST_PROGS += test_stress_05.sh
> +TEST_PROGS += test_stress_06.sh
>  
>  TEST_GEN_PROGS_EXTENDED = kublk
>  
> diff --git a/tools/testing/selftests/ublk/test_common.sh b/tools/testing/selftests/ublk/test_common.sh
> index 0145569ee7e9a45b41898c2c789842b4c8380f18..8a4dbd09feb0a885ec7539f1a285ed6f437fe3ab 100755
> --- a/tools/testing/selftests/ublk/test_common.sh
> +++ b/tools/testing/selftests/ublk/test_common.sh
> @@ -278,6 +278,11 @@ __run_io_and_remove()
>  	fio --name=job1 --filename=/dev/ublkb"${dev_id}" --ioengine=libaio \
>  		--rw=randrw --norandommap --iodepth=256 --size="${size}" --numjobs="$(nproc)" \
>  		--runtime=20 --time_based > /dev/null 2>&1 &
> +	fio --name=batchjob --filename=/dev/ublkb"${dev_id}" --ioengine=io_uring \
> +		--rw=randrw --norandommap --iodepth=256 --size="${size}" \
> +		--numjobs="$(nproc)" --runtime=20 --time_based \
> +		--iodepth_batch_submit=32 --iodepth_batch_complete_min=32 \
> +		--force_async=7 > /dev/null 2>&1 &

I think we can replace job1 with the batchjob simply.

>  	sleep 2
>  	if [ "${kill_server}" = "yes" ]; then
>  		local state
> diff --git a/tools/testing/selftests/ublk/test_stress_06.sh b/tools/testing/selftests/ublk/test_stress_06.sh
> new file mode 100755
> index 0000000000000000000000000000000000000000..3aee8521032e3962b8b070cda8eb295b01e7b124
> --- /dev/null
> +++ b/tools/testing/selftests/ublk/test_stress_06.sh
> @@ -0,0 +1,36 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
> +TID="stress_06"
> +ERR_CODE=0
> +
> +ublk_io_and_remove()
> +{
> +	run_io_and_remove "$@"
> +	ERR_CODE=$?
> +	if [ ${ERR_CODE} -ne 0 ]; then
> +		echo "$TID failure: $*"
> +		_show_result $TID $ERR_CODE
> +	fi
> +}
> +
> +if ! _have_program fio; then
> +	exit "$UBLK_SKIP_CODE"
> +fi
> +
> +_prep_test "stress" "run IO and remove device with per_io_tasks"
> +
> +_create_backfile 0 256M
> +_create_backfile 1 128M
> +_create_backfile 2 128M
> +
> +ublk_io_and_remove 8G -t null -q 4 --nthreads 5 --per_io_tasks &
> +ublk_io_and_remove 256M -t loop -q 4 --nthreads 3 --per_io_tasks \
> +        "${UBLK_BACKFILES[0]}" &
> +ublk_io_and_remove 256M -t stripe -q 4 --nthreads 4 --per_io_tasks \
> +        "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
> +wait

We plan to reuse the test for blktest or liburing test, so feature check
is needed.

But this patch shouldn't be a blocker, and it can be one follow-up with
something like the following with above batchjob change, then generic
feature can be covered completely wrt. stress test.


diff --git a/tools/testing/selftests/ublk/test_stress_03.sh b/tools/testing/selftests/ublk/test_stress_03.sh
index 7d728ce50774..f5908c1357d2 100755
--- a/tools/testing/selftests/ublk/test_stress_03.sh
+++ b/tools/testing/selftests/ublk/test_stress_03.sh
@@ -41,5 +41,13 @@ if _have_feature "AUTO_BUF_REG"; then
 fi
 wait
 
+if _have_feature "PER_IO_DAEMON"; then
+	ublk_io_and_remove 8G -t null -q 4 --nthreads 8 --per_io_tasks &
+	ublk_io_and_remove 256M -t loop -q 4 --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[0]}" &
+	ublk_io_and_remove 256M -t stripe -q 4 --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
+	ublk_io_and_remove 8G -t null -q 4 -z --nthreads 8 --per_io_tasks &
+fi
+wait
+
 _cleanup_test "stress"
 _show_result $TID $ERR_CODE
diff --git a/tools/testing/selftests/ublk/test_stress_04.sh b/tools/testing/selftests/ublk/test_stress_04.sh
index 9bcfa64ea1f0..be3ecdbe9bb4 100755
--- a/tools/testing/selftests/ublk/test_stress_04.sh
+++ b/tools/testing/selftests/ublk/test_stress_04.sh
@@ -38,6 +38,13 @@ if _have_feature "AUTO_BUF_REG"; then
 	ublk_io_and_kill_daemon 256M -t stripe -q 4 --auto_zc "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
 	ublk_io_and_kill_daemon 8G -t null -q 4 -z --auto_zc --auto_zc_fallback &
 fi
+
+if _have_feature "PER_IO_DAEMON"; then
+	ublk_io_and_kill_daemon 8G -t null -q 4 --nthreads 8 --per_io_tasks &
+	ublk_io_and_kill_daemon 256M -t loop -q 4 --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[0]}" &
+	ublk_io_and_kill_daemon 256M -t stripe -q 4 --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
+	ublk_io_and_kill_daemon 8G -t null -q 4 -z --nthreads 8 --per_io_tasks &
+fi
 wait
 
 _cleanup_test "stress"
diff --git a/tools/testing/selftests/ublk/test_stress_05.sh b/tools/testing/selftests/ublk/test_stress_05.sh
index bcfc904cefc6..5634b1db1ded 100755
--- a/tools/testing/selftests/ublk/test_stress_05.sh
+++ b/tools/testing/selftests/ublk/test_stress_05.sh
@@ -69,5 +69,12 @@ if _have_feature "AUTO_BUF_REG"; then
 	done
 fi
 
+if _have_feature "PER_IO_DAEMON"; then
+	ublk_io_and_remove 8G -t null -q 4 --nthreads 8 --per_io_tasks -r 1 -i "$reissue" &
+	ublk_io_and_remove 256M -t loop -q 4 --nthreads 8 --per_io_tasks -r 1 -i "$reissue" "${UBLK_BACKFILES[0]}" &
+	ublk_io_and_remove 8G -t null -q 4 -z --nthreads 8 --per_io_tasks -r 1 -i "$reissue"  &
+fi
+wait
+
 _cleanup_test "stress"
 _show_result $TID $ERR_CODE


Thanks,
Ming


  reply	other threads:[~2025-05-30  2:13 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-29 23:47 [PATCH v8 0/9] ublk: decouple server threads from ublk_queues/hctxs Uday Shankar
2025-05-29 23:47 ` [PATCH v8 1/9] ublk: have a per-io daemon instead of a per-queue daemon Uday Shankar
2025-05-30  1:33   ` Jens Axboe
2025-05-30  2:05   ` Ming Lei
2025-05-29 23:47 ` [PATCH v8 2/9] selftests: ublk: kublk: plumb q_id in io_uring user_data Uday Shankar
2025-05-29 23:47 ` [PATCH v8 3/9] selftests: ublk: kublk: tie sqe allocation to io instead of queue Uday Shankar
2025-05-29 23:47 ` [PATCH v8 4/9] selftests: ublk: kublk: lift queue initialization out of thread Uday Shankar
2025-05-29 23:47 ` [PATCH v8 5/9] selftests: ublk: kublk: move per-thread data out of ublk_queue Uday Shankar
2025-05-29 23:47 ` [PATCH v8 6/9] selftests: ublk: kublk: decouple ublk_queues from ublk server threads Uday Shankar
2025-05-29 23:47 ` [PATCH v8 7/9] selftests: ublk: add functional test for per io daemons Uday Shankar
2025-05-29 23:47 ` [PATCH v8 8/9] selftests: ublk: add stress " Uday Shankar
2025-05-30  2:13   ` Ming Lei [this message]
2025-05-29 23:47 ` [PATCH v8 9/9] Documentation: ublk: document UBLK_F_PER_IO_DAEMON Uday Shankar
2025-05-30 13:07 ` [PATCH v8 0/9] ublk: decouple server threads from ublk_queues/hctxs Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aDkULJG9zwqCWqTk@fedora \
    --to=ming.lei@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=corbet@lwn.net \
    --cc=csander@purestorage.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=shuah@kernel.org \
    --cc=ushankar@purestorage.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.