diff options
author | Amir Goldstein <amir73il@gmail.com> | 2023-06-19 13:50:58 +0300 |
---|---|---|
committer | Zorro Lang <zlang@kernel.org> | 2023-06-23 23:50:40 +0800 |
commit | 3e7166ffb2ef365fb987610e176ce145846f3e5a (patch) | |
tree | 8b68b60ccfe177021e9f8c91b8044f3c1f78e3a3 | |
parent | 87f90a2dae7a4adb7a0a314e27abae9aa1de78fb (diff) | |
download | xfstests-dev-3e7166ffb2ef365fb987610e176ce145846f3e5a.tar.gz |
fstests: reduce runtime of check -n
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@gmail.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
-rwxr-xr-x | check | 22 |
1 files changed, 9 insertions, 13 deletions
@@ -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 |