Re: [PATCH] xfstests: add a simple cgroup2 writeback test

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Thu, Oct 26, 2017 at 04:57:40PM +0800, Eryu Guan wrote:
> On Tue, Oct 17, 2017 at 10:20:49PM -0700, Shaohua Li wrote:
> > From: Shaohua Li <shli@xxxxxx>
> > 
> > If filesystem supports cgroup2 writeback, the writeback IO should belong
> > to the cgroup which writes the file. To verify this, we set a write
> > bandwidth limit for a cgroup using block-throttling, the writeback IO
> > should be throttled according to the write bandwidth.
> > 
> > Thanks Dave Chinner's idea to use syncfs to wait for writeback
> > completion.
> > 
> > Signed-off-by: Shaohua Li <shli@xxxxxx>
> > ---

Ping..

Shaohua,

Were you planning to incorporate Eryu's feedback and repost this (and
the associated xfs writeback patch)?

Brian

> >  common/cgroup2        | 18 +++++++++++++
> >  tests/generic/463     | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >  tests/generic/463.out |  3 +++
> >  tests/generic/group   |  1 +
> >  4 files changed, 97 insertions(+)
> >  create mode 100644 common/cgroup2
> >  create mode 100755 tests/generic/463
> >  create mode 100644 tests/generic/463.out
> > 
> > diff --git a/common/cgroup2 b/common/cgroup2
> > new file mode 100644
> > index 00000000..bf935fee
> > --- /dev/null
> > +++ b/common/cgroup2
> > @@ -0,0 +1,18 @@
> > +#!/bin/bash
> 
> No need to use "#!/bin/bash" for a common file to be sourced by other
> scripts.
> 
> > +# cgroup2 specific common functions
> > +
> > +export CGROUP2_PATH="/sys/fs/cgroup"
> 
> Make it configurable? e.g.
> export CGROUP2_PATH="${CGROUP2_PATH:-"/sys/fs/cgroup"}
> 
> Because on my fedora test host, cgroup is mounted at
> /sys/fs/cgroup/unified by default.
> 
> > +
> > +_require_cgroup2()
> > +{
> > +    if [ ! -f ${CGROUP2_PATH}/cgroup.subtree_control ]; then
> > +        _notrun "Test requires cgroup2 enabled"
> > +    fi
> 
> Please use tab for indention.
> 
> > +}
> > +
> > +_get_scratch_dev_devt()
> > +{
> > +    ls -l $SCRATCH_DEV | awk '{printf("%s:%s", substr($5, 1, length($5)-1), 0)}'
> > +}
> 
> stat -c %t for major and stat -c %T for minor? And seems that the minor
> device id returned here is always 0, is that intentional?
> 
> Also, you need to call _real_dev first in case $SCRATCH_DEV is a
> symlink, e.g. device mapper device. And this helper can be moved to
> common/rc, it's not cgroup2 specific.
> 
> I think you can factor out "get the device id" part of _sysfs_dev() into
> a new helper, and use the new one in _sysfs_dev() and this test.
> 
> > +
> > +/bin/true
> > diff --git a/tests/generic/463 b/tests/generic/463
> > new file mode 100755
> > index 00000000..620a14a4
> > --- /dev/null
> > +++ b/tests/generic/463
> > @@ -0,0 +1,75 @@
> > +#! /bin/bash
> > +
> > +seq=`basename $0`
> > +seqres=$RESULT_DIR/$seq
> > +echo "QA output created by $seq"
> > +
> > +here=`pwd`
> > +tmp=/tmp/$$
> > +
> > +# get standard environment, filters and checks
> > +. ./common/rc
> > +. ./common/filter
> > +. ./common/cgroup2
> > +
> > +status=1	# failure is the default!
> > +trap "_cleanup; exit \$status" 0 1 2 3 15
> > +cgname=`mktemp -du ${CGROUP2_PATH}/test.XXXXXX`
> > +_cleanup()
> > +{
> > +    cd /
> > +    _scratch_unmount
> 
> check will do this automatically :)
> 
> > +    sync
> > +    rmdir $cgname
> > +}
> > +
> > +# real QA test starts here
> > +
> > +# Modify as appropriate.
> > +_supported_fs generic
> > +_supported_os Linux
> > +_require_scratch
> > +_require_cgroup2
> > +
> > +# Setup Filesystem
> > +_scratch_mkfs >/dev/null 2>&1 || _fail "mkfs failed"
> > +
> > +_scratch_mount || _fail "mount failed"
> > +
> > +test_speed()
> > +{
> > +    start=$(date +%s)
> > +    $XFS_IO_PROG -f -d -c "pwrite -b 1m 0 500m" "$SCRATCH_MNT/image" \
> > +        > /dev/null 2>&1
> > +    echo $(($(date +%s) - $start))
> > +}
> > +time=$(test_speed)
> > +
> > +if [ $time -gt 25 ]; then
> > +    echo "Disk is too slow, make sure disk can do 20MB/s at least"
> > +    status=1
> > +    exit 1
> 
> We should call _notrun here if device speed is too slow, that's not a
> failure, but a un-met test requirement.
> 
> > +fi
> > +
> > +echo "Disk speed is ok, start throttled writeback test"
> > +
> > +echo +io > ${CGROUP2_PATH}/cgroup.subtree_control
> 
> Make sure if io is available first in cgroup.controllers? Because on my
> fedora rawhide test host, cgroup.controllers is empty, because all io,
> cpu and mem controls are bound to cgroup v1 by default. I think this
> check could be integrated with _require_cgroup2, e.g.
> 
> _require_cgroup2 io
> 
> > +mkdir $cgname
> > +echo "$(_get_scratch_dev_devt) wbps=$((5*1024*1024))" > $cgname/io.max
> > +
> > +run_writeback()
> > +{
> > +    start=$(date +%s)
> > +    $XFS_IO_PROG -f -c "pwrite 0 500m" -c "syncfs" "$SCRATCH_MNT/image" \
> > +        > /dev/null 2>&1
> > +    echo $(($(date +%s) - $start))
> > +}
> > +time=$(
> > +echo $BASHPID > $cgname/cgroup.procs;
> > +run_writeback
> > +)
> > +_within_tolerance "Throttled writeback runtime" $time 100 10% -v
> > +
> > +# success, all done
> > +status=0
> > +exit
> > diff --git a/tests/generic/463.out b/tests/generic/463.out
> > new file mode 100644
> > index 00000000..c69f87c2
> > --- /dev/null
> > +++ b/tests/generic/463.out
> > @@ -0,0 +1,3 @@
> > +QA output created by 463
> > +Disk speed is ok, start throttled writeback test
> > +Throttled writeback runtime is in range
> > diff --git a/tests/generic/group b/tests/generic/group
> > index f2a6cdad..ea7b6956 100644
> > --- a/tests/generic/group
> > +++ b/tests/generic/group
> > @@ -465,3 +465,4 @@
> >  460 auto quick rw
> >  461 auto shutdown stress
> >  462 auto quick dax
> > +463 cgroup writeback test
> 
> s/test/auto/, I don't see the meaning of a 'test' group :)
> 
> Thanks,
> Eryu
> 
> > -- 
> > 2.11.0
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe fstests" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux