[PATCH 09/12] generic/251: constrain runtime via time/load/soak factors

Darrick J. Wong
2024-11-18T23:03:44Z

From: Darrick J. Wong <djwong@kernel.org>

On my test fleet, this test can run for well in excess of 20 minutes:

613 generic/251
616 generic/251
624 generic/251
630 generic/251
634 generic/251
652 generic/251
675 generic/251
749 generic/251
777 generic/251
808 generic/251
832 generic/251
946 generic/251
1082 generic/251
1221 generic/251
1241 generic/251
1254 generic/251
1305 generic/251
1366 generic/251
1646 generic/251
1936 generic/251
1952 generic/251
2358 generic/251
4359 generic/251
5325 generic/251
34046 generic/251

because it hardcodes 20 threads and 10 copies. It's not great to have a
test that results in a significant fraction of the total test runtime.
Fix the looping and load on this test to use LOAD and TIME_FACTOR to
scale up its operations, along with the usual SOAK_DURATION override.
That brings the default runtime down to less than a minute.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
tests/generic/251 | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)

diff --git a/tests/generic/251 b/tests/generic/251
index d59e91c3e0a33a..b4ddda10cef403 100755
--- a/tests/generic/251
+++ b/tests/generic/251
@@ -15,7 +15,6 @@ _begin_fstest ioctl trim auto
tmp=`mktemp -d`
trap "_cleanup; exit \$status" 0 1 3
trap "_destroy; exit \$status" 2 15
-chpid=0
mypid=$$

# Import common functions.
@@ -151,29 +150,28 @@ function check_sums() {

function run_process() {
local p=$1
- repeat=10
+ if [ -n "$SOAK_DURATION" ]; then
+ local duration="$SOAK_DURATION"
+ else
+ local duration="$((30 * TIME_FACTOR))"
+ fi
+ local stopat="$(( $(date +%s) + duration))"

- sleep $((5*$p))s &
- export chpid=$! && wait $chpid &> /dev/null
- chpid=0
-
- while [ $repeat -gt 0 ]; do
+ sleep $((5*$p))s

+ while [ "$(date +%s)" -lt "$stopat" ]; do
# Remove old directories.
rm -rf $SCRATCH_MNT/$p
- export chpid=$! && wait $chpid &> /dev/null

# Copy content -> partition.
mkdir $SCRATCH_MNT/$p
cp -axT $content/ $SCRATCH_MNT/$p/
- export chpid=$! && wait $chpid &> /dev/null

check_sums
- repeat=$(( $repeat - 1 ))
done
}

-nproc=20
+nproc=$((4 * LOAD_FACTOR))

# Copy $here to the scratch fs and make coipes of the replica. The fstests
# output (and hence $seqres.full) could be in $here, so we need to snapshot
@@ -194,11 +192,9 @@ pids=""
echo run > $tmp.fstrim_loop
fstrim_loop &
fstrim_pid=$!
-p=1
-while [ $p -le $nproc ]; do
+for ((p = 1; p < nproc; p++)); do
run_process $p &
pids="$pids $!"
- p=$(($p+1))
done
echo "done."