aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2023-06-19 13:50:58 +0300
committerZorro Lang <zlang@kernel.org>2023-06-23 23:50:40 +0800
commit3e7166ffb2ef365fb987610e176ce145846f3e5a (patch)
tree8b68b60ccfe177021e9f8c91b8044f3c1f78e3a3
parent87f90a2dae7a4adb7a0a314e27abae9aa1de78fb (diff)
downloadxfstests-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-xcheck22
1 files changed, 9 insertions, 13 deletions
diff --git a/check b/check
index e36978c198..e042ed7454 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