Re: [PATCH 11/15] xfs: test zoned GC file defragmentation for sequential writers

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

 



On Thu, May 01, 2025 at 08:42:48AM -0500, Christoph Hellwig wrote:
> Test that zoned GC defragments sequential writers forced into the same
> zone.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---

Same review points with patch 10/15

>  tests/xfs/4210     | 124 +++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/4210.out |   5 ++
>  2 files changed, 129 insertions(+)
>  create mode 100755 tests/xfs/4210
>  create mode 100644 tests/xfs/4210.out
> 
> diff --git a/tests/xfs/4210 b/tests/xfs/4210
> new file mode 100755
> index 000000000000..2984339fd86e
> --- /dev/null
> +++ b/tests/xfs/4210
> @@ -0,0 +1,124 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2024 Christoph Hellwig.
> +#
> +# FS QA Test No. 4210
> +#
> +# Test that GC defragments sequentially written files.
> +#
> +. ./common/preamble
> +_begin_fstest auto rw zone
> +
> +_cleanup()
> +{
> +	cd /
> +	_scratch_unmount >/dev/null 2>&1
> +}
> +
> +# Import common functions.
> +. ./common/filter
> +. ./common/zoned
> +
> +_require_scratch
> +
> +_scratch_mkfs_sized $((256 * 1024 * 1024))  >>$seqres.full 2>&1
> +
> +# limit to two max open zones so that all writes get thrown into the blender
> +export MOUNT_OPTIONS="$MOUNT_OPTIONS -o max_open_zones=2"
> +_try_scratch_mount || _notrun "mount option not supported"
> +_require_xfs_scratch_zoned
> +
> +fio_config=$tmp.fio
> +fio_out=$tmp.fio.out
> +fio_err=$tmp.fio.err
> +
> +cat >$fio_config <<EOF
> +[global]
> +bs=64k
> +iodepth=16
> +iodepth_batch=8
> +directory=$SCRATCH_MNT
> +ioengine=libaio
> +rw=write
> +direct=1
> +size=30m
> +
> +[file1]
> +filename=file1
> +
> +[file2]
> +filename=file2
> +
> +[file3]
> +filename=file3
> +
> +[file4]
> +filename=file4
> +
> +[file5]
> +filename=file5
> +
> +[file6]
> +filename=file6
> +
> +[file7]
> +filename=file7
> +
> +[file8]
> +filename=file8
> +EOF
> +
> +_require_fio $fio_config
> +
> +# create fragmented files
> +$FIO_PROG $fio_config --output=$fio_out
> +cat $fio_out >> $seqres.full
> +
> +# fill up all remaining user capacity
> +dd if=/dev/zero of=$SCRATCH_MNT/fill bs=4k >> $seqres.full 2>&1
> +
> +sync
> +
> +# all files should be badly fragmented now
> +extents2=$(_count_extents $SCRATCH_MNT/file2)
> +echo "number of file 2 extents: $extents2" >>$seqres.full
> +test $extents2 -gt 200 || _fail "fio did not fragment file"
> +
> +extents4=$(_count_extents $SCRATCH_MNT/file4)
> +echo "number of file 4 extents: $extents4" >>$seqres.full
> +test $extents4 -gt 200 || _fail "fio did not fragment file"
> +
> +extents6=$(_count_extents $SCRATCH_MNT/file6)
> +echo "number of file 6 extents: $extents6" >>$seqres.full
> +test $extents6 -gt 200 || _fail "fio did not fragment file"
> +
> +extents8=$(_count_extents $SCRATCH_MNT/file8)
> +echo "number of file 8 extents: $extents8" >>$seqres.full
> +test $extents8 -gt 200 || _fail "fio did not fragment file"
> +
> +# remove half of the files to create work for GC
> +rm $SCRATCH_MNT/file1
> +rm $SCRATCH_MNT/file3
> +rm $SCRATCH_MNT/file5
> +rm $SCRATCH_MNT/file7
> +
> +# fill up all remaining user capacity a few times to force GC
> +for i in `seq 1 10`; do
> +	dd if=/dev/zero of=$SCRATCH_MNT/fill bs=4k >> $seqres.full 2>&1
> +	$XFS_IO_PROG -c "fsync" $SCRATCH_MNT/fill >> $seqres.full 2>&1
> +done
> +
> +#
> +# All files should have a no more than a handful of extents now
> +#
> +extents2=$(_count_extents $SCRATCH_MNT/file2)
> +_within_tolerance "file 2 extents" $extents2 3 2 -v
> +extents4=$(_count_extents $SCRATCH_MNT/file4)
> +_within_tolerance "file 4 extents" $extents4 3 2 -v
> +extents6=$(_count_extents $SCRATCH_MNT/file6)
> +_within_tolerance "file 6 extents" $extents6 3 2 -v
> +extents8=$(_count_extents $SCRATCH_MNT/file8)
> +_within_tolerance "file 8 extents" $extents8 3 2 -v
> +
> +status=0
> +exit
> diff --git a/tests/xfs/4210.out b/tests/xfs/4210.out
> new file mode 100644
> index 000000000000..488dd9db790b
> --- /dev/null
> +++ b/tests/xfs/4210.out
> @@ -0,0 +1,5 @@
> +QA output created by 4210
> +file 2 extents is in range
> +file 4 extents is in range
> +file 6 extents is in range
> +file 8 extents is in range
> -- 
> 2.47.2
> 





[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux