]> www.infradead.org Git - linux.git/commitdiff
torture: Add a stop-run capability
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 10 Jun 2020 00:58:30 +0000 (17:58 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 29 Jun 2020 19:01:44 +0000 (12:01 -0700)
When bisecting RCU issues, it is often the case that the first error in
an unsuccessful run will happen quickly, but that a successful run must
go on for some time in order to obtain a sufficiently low false-negative
error rate.  In many cases, a bisection requires multiple concurrent
runs, in which case the first failure in any run indicates failure,
pure and simple.  In such cases, it would speed things up greatly if
the first failure terminated all runs.

This commit therefore adds scripting that checks for a file named "STOP"
in the top-level results directory, terminating the run when it appears.
Note that in-progress builds will continue until completion, but future
builds and all runs will be cut short.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/testing/selftests/rcutorture/bin/jitter.sh
tools/testing/selftests/rcutorture/bin/kvm-build.sh
tools/testing/selftests/rcutorture/bin/kvm-test-1-run.sh
tools/testing/selftests/rcutorture/bin/kvm.sh

index 30cb5b27d32e56cb629b36a911d8bda029db2def..188b864bc4bf61fa5a6e74eb5641098c044ddd5f 100755 (executable)
@@ -46,6 +46,12 @@ do
                exit 0;
        fi
 
+       # Check for stop request.
+       if test -f "$TORTURE_STOPFILE"
+       then
+               exit 1;
+       fi
+
        # Set affinity to randomly selected online CPU
        if cpus=`grep 1 /sys/devices/system/cpu/*/online 2>&1 |
                 sed -e 's,/[^/]*$,,' -e 's/^[^0-9]*//'`
index 18d6518504ee97eedc0934a8e08e2329e57d0897..115e1822b26f27301cfc5d2970fa42e682d7119d 100755 (executable)
@@ -9,6 +9,12 @@
 #
 # Authors: Paul E. McKenney <paulmck@linux.ibm.com>
 
+if test -f "$TORTURE_STOPFILE"
+then
+       echo "kvm-build.sh early exit due to run STOP request"
+       exit 1
+fi
+
 config_template=${1}
 if test -z "$config_template" -o ! -f "$config_template" -o ! -r "$config_template"
 then
index 064dd735de397bd53c6c5c98c319c79fffc4dbe1..5ec095da095f5632a00fd57bc5910fe58330f066 100755 (executable)
@@ -182,7 +182,7 @@ do
        kruntime=`gawk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
        if test -z "$qemu_pid" || kill -0 "$qemu_pid" > /dev/null 2>&1
        then
-               if test $kruntime -ge $seconds
+               if test $kruntime -ge $seconds -o -f "$TORTURE_STOPFILE"
                then
                        break;
                fi
@@ -211,10 +211,19 @@ then
 fi
 if test $commandcompleted -eq 0 -a -n "$qemu_pid"
 then
-       echo Grace period for qemu job at pid $qemu_pid
+       if ! test -f "$TORTURE_STOPFILE"
+       then
+               echo Grace period for qemu job at pid $qemu_pid
+       fi
        oldline="`tail $resdir/console.log`"
        while :
        do
+               if test -f "$TORTURE_STOPFILE"
+               then
+                       echo "PID $qemu_pid killed due to run STOP request" >> $resdir/Warnings 2>&1
+                       kill -KILL $qemu_pid
+                       break
+               fi
                kruntime=`gawk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
                if kill -0 $qemu_pid > /dev/null 2>&1
                then
index 7dbce7a434134ba4e00e3b212852d08d548bf70b..3578c85ea8c447b22f315ec70fe39cecabb8f25c 100755 (executable)
@@ -337,6 +337,8 @@ then
        mkdir -p "$resdir" || :
 fi
 mkdir $resdir/$ds
+TORTURE_RESDIR="$resdir/$ds"; export TORTURE_RESDIR
+TORTURE_STOPFILE="$resdir/$ds/STOP"; export TORTURE_STOPFILE
 echo Results directory: $resdir/$ds
 echo $scriptname $args
 touch $resdir/$ds/log