]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
fstests: reduce runtime of check -n
authorAmir Goldstein <amir73il@gmail.com>
Mon, 19 Jun 2023 10:50:58 +0000 (13:50 +0300)
committerZorro Lang <zlang@kernel.org>
Fri, 23 Jun 2023 15:50:40 +0000 (23:50 +0800)
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>
check

diff --git a/check b/check
index e36978c19896f53e5e775cd15a136fa8b629d5c2..e042ed7454c3db3ad29cc580265d4dd5afe80955 100755 (executable)
--- 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