* [PATCH 0/3] xfstests: add IO_URING test cases @ 2020-09-16 17:14 Zorro Lang 2020-09-16 17:14 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Zorro Lang @ 2020-09-16 17:14 UTC (permalink / raw) To: fstests; +Cc: io-uring This patchset bases on https://patchwork.kernel.org/cover/11769847/, which makes xfstests fsstress and fsx supports IO_URING. The io_uring IOs in fsstress will be run automatically when fsstress get running. But fsx need a special option '-U' to run IO_URING read/write, so add two new cases to xfstests to do fsx buffered and direct IO IO_URING test. [1/3] new helper to require io_uring feature [2/3] fsx buffered IO io_uring test [3/3] fsx direct IO io_uring test And the [2/3] just found an io_uring regression bug (need LVM TEST_DEV): https://bugzilla.kernel.org/show_bug.cgi?id=209243 Feel free to tell me, if you have more suggestions to test io_uring on filesystem. Thanks, Zorro ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] src/feature: add IO_URING feature checking 2020-09-16 17:14 [PATCH 0/3] xfstests: add IO_URING test cases Zorro Lang @ 2020-09-16 17:14 ` Zorro Lang 2020-10-02 18:19 ` Brian Foster 2020-09-16 17:14 ` [PATCH 2/3] generic: fsx IO_URING soak tests Zorro Lang 2020-09-16 17:14 ` [PATCH 3/3] generic: IO_URING direct IO fsx test Zorro Lang 2 siblings, 1 reply; 11+ messages in thread From: Zorro Lang @ 2020-09-16 17:14 UTC (permalink / raw) To: fstests; +Cc: io-uring IO_URING is a new feature for GNU/Linux system, if someone case of xfstests tests this feature, better to check if current system supports it, or need _notrun. Signed-off-by: Zorro Lang <[email protected]> --- src/Makefile | 4 ++++ src/feature.c | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index 643c1916..f1422c5c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -65,6 +65,10 @@ SUBDIRS += aio-dio-regress LLDLIBS += -laio endif +ifeq ($(HAVE_URING), true) +LLDLIBS += -luring +endif + CFILES = $(TARGETS:=.c) LDIRT = $(TARGETS) fssum diff --git a/src/feature.c b/src/feature.c index a7eb7595..df550cf6 100644 --- a/src/feature.c +++ b/src/feature.c @@ -19,6 +19,7 @@ * * Test for machine features * -A test whether AIO syscalls are available + * -R test whether IO_URING syscalls are available * -o report a number of online cpus * -s report pagesize * -w report bits per long @@ -39,6 +40,10 @@ #include <libaio.h> #endif +#ifdef HAVE_LIBURING_H +#include <liburing.h> +#endif + #ifndef USRQUOTA #define USRQUOTA 0 #endif @@ -59,7 +64,7 @@ usage(void) fprintf(stderr, "Usage: feature [-v] -<q|u|g|p|U|G|P> <filesystem>\n"); fprintf(stderr, " feature [-v] -c <file>\n"); fprintf(stderr, " feature [-v] -t <file>\n"); - fprintf(stderr, " feature -A | -o | -s | -w\n"); + fprintf(stderr, " feature -A | -R | -o | -s | -w\n"); exit(1); } @@ -215,6 +220,29 @@ check_aio_support(void) #endif } +static int +check_uring_support(void) +{ +#ifdef HAVE_LIBURING_H + struct io_uring ring; + int err; + + err = io_uring_queue_init(1, &ring, 0); + if (err == 0) + return 0; + + if (err == -ENOSYS) /* CONFIG_IO_URING=n */ + return 1; + + fprintf(stderr, "unexpected error from io_uring_queue_init(): %s\n", + strerror(-err)); + return 2; +#else + /* liburing is unavailable, assume IO_URING is unsupported */ + return 1; +#endif +} + int main(int argc, char **argv) @@ -228,6 +256,7 @@ main(int argc, char **argv) int pflag = 0; int Pflag = 0; int qflag = 0; + int Rflag = 0; int sflag = 0; int uflag = 0; int Uflag = 0; @@ -235,7 +264,7 @@ main(int argc, char **argv) int oflag = 0; char *fs = NULL; - while ((c = getopt(argc, argv, "ActgGopPqsuUvw")) != EOF) { + while ((c = getopt(argc, argv, "ActgGopPqRsuUvw")) != EOF) { switch (c) { case 'A': Aflag++; @@ -264,6 +293,9 @@ main(int argc, char **argv) case 'q': qflag++; break; + case 'R': + Rflag++; + break; case 's': sflag++; break; @@ -289,7 +321,7 @@ main(int argc, char **argv) if (optind != argc-1) /* need a device */ usage(); fs = argv[argc-1]; - } else if (Aflag || wflag || sflag || oflag) { + } else if (Aflag || Rflag || wflag || sflag || oflag) { if (optind != argc) usage(); } else @@ -317,6 +349,9 @@ main(int argc, char **argv) if (Aflag) return(check_aio_support()); + if (Rflag) + return(check_uring_support()); + if (sflag) { printf("%d\n", getpagesize()); exit(0); -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] src/feature: add IO_URING feature checking 2020-09-16 17:14 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang @ 2020-10-02 18:19 ` Brian Foster 0 siblings, 0 replies; 11+ messages in thread From: Brian Foster @ 2020-10-02 18:19 UTC (permalink / raw) To: Zorro Lang; +Cc: fstests, io-uring On Thu, Sep 17, 2020 at 01:14:41AM +0800, Zorro Lang wrote: > IO_URING is a new feature for GNU/Linux system, if someone case of > xfstests tests this feature, better to check if current system > supports it, or need _notrun. > > Signed-off-by: Zorro Lang <[email protected]> > --- Reviewed-by: Brian Foster <[email protected]> > src/Makefile | 4 ++++ > src/feature.c | 41 ++++++++++++++++++++++++++++++++++++++--- > 2 files changed, 42 insertions(+), 3 deletions(-) > > diff --git a/src/Makefile b/src/Makefile > index 643c1916..f1422c5c 100644 > --- a/src/Makefile > +++ b/src/Makefile > @@ -65,6 +65,10 @@ SUBDIRS += aio-dio-regress > LLDLIBS += -laio > endif > > +ifeq ($(HAVE_URING), true) > +LLDLIBS += -luring > +endif > + > CFILES = $(TARGETS:=.c) > LDIRT = $(TARGETS) fssum > > diff --git a/src/feature.c b/src/feature.c > index a7eb7595..df550cf6 100644 > --- a/src/feature.c > +++ b/src/feature.c > @@ -19,6 +19,7 @@ > * > * Test for machine features > * -A test whether AIO syscalls are available > + * -R test whether IO_URING syscalls are available > * -o report a number of online cpus > * -s report pagesize > * -w report bits per long > @@ -39,6 +40,10 @@ > #include <libaio.h> > #endif > > +#ifdef HAVE_LIBURING_H > +#include <liburing.h> > +#endif > + > #ifndef USRQUOTA > #define USRQUOTA 0 > #endif > @@ -59,7 +64,7 @@ usage(void) > fprintf(stderr, "Usage: feature [-v] -<q|u|g|p|U|G|P> <filesystem>\n"); > fprintf(stderr, " feature [-v] -c <file>\n"); > fprintf(stderr, " feature [-v] -t <file>\n"); > - fprintf(stderr, " feature -A | -o | -s | -w\n"); > + fprintf(stderr, " feature -A | -R | -o | -s | -w\n"); > exit(1); > } > > @@ -215,6 +220,29 @@ check_aio_support(void) > #endif > } > > +static int > +check_uring_support(void) > +{ > +#ifdef HAVE_LIBURING_H > + struct io_uring ring; > + int err; > + > + err = io_uring_queue_init(1, &ring, 0); > + if (err == 0) > + return 0; > + > + if (err == -ENOSYS) /* CONFIG_IO_URING=n */ > + return 1; > + > + fprintf(stderr, "unexpected error from io_uring_queue_init(): %s\n", > + strerror(-err)); > + return 2; > +#else > + /* liburing is unavailable, assume IO_URING is unsupported */ > + return 1; > +#endif > +} > + > > int > main(int argc, char **argv) > @@ -228,6 +256,7 @@ main(int argc, char **argv) > int pflag = 0; > int Pflag = 0; > int qflag = 0; > + int Rflag = 0; > int sflag = 0; > int uflag = 0; > int Uflag = 0; > @@ -235,7 +264,7 @@ main(int argc, char **argv) > int oflag = 0; > char *fs = NULL; > > - while ((c = getopt(argc, argv, "ActgGopPqsuUvw")) != EOF) { > + while ((c = getopt(argc, argv, "ActgGopPqRsuUvw")) != EOF) { > switch (c) { > case 'A': > Aflag++; > @@ -264,6 +293,9 @@ main(int argc, char **argv) > case 'q': > qflag++; > break; > + case 'R': > + Rflag++; > + break; > case 's': > sflag++; > break; > @@ -289,7 +321,7 @@ main(int argc, char **argv) > if (optind != argc-1) /* need a device */ > usage(); > fs = argv[argc-1]; > - } else if (Aflag || wflag || sflag || oflag) { > + } else if (Aflag || Rflag || wflag || sflag || oflag) { > if (optind != argc) > usage(); > } else > @@ -317,6 +349,9 @@ main(int argc, char **argv) > if (Aflag) > return(check_aio_support()); > > + if (Rflag) > + return(check_uring_support()); > + > if (sflag) { > printf("%d\n", getpagesize()); > exit(0); > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/3] generic: fsx IO_URING soak tests 2020-09-16 17:14 [PATCH 0/3] xfstests: add IO_URING test cases Zorro Lang 2020-09-16 17:14 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang @ 2020-09-16 17:14 ` Zorro Lang 2020-10-02 18:20 ` Brian Foster 2020-09-16 17:14 ` [PATCH 3/3] generic: IO_URING direct IO fsx test Zorro Lang 2 siblings, 1 reply; 11+ messages in thread From: Zorro Lang @ 2020-09-16 17:14 UTC (permalink / raw) To: fstests; +Cc: io-uring After fsx supports IO_URING read/write, add a test to do IO_URING soak test of fsx. Signed-off-by: Zorro Lang <[email protected]> --- common/rc | 16 ++++++++++++ tests/generic/609 | 58 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/609.out | 2 ++ tests/generic/group | 1 + 4 files changed, 77 insertions(+) create mode 100755 tests/generic/609 create mode 100644 tests/generic/609.out diff --git a/common/rc b/common/rc index aa5a7409..b6b39eba 100644 --- a/common/rc +++ b/common/rc @@ -1984,6 +1984,22 @@ _require_aiodio() _require_odirect } +# this test requires that the kernel supports IO_URING +_require_io_uring() +{ + $here/src/feature -R + case $? in + 0) + ;; + 1) + _notrun "kernel does not support IO_URING" + ;; + *) + _fail "unexpected error testing for IO_URING support" + ;; + esac +} + # this test requires that a test program exists under src/ # $1 - command (require) # diff --git a/tests/generic/609 b/tests/generic/609 new file mode 100755 index 00000000..1d9b6fed --- /dev/null +++ b/tests/generic/609 @@ -0,0 +1,58 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2020 Red Hat Inc. All Rights Reserved. +# +# FS QA Test 609 +# +# IO_URING soak buffered fsx test +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here + +# Modify as appropriate. +_supported_fs generic +_supported_os Linux +_require_test +_require_io_uring + +# Run fsx for a million ops or more +nr_ops=$((100000 * TIME_FACTOR)) +op_sz=$((128000 * LOAD_FACTOR)) +file_sz=$((600000 * LOAD_FACTOR)) +fsx_file=$TEST_DIR/fsx.$seq + +fsx_args=(-S 0) +fsx_args+=(-U) +fsx_args+=(-q) +fsx_args+=(-N $nr_ops) +fsx_args+=(-p $((nr_ops / 100))) +fsx_args+=(-o $op_sz) +fsx_args+=(-l $file_sz) + +run_fsx "${fsx_args[@]}" | sed -e '/^fsx.*/d' + +# success, all done +echo "Silence is golden" +status=0 +exit diff --git a/tests/generic/609.out b/tests/generic/609.out new file mode 100644 index 00000000..0d75b384 --- /dev/null +++ b/tests/generic/609.out @@ -0,0 +1,2 @@ +QA output created by 609 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index aa969bcb..cf50f4a1 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -611,3 +611,4 @@ 606 auto attr quick dax 607 auto attr quick dax 608 auto attr quick dax +609 auto rw io_uring -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] generic: fsx IO_URING soak tests 2020-09-16 17:14 ` [PATCH 2/3] generic: fsx IO_URING soak tests Zorro Lang @ 2020-10-02 18:20 ` Brian Foster 0 siblings, 0 replies; 11+ messages in thread From: Brian Foster @ 2020-10-02 18:20 UTC (permalink / raw) To: Zorro Lang; +Cc: fstests, io-uring On Thu, Sep 17, 2020 at 01:14:42AM +0800, Zorro Lang wrote: > After fsx supports IO_URING read/write, add a test to do IO_URING > soak test of fsx. > > Signed-off-by: Zorro Lang <[email protected]> > --- > common/rc | 16 ++++++++++++ > tests/generic/609 | 58 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/609.out | 2 ++ > tests/generic/group | 1 + > 4 files changed, 77 insertions(+) > create mode 100755 tests/generic/609 > create mode 100644 tests/generic/609.out > ... > diff --git a/tests/generic/609 b/tests/generic/609 > new file mode 100755 > index 00000000..1d9b6fed > --- /dev/null > +++ b/tests/generic/609 > @@ -0,0 +1,58 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2020 Red Hat Inc. All Rights Reserved. > +# > +# FS QA Test 609 > +# > +# IO_URING soak buffered fsx test > +# > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# remove previous $seqres.full before test > +rm -f $seqres.full > + > +# real QA test starts here > + > +# Modify as appropriate. > +_supported_fs generic > +_supported_os Linux > +_require_test > +_require_io_uring > + > +# Run fsx for a million ops or more > +nr_ops=$((100000 * TIME_FACTOR)) The value used here doesn't match the comment. Though it looks like this is modeled after generic/512, which does specify 1m ops, but also isn't included in the auto group presumably due to the time required to run the test. Brian > +op_sz=$((128000 * LOAD_FACTOR)) > +file_sz=$((600000 * LOAD_FACTOR)) > +fsx_file=$TEST_DIR/fsx.$seq > + > +fsx_args=(-S 0) > +fsx_args+=(-U) > +fsx_args+=(-q) > +fsx_args+=(-N $nr_ops) > +fsx_args+=(-p $((nr_ops / 100))) > +fsx_args+=(-o $op_sz) > +fsx_args+=(-l $file_sz) > + > +run_fsx "${fsx_args[@]}" | sed -e '/^fsx.*/d' > + > +# success, all done > +echo "Silence is golden" > +status=0 > +exit > diff --git a/tests/generic/609.out b/tests/generic/609.out > new file mode 100644 > index 00000000..0d75b384 > --- /dev/null > +++ b/tests/generic/609.out > @@ -0,0 +1,2 @@ > +QA output created by 609 > +Silence is golden > diff --git a/tests/generic/group b/tests/generic/group > index aa969bcb..cf50f4a1 100644 > --- a/tests/generic/group > +++ b/tests/generic/group > @@ -611,3 +611,4 @@ > 606 auto attr quick dax > 607 auto attr quick dax > 608 auto attr quick dax > +609 auto rw io_uring > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/3] generic: IO_URING direct IO fsx test 2020-09-16 17:14 [PATCH 0/3] xfstests: add IO_URING test cases Zorro Lang 2020-09-16 17:14 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang 2020-09-16 17:14 ` [PATCH 2/3] generic: fsx IO_URING soak tests Zorro Lang @ 2020-09-16 17:14 ` Zorro Lang 2020-10-02 18:20 ` Brian Foster 2020-10-05 16:45 ` Darrick J. Wong 2 siblings, 2 replies; 11+ messages in thread From: Zorro Lang @ 2020-09-16 17:14 UTC (permalink / raw) To: fstests; +Cc: io-uring After fsx supports IO_URING read/write, add IO_URING direct IO fsx test with different read/write size and concurrent buffered IO. Signed-off-by: Zorro Lang <[email protected]> --- tests/generic/610 | 52 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/610.out | 7 ++++++ tests/generic/group | 1 + 3 files changed, 60 insertions(+) create mode 100755 tests/generic/610 create mode 100644 tests/generic/610.out diff --git a/tests/generic/610 b/tests/generic/610 new file mode 100755 index 00000000..fc3f4c2a --- /dev/null +++ b/tests/generic/610 @@ -0,0 +1,52 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2020 YOUR NAME HERE. All Rights Reserved. +# +# FS QA Test 610 +# +# IO_URING direct IO fsx test +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux +_require_test +_require_odirect +_require_io_uring + +psize=`$here/src/feature -s` +bsize=`_min_dio_alignment $TEST_DEV` +run_fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w BSIZE -Z -R -W +run_fsx -S 0 -U -N 20000 -o 8192 -l 600000 -r PSIZE -w BSIZE -Z -R -W +run_fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -R -W + +# change readbdy/writebdy to double page size +psize=$((psize * 2)) +run_fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w PSIZE -Z -R -W +run_fsx -S 0 -U -N 20000 -o 256000 -l 600000 -r PSIZE -w PSIZE -Z -R -W +run_fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -W + +# success, all done +status=0 +exit diff --git a/tests/generic/610.out b/tests/generic/610.out new file mode 100644 index 00000000..97ad41a3 --- /dev/null +++ b/tests/generic/610.out @@ -0,0 +1,7 @@ +QA output created by 610 +fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w BSIZE -Z -R -W +fsx -S 0 -U -N 20000 -o 8192 -l 600000 -r PSIZE -w BSIZE -Z -R -W +fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -R -W +fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w PSIZE -Z -R -W +fsx -S 0 -U -N 20000 -o 256000 -l 600000 -r PSIZE -w PSIZE -Z -R -W +fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -W diff --git a/tests/generic/group b/tests/generic/group index cf50f4a1..60280dc2 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -612,3 +612,4 @@ 607 auto attr quick dax 608 auto attr quick dax 609 auto rw io_uring +610 auto rw io_uring -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] generic: IO_URING direct IO fsx test 2020-09-16 17:14 ` [PATCH 3/3] generic: IO_URING direct IO fsx test Zorro Lang @ 2020-10-02 18:20 ` Brian Foster 2020-10-05 16:45 ` Darrick J. Wong 1 sibling, 0 replies; 11+ messages in thread From: Brian Foster @ 2020-10-02 18:20 UTC (permalink / raw) To: Zorro Lang; +Cc: fstests, io-uring On Thu, Sep 17, 2020 at 01:14:43AM +0800, Zorro Lang wrote: > After fsx supports IO_URING read/write, add IO_URING direct IO fsx > test with different read/write size and concurrent buffered IO. > > Signed-off-by: Zorro Lang <[email protected]> > --- > tests/generic/610 | 52 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/610.out | 7 ++++++ > tests/generic/group | 1 + > 3 files changed, 60 insertions(+) > create mode 100755 tests/generic/610 > create mode 100644 tests/generic/610.out > > diff --git a/tests/generic/610 b/tests/generic/610 > new file mode 100755 > index 00000000..fc3f4c2a > --- /dev/null > +++ b/tests/generic/610 > @@ -0,0 +1,52 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2020 YOUR NAME HERE. All Rights Reserved. The copyright needs fixing. > +# > +# FS QA Test 610 > +# > +# IO_URING direct IO fsx test > +# > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# remove previous $seqres.full before test > +rm -f $seqres.full > + > +# real QA test starts here > +_supported_fs generic > +_supported_os Linux > +_require_test > +_require_odirect > +_require_io_uring > + > +psize=`$here/src/feature -s` > +bsize=`_min_dio_alignment $TEST_DEV` > +run_fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 8192 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > + > +# change readbdy/writebdy to double page size > +psize=$((psize * 2)) > +run_fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 256000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -W > + Can you elaborate on why PSIZE/BSIZE are used where they are for the writebdy option? Also is -R intentionally dropped from the final test? Brian > +# success, all done > +status=0 > +exit > diff --git a/tests/generic/610.out b/tests/generic/610.out > new file mode 100644 > index 00000000..97ad41a3 > --- /dev/null > +++ b/tests/generic/610.out > @@ -0,0 +1,7 @@ > +QA output created by 610 > +fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 8192 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 256000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -W > diff --git a/tests/generic/group b/tests/generic/group > index cf50f4a1..60280dc2 100644 > --- a/tests/generic/group > +++ b/tests/generic/group > @@ -612,3 +612,4 @@ > 607 auto attr quick dax > 608 auto attr quick dax > 609 auto rw io_uring > +610 auto rw io_uring > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] generic: IO_URING direct IO fsx test 2020-09-16 17:14 ` [PATCH 3/3] generic: IO_URING direct IO fsx test Zorro Lang 2020-10-02 18:20 ` Brian Foster @ 2020-10-05 16:45 ` Darrick J. Wong 1 sibling, 0 replies; 11+ messages in thread From: Darrick J. Wong @ 2020-10-05 16:45 UTC (permalink / raw) To: Zorro Lang; +Cc: fstests, io-uring On Thu, Sep 17, 2020 at 01:14:43AM +0800, Zorro Lang wrote: > After fsx supports IO_URING read/write, add IO_URING direct IO fsx > test with different read/write size and concurrent buffered IO. > > Signed-off-by: Zorro Lang <[email protected]> Funny, I would have expected this to be a clone of generic/521, much like the previous test was a clone of g/522. I guess it's fine to test various fsx parameters, but in that case, is there a reason /not/ to have a long soak io_uring directio test? --D > --- > tests/generic/610 | 52 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/610.out | 7 ++++++ > tests/generic/group | 1 + > 3 files changed, 60 insertions(+) > create mode 100755 tests/generic/610 > create mode 100644 tests/generic/610.out > > diff --git a/tests/generic/610 b/tests/generic/610 > new file mode 100755 > index 00000000..fc3f4c2a > --- /dev/null > +++ b/tests/generic/610 > @@ -0,0 +1,52 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2020 YOUR NAME HERE. All Rights Reserved. > +# > +# FS QA Test 610 > +# > +# IO_URING direct IO fsx test > +# > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# remove previous $seqres.full before test > +rm -f $seqres.full > + > +# real QA test starts here > +_supported_fs generic > +_supported_os Linux > +_require_test > +_require_odirect > +_require_io_uring > + > +psize=`$here/src/feature -s` > +bsize=`_min_dio_alignment $TEST_DEV` > +run_fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 8192 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > + > +# change readbdy/writebdy to double page size > +psize=$((psize * 2)) > +run_fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 256000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +run_fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -W > + > +# success, all done > +status=0 > +exit > diff --git a/tests/generic/610.out b/tests/generic/610.out > new file mode 100644 > index 00000000..97ad41a3 > --- /dev/null > +++ b/tests/generic/610.out > @@ -0,0 +1,7 @@ > +QA output created by 610 > +fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 8192 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 256000 -l 600000 -r PSIZE -w PSIZE -Z -R -W > +fsx -S 0 -U -N 20000 -o 128000 -l 600000 -r PSIZE -w BSIZE -Z -W > diff --git a/tests/generic/group b/tests/generic/group > index cf50f4a1..60280dc2 100644 > --- a/tests/generic/group > +++ b/tests/generic/group > @@ -612,3 +612,4 @@ > 607 auto attr quick dax > 608 auto attr quick dax > 609 auto rw io_uring > +610 auto rw io_uring > -- > 2.20.1 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 0/3] xfstests: new io_uring fsx test @ 2020-09-16 13:11 Zorro Lang 2020-09-16 13:11 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang 0 siblings, 1 reply; 11+ messages in thread From: Zorro Lang @ 2020-09-16 13:11 UTC (permalink / raw) To: fstests; +Cc: io-uring This patchset bases on https://patchwork.kernel.org/cover/11769847/, which makes xfstests fsstress and fsx supports IO_URING. The io_uring IOs in fsstress will be run automatically when fsstress get running. But fsx need a special option '-U' to run IO_URING read/write, so add two new cases to xfstests to do fsx buffered and direct IO IO_URING test. [1/3] new helper to require io_uring feature [2/3] fsx buffered IO io_uring test [3/3] fsx direct IO io_uring test And the [2/3] just found an io_uring regression bug (need LVM TEST_DEV): https://bugzilla.kernel.org/show_bug.cgi?id=209243 Feel free to tell me, if you have more suggestions to test io_uring on filesystem. Thanks, Zorro ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] src/feature: add IO_URING feature checking 2020-09-16 13:11 [PATCH 0/3] xfstests: new io_uring " Zorro Lang @ 2020-09-16 13:11 ` Zorro Lang 0 siblings, 0 replies; 11+ messages in thread From: Zorro Lang @ 2020-09-16 13:11 UTC (permalink / raw) To: fstests; +Cc: io-uring IO_URING is a new feature for GNU/Linux system, if someone case of xfstests tests this feature, better to check if current system supports it, or need _notrun. Signed-off-by: Zorro Lang <[email protected]> --- src/Makefile | 4 ++++ src/feature.c | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index 643c1916..f1422c5c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -65,6 +65,10 @@ SUBDIRS += aio-dio-regress LLDLIBS += -laio endif +ifeq ($(HAVE_URING), true) +LLDLIBS += -luring +endif + CFILES = $(TARGETS:=.c) LDIRT = $(TARGETS) fssum diff --git a/src/feature.c b/src/feature.c index a7eb7595..df550cf6 100644 --- a/src/feature.c +++ b/src/feature.c @@ -19,6 +19,7 @@ * * Test for machine features * -A test whether AIO syscalls are available + * -R test whether IO_URING syscalls are available * -o report a number of online cpus * -s report pagesize * -w report bits per long @@ -39,6 +40,10 @@ #include <libaio.h> #endif +#ifdef HAVE_LIBURING_H +#include <liburing.h> +#endif + #ifndef USRQUOTA #define USRQUOTA 0 #endif @@ -59,7 +64,7 @@ usage(void) fprintf(stderr, "Usage: feature [-v] -<q|u|g|p|U|G|P> <filesystem>\n"); fprintf(stderr, " feature [-v] -c <file>\n"); fprintf(stderr, " feature [-v] -t <file>\n"); - fprintf(stderr, " feature -A | -o | -s | -w\n"); + fprintf(stderr, " feature -A | -R | -o | -s | -w\n"); exit(1); } @@ -215,6 +220,29 @@ check_aio_support(void) #endif } +static int +check_uring_support(void) +{ +#ifdef HAVE_LIBURING_H + struct io_uring ring; + int err; + + err = io_uring_queue_init(1, &ring, 0); + if (err == 0) + return 0; + + if (err == -ENOSYS) /* CONFIG_IO_URING=n */ + return 1; + + fprintf(stderr, "unexpected error from io_uring_queue_init(): %s\n", + strerror(-err)); + return 2; +#else + /* liburing is unavailable, assume IO_URING is unsupported */ + return 1; +#endif +} + int main(int argc, char **argv) @@ -228,6 +256,7 @@ main(int argc, char **argv) int pflag = 0; int Pflag = 0; int qflag = 0; + int Rflag = 0; int sflag = 0; int uflag = 0; int Uflag = 0; @@ -235,7 +264,7 @@ main(int argc, char **argv) int oflag = 0; char *fs = NULL; - while ((c = getopt(argc, argv, "ActgGopPqsuUvw")) != EOF) { + while ((c = getopt(argc, argv, "ActgGopPqRsuUvw")) != EOF) { switch (c) { case 'A': Aflag++; @@ -264,6 +293,9 @@ main(int argc, char **argv) case 'q': qflag++; break; + case 'R': + Rflag++; + break; case 's': sflag++; break; @@ -289,7 +321,7 @@ main(int argc, char **argv) if (optind != argc-1) /* need a device */ usage(); fs = argv[argc-1]; - } else if (Aflag || wflag || sflag || oflag) { + } else if (Aflag || Rflag || wflag || sflag || oflag) { if (optind != argc) usage(); } else @@ -317,6 +349,9 @@ main(int argc, char **argv) if (Aflag) return(check_aio_support()); + if (Rflag) + return(check_uring_support()); + if (sflag) { printf("%d\n", getpagesize()); exit(0); -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 0/3] xfstests: new io_uring fsx test @ 2020-09-16 12:30 Zorro Lang 2020-09-16 12:30 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang 0 siblings, 1 reply; 11+ messages in thread From: Zorro Lang @ 2020-09-16 12:30 UTC (permalink / raw) To: fstests; +Cc: io-uring This patchset bases on https://patchwork.kernel.org/cover/11769847/, which makes xfstests fsstress and fsx supports IO_URING. The io_uring IOs in fsstress will be run automatically when fsstress get running. But fsx need a special option '-U' to run IO_URING read/write, so add two new cases to xfstests to do fsx buffered and direct IO IO_URING test. [1/3] new helper to require io_uring feature [2/3] fsx buffered IO io_uring test [3/3] fsx direct IO io_uring test And the [2/3] just found an io_uring regression bug (need LVM TEST_DEV): https://bugzilla.kernel.org/show_bug.cgi?id=209243 Feel free to tell me, if you have more suggestions to test io_uring on filesystem. Thanks, Zorro ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] src/feature: add IO_URING feature checking 2020-09-16 12:30 [PATCH 0/3] xfstests: new io_uring fsx test Zorro Lang @ 2020-09-16 12:30 ` Zorro Lang 0 siblings, 0 replies; 11+ messages in thread From: Zorro Lang @ 2020-09-16 12:30 UTC (permalink / raw) To: fstests; +Cc: io-uring IO_URING is a new feature for GNU/Linux system, if someone case of xfstests tests this feature, better to check if current system supports it, or need _notrun. Signed-off-by: Zorro Lang <[email protected]> --- src/Makefile | 4 ++++ src/feature.c | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index 643c1916..f1422c5c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -65,6 +65,10 @@ SUBDIRS += aio-dio-regress LLDLIBS += -laio endif +ifeq ($(HAVE_URING), true) +LLDLIBS += -luring +endif + CFILES = $(TARGETS:=.c) LDIRT = $(TARGETS) fssum diff --git a/src/feature.c b/src/feature.c index a7eb7595..df550cf6 100644 --- a/src/feature.c +++ b/src/feature.c @@ -19,6 +19,7 @@ * * Test for machine features * -A test whether AIO syscalls are available + * -R test whether IO_URING syscalls are available * -o report a number of online cpus * -s report pagesize * -w report bits per long @@ -39,6 +40,10 @@ #include <libaio.h> #endif +#ifdef HAVE_LIBURING_H +#include <liburing.h> +#endif + #ifndef USRQUOTA #define USRQUOTA 0 #endif @@ -59,7 +64,7 @@ usage(void) fprintf(stderr, "Usage: feature [-v] -<q|u|g|p|U|G|P> <filesystem>\n"); fprintf(stderr, " feature [-v] -c <file>\n"); fprintf(stderr, " feature [-v] -t <file>\n"); - fprintf(stderr, " feature -A | -o | -s | -w\n"); + fprintf(stderr, " feature -A | -R | -o | -s | -w\n"); exit(1); } @@ -215,6 +220,29 @@ check_aio_support(void) #endif } +static int +check_uring_support(void) +{ +#ifdef HAVE_LIBURING_H + struct io_uring ring; + int err; + + err = io_uring_queue_init(1, &ring, 0); + if (err == 0) + return 0; + + if (err == -ENOSYS) /* CONFIG_IO_URING=n */ + return 1; + + fprintf(stderr, "unexpected error from io_uring_queue_init(): %s\n", + strerror(-err)); + return 2; +#else + /* liburing is unavailable, assume IO_URING is unsupported */ + return 1; +#endif +} + int main(int argc, char **argv) @@ -228,6 +256,7 @@ main(int argc, char **argv) int pflag = 0; int Pflag = 0; int qflag = 0; + int Rflag = 0; int sflag = 0; int uflag = 0; int Uflag = 0; @@ -235,7 +264,7 @@ main(int argc, char **argv) int oflag = 0; char *fs = NULL; - while ((c = getopt(argc, argv, "ActgGopPqsuUvw")) != EOF) { + while ((c = getopt(argc, argv, "ActgGopPqRsuUvw")) != EOF) { switch (c) { case 'A': Aflag++; @@ -264,6 +293,9 @@ main(int argc, char **argv) case 'q': qflag++; break; + case 'R': + Rflag++; + break; case 's': sflag++; break; @@ -289,7 +321,7 @@ main(int argc, char **argv) if (optind != argc-1) /* need a device */ usage(); fs = argv[argc-1]; - } else if (Aflag || wflag || sflag || oflag) { + } else if (Aflag || Rflag || wflag || sflag || oflag) { if (optind != argc) usage(); } else @@ -317,6 +349,9 @@ main(int argc, char **argv) if (Aflag) return(check_aio_support()); + if (Rflag) + return(check_uring_support()); + if (sflag) { printf("%d\n", getpagesize()); exit(0); -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 0/3] src/feature: add IO_URING feature checking @ 2020-09-16 12:23 Zorro Lang 2020-09-16 12:23 ` [PATCH 1/3] " Zorro Lang 0 siblings, 1 reply; 11+ messages in thread From: Zorro Lang @ 2020-09-16 12:23 UTC (permalink / raw) To: fstests; +Cc: io-uring This patchset bases on https://patchwork.kernel.org/cover/11769847/, which makes xfstests fsstress and fsx supports IO_URING. The io_uring IOs in fsstress will be run automatically when fsstress get running. But fsx need a special option '-U' to run IO_URING read/write, so add two new cases to xfstests to do fsx buffered and direct IO IO_URING test. [1/3] new helper to require io_uring feature [2/3] fsx buffered IO io_uring test [3/3] fsx direct IO io_uring test And the [2/3] just found an io_uring regression bug (need LVM TEST_DEV): https://bugzilla.kernel.org/show_bug.cgi?id=209243 Feel free to tell me, if you have more suggestions to test io_uring on filesystem. Thanks, Zorro ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] src/feature: add IO_URING feature checking 2020-09-16 12:23 [PATCH 0/3] " Zorro Lang @ 2020-09-16 12:23 ` Zorro Lang 0 siblings, 0 replies; 11+ messages in thread From: Zorro Lang @ 2020-09-16 12:23 UTC (permalink / raw) To: fstests; +Cc: io-uring IO_URING is a new feature for GNU/Linux system, if someone case of xfstests tests this feature, better to check if current system supports it, or need _notrun. Signed-off-by: Zorro Lang <[email protected]> --- src/Makefile | 4 ++++ src/feature.c | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index 643c1916..f1422c5c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -65,6 +65,10 @@ SUBDIRS += aio-dio-regress LLDLIBS += -laio endif +ifeq ($(HAVE_URING), true) +LLDLIBS += -luring +endif + CFILES = $(TARGETS:=.c) LDIRT = $(TARGETS) fssum diff --git a/src/feature.c b/src/feature.c index a7eb7595..df550cf6 100644 --- a/src/feature.c +++ b/src/feature.c @@ -19,6 +19,7 @@ * * Test for machine features * -A test whether AIO syscalls are available + * -R test whether IO_URING syscalls are available * -o report a number of online cpus * -s report pagesize * -w report bits per long @@ -39,6 +40,10 @@ #include <libaio.h> #endif +#ifdef HAVE_LIBURING_H +#include <liburing.h> +#endif + #ifndef USRQUOTA #define USRQUOTA 0 #endif @@ -59,7 +64,7 @@ usage(void) fprintf(stderr, "Usage: feature [-v] -<q|u|g|p|U|G|P> <filesystem>\n"); fprintf(stderr, " feature [-v] -c <file>\n"); fprintf(stderr, " feature [-v] -t <file>\n"); - fprintf(stderr, " feature -A | -o | -s | -w\n"); + fprintf(stderr, " feature -A | -R | -o | -s | -w\n"); exit(1); } @@ -215,6 +220,29 @@ check_aio_support(void) #endif } +static int +check_uring_support(void) +{ +#ifdef HAVE_LIBURING_H + struct io_uring ring; + int err; + + err = io_uring_queue_init(1, &ring, 0); + if (err == 0) + return 0; + + if (err == -ENOSYS) /* CONFIG_IO_URING=n */ + return 1; + + fprintf(stderr, "unexpected error from io_uring_queue_init(): %s\n", + strerror(-err)); + return 2; +#else + /* liburing is unavailable, assume IO_URING is unsupported */ + return 1; +#endif +} + int main(int argc, char **argv) @@ -228,6 +256,7 @@ main(int argc, char **argv) int pflag = 0; int Pflag = 0; int qflag = 0; + int Rflag = 0; int sflag = 0; int uflag = 0; int Uflag = 0; @@ -235,7 +264,7 @@ main(int argc, char **argv) int oflag = 0; char *fs = NULL; - while ((c = getopt(argc, argv, "ActgGopPqsuUvw")) != EOF) { + while ((c = getopt(argc, argv, "ActgGopPqRsuUvw")) != EOF) { switch (c) { case 'A': Aflag++; @@ -264,6 +293,9 @@ main(int argc, char **argv) case 'q': qflag++; break; + case 'R': + Rflag++; + break; case 's': sflag++; break; @@ -289,7 +321,7 @@ main(int argc, char **argv) if (optind != argc-1) /* need a device */ usage(); fs = argv[argc-1]; - } else if (Aflag || wflag || sflag || oflag) { + } else if (Aflag || Rflag || wflag || sflag || oflag) { if (optind != argc) usage(); } else @@ -317,6 +349,9 @@ main(int argc, char **argv) if (Aflag) return(check_aio_support()); + if (Rflag) + return(check_uring_support()); + if (sflag) { printf("%d\n", getpagesize()); exit(0); -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2020-10-05 16:45 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-09-16 17:14 [PATCH 0/3] xfstests: add IO_URING test cases Zorro Lang 2020-09-16 17:14 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang 2020-10-02 18:19 ` Brian Foster 2020-09-16 17:14 ` [PATCH 2/3] generic: fsx IO_URING soak tests Zorro Lang 2020-10-02 18:20 ` Brian Foster 2020-09-16 17:14 ` [PATCH 3/3] generic: IO_URING direct IO fsx test Zorro Lang 2020-10-02 18:20 ` Brian Foster 2020-10-05 16:45 ` Darrick J. Wong -- strict thread matches above, loose matches on Subject: below -- 2020-09-16 13:11 [PATCH 0/3] xfstests: new io_uring " Zorro Lang 2020-09-16 13:11 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang 2020-09-16 12:30 [PATCH 0/3] xfstests: new io_uring fsx test Zorro Lang 2020-09-16 12:30 ` [PATCH 1/3] src/feature: add IO_URING feature checking Zorro Lang 2020-09-16 12:23 [PATCH 0/3] " Zorro Lang 2020-09-16 12:23 ` [PATCH 1/3] " Zorro Lang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox