Re: [PATCH] fstests: reduce runtime of check -n

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



On Mon, Jun 19, 2023 at 01:50:58PM +0300, Amir Goldstein wrote:
> kvm-xfstests invokes check -n twice to pre-process and generate the
> tests-to-run list, which is then being passed as a long list of tests
> for invkoing check in the command line.
> 
> check invokes dirname, basename and sed several times per test just
> for doing basic string prefix/suffix trimming.
> Use bash string pattern matching instead which is much faster.
> 
> Note that the following pattern matching expression change:
> < test_dir=${test_dir#$SRC_DIR/*}
> > t=${t#$SRC_DIR/}
> does not change the meaning of the expression, because the
> shortest match of "$SRC_DIR/*" that is being trimmed is "$SRC_DIR/"
> and removing the tests/ prefix is what this code intended to do.
> 
> With check -n, there is no need to cleanup the results dir,
> but check -n is doing that for every single listed test.
> Move the cleanup of results dir to before actually running the test.
> 
> These improvements to check pre-test code cut down several minutes
> from the time until tests actually start to run with kvm-xfstests.
> 
> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx>
> ---
> 
> Zorro,
> 
> Just to clarify, this change is not expected to change behavior -
> only to improve runtime of check -n and the things that happen
> before the first test is invoked.

Hi Amir,

Sure, it's good to me to improve the performace of 'check -n'. But as this patch
changes the common logic of check file, I need to make sure it won't bring in
regression at first by some testing. If it works fine, I'll ack and merge it.

Thanks,
Zorro

> 
> Thanks,
> Amir.
> 
>  check | 22 +++++++++-------------
>  1 file changed, 9 insertions(+), 13 deletions(-)
> 
> diff --git a/check b/check
> index e36978c1..1a16eccb 100755
> --- a/check
> +++ b/check
> @@ -399,9 +399,9 @@ if $have_test_arg; then
>  		*)	# Expand test pattern (e.g. xfs/???, *fs/001)
>  			list=$(cd $SRC_DIR; echo $1)
>  			for t in $list; do
> -				test_dir=`dirname $t`
> -				test_dir=${test_dir#$SRC_DIR/*}
> -				test_name=`basename $t`
> +				t=${t#$SRC_DIR/}
> +				test_dir=${t%/*}
> +				test_name=${t#*/}
>  				group_file=$SRC_DIR/$test_dir/group.list
>  
>  				if grep -Eq "^$test_name" $group_file; then
> @@ -849,18 +849,14 @@ function run_section()
>  
>  		# the filename for the test and the name output are different.
>  		# we don't include the tests/ directory in the name output.
> -		export seqnum=`echo $seq | sed -e "s;$SRC_DIR/;;"`
> -
> -		# Similarly, the result directory needs to replace the tests/
> -		# part of the test location.
> -		group=`dirname $seq`
> +		export seqnum=${seq#$SRC_DIR/}
> +		group=${seqnum%/*}
>  		if $OPTIONS_HAVE_SECTIONS; then
> -			export RESULT_DIR=`echo $group | sed -e "s;$SRC_DIR;${RESULT_BASE}/$section;"`
>  			REPORT_DIR="$RESULT_BASE/$section"
>  		else
> -			export RESULT_DIR=`echo $group | sed -e "s;$SRC_DIR;$RESULT_BASE;"`
>  			REPORT_DIR="$RESULT_BASE"
>  		fi
> +		export RESULT_DIR="$REPORT_DIR/$group"
>  		seqres="$REPORT_DIR/$seqnum"
>  
>  		# Generate the entire section report with whatever test results
> @@ -872,9 +868,6 @@ function run_section()
>  					     "" &> /dev/null
>  		fi
>  
> -		mkdir -p $RESULT_DIR
> -		rm -f ${RESULT_DIR}/require_scratch*
> -		rm -f ${RESULT_DIR}/require_test*
>  		echo -n "$seqnum"
>  
>  		if $showme; then
> @@ -899,6 +892,9 @@ function run_section()
>  		fi
>  
>  		# really going to try and run this one
> +		mkdir -p $RESULT_DIR
> +		rm -f ${RESULT_DIR}/require_scratch*
> +		rm -f ${RESULT_DIR}/require_test*
>  		rm -f $seqres.out.bad $seqres.hints
>  
>  		# check if we really should run it
> -- 
> 2.34.1
> 




[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