Re: [PATCH] xfstests: btrfs/011 improvement for compressed filesystems

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

 



On Fri, September 13, 2013 at 12:27 (+0200), Stefan Behrens wrote:
> Josef noticed that using /dev/zero to generate most of the test
> data doesn't work if someone overides the mount options to
> enable compression. The test that performs a cancelation failed
> because the replace operation was already finished when the
> cancel request was executed.
> 
> Since /dev/urandom is too slow to generate multiple GB, the
> way how the filesystem data is generated is completely changed
> with this patch. Now /dev/urandom is used to generate one 1MB
> file and this file is copied up to 2048 times. /dev/zero is no
> longer used.
> 
> The runtime of the test is about the same as before. Compression
> works now, online deduplication will again cause issues, but
> we don't have online deduplicatin today.
> 
> Reported-by: Josef Bacik <jbacik@xxxxxxxxxxxx>
> Signed-off-by: Stefan Behrens <sbehrens@xxxxxxxxxxxxxxxx>
> ---
>  tests/btrfs/011 | 46 ++++++++++++++++++++++++++++++----------------
>  1 file changed, 30 insertions(+), 16 deletions(-)
> 
> diff --git a/tests/btrfs/011 b/tests/btrfs/011
> index c8b4aac..71ff3de 100755
> --- a/tests/btrfs/011
> +++ b/tests/btrfs/011
> @@ -78,6 +78,7 @@ workout()
>  	local quick="$4"
>  	local source_dev="`echo ${SCRATCH_DEV_POOL} | awk '{print $1}'`"
>  	local target_dev="`echo ${SCRATCH_DEV_POOL} | awk '{print $NF}'`"
> +	local fssize
>  
>  	if [ "`echo $SCRATCH_DEV_POOL | wc -w`" -lt `expr $num_devs4raid + 1` ]; then
>  		echo "Skip workout $1 $2 $3 $4" >> $seqres.full
> @@ -107,33 +108,46 @@ workout()
>  		_notrun "Different device sizes detected"
>  	fi
>  
> +	if [ `$BTRFS_SHOW_SUPER_PROG $SCRATCH_DEV | grep dev_item.total_bytes | awk '{print $2}'` -lt 2500000000 ]; then
> +		_notrun "device size too small"
> +	fi
> +
>  	_scratch_mount
>  
> -	# Generate 500 times 20K extents in the data chunk and fill up
> -	# metadata with inline extents. Ignore ENOSPC.
> +	# Generate metadata and some minimal user data, generate 500 times
> +	# 20K extents in the data chunk and fill up metadata with inline
> +	# extents.
>  	for i in `seq 1 500`; do
>  		dd if=/dev/urandom of=$SCRATCH_MNT/l$i bs=16385 count=1
>  		dd if=/dev/urandom of=$SCRATCH_MNT/s$i bs=3800 count=1
>  	done > /dev/null 2>&1
>  
> +	# /dev/urandom is slow but has the benefit that the generated
> +	# contents does not shrink during compression.
> +	# Generate a template once and quickly copy it multiple times.
> +	# Obviously with online deduplication this will not work anymore.
> +	dd if=/dev/urandom of=$SCRATCH_MNT/t0 bs=1M count=1 > /dev/null 2>&1
> +
>  	if [ "${quick}Q" = "thoroughQ" ]; then
>  		# The intention of this "thorough" test is to increase
>  		# the probability of random errors, in particular in
>  		# conjunction with the background noise generator and
> -		# a sync call while the replace operation in ongoing.
> -		# Unfortunately it takes quite some time to generate
> -		# the test filesystem, therefore most data consists out
> -		# of zeros although this data is not very useful for
> -		# detecting misplaced read/write requests.
> -		# Ignore ENOSPC, it's not a problem..
> -		dd if=/dev/urandom of=$SCRATCH_MNT/r bs=1M count=200 >> $seqres.full 2>&1 &
> -		dd if=/dev/zero of=$SCRATCH_MNT/0 bs=1M count=2000 >> $seqres.full 2>&1
> -		wait
> +		# a sync call while the replace operation is ongoing.
> +		fssize=2048
>  	elif [ "${with_cancel}Q" = "cancelQ" ]; then
> -		# produce some data to prevent that the replace operation
> -		# finishes before the cancel request is started
> -		dd if=/dev/zero of=$SCRATCH_MNT/0 bs=1M count=1000 >> $seqres.full 2>&1
> +		# The goal is to produce enough data to prevent that the
> +		# replace operation finishes before the cancel request
> +		# is started.
> +		fssize=1024
> +	else
> +		fssize=64
>  	fi
> +
> +	# since the available size was tested before, do not tolerate
> +	# any failures
> +	for i in `seq $fssize`; do
> +		cp $SCRATCH_MNT/t0 $SCRATCH_MNT/t$i || _fail "cp failed"
> +	done > /dev/null 2>> $seqres.full
>  	sync; sync
>  
>  	btrfs_replace_test $source_dev $target_dev "" $with_cancel $quick
> @@ -214,7 +228,7 @@ btrfs_replace_test()
>  		# before the status is printed
>  		$BTRFS_UTIL_PROG replace status $SCRATCH_MNT > $tmp.tmp 2>&1
>  		cat $tmp.tmp >> $seqres.full
> -		grep -q canceled $tmp.tmp || _fail "btrfs replace status failed"
> +		grep -q canceled $tmp.tmp || _fail "btrfs replace status (canceled) failed"
>  	else
>  		if [ "${quick}Q" = "thoroughQ" ]; then
>  			# On current hardware, the thorough test runs
> @@ -226,7 +240,7 @@ btrfs_replace_test()
>  
>  		$BTRFS_UTIL_PROG replace status $SCRATCH_MNT > $tmp.tmp 2>&1
>  		cat $tmp.tmp >> $seqres.full
> -		grep -q finished $tmp.tmp || _fail "btrfs replace status failed"
> +		grep -q finished $tmp.tmp || _fail "btrfs replace status (finished) failed"
>  	fi
>  
>  	if ps -p $noise_pid | grep -q $noise_pid; then
> 

The "Q"-comparisons look a bit strange to me, but they've been there before.

Reviewed-by: Jan Schmidt <list.xfs@xxxxxxxxxxxxx>

-Jan

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux