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....@redhat.com> > Signed-off-by: Uday Shankar <ushan...@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