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. 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