]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
torture: Add refperf to the rcutorture scripting
authorPaul E. McKenney <paulmck@kernel.org>
Mon, 25 May 2020 21:07:52 +0000 (14:07 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 29 Jun 2020 19:00:44 +0000 (12:00 -0700)
This commit updates the rcutorture scripting to include the new refperf
torture-test module.

Cc: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/testing/selftests/rcutorture/bin/kvm-recheck-refperf.sh [new file with mode: 0755]
tools/testing/selftests/rcutorture/bin/kvm.sh
tools/testing/selftests/rcutorture/bin/parse-console.sh
tools/testing/selftests/rcutorture/configs/refperf/CFLIST [new file with mode: 0644]
tools/testing/selftests/rcutorture/configs/refperf/CFcommon [new file with mode: 0644]
tools/testing/selftests/rcutorture/configs/refperf/NOPREEMPT [new file with mode: 0644]
tools/testing/selftests/rcutorture/configs/refperf/PREEMPT [new file with mode: 0644]
tools/testing/selftests/rcutorture/configs/refperf/ver_functions.sh [new file with mode: 0644]

diff --git a/tools/testing/selftests/rcutorture/bin/kvm-recheck-refperf.sh b/tools/testing/selftests/rcutorture/bin/kvm-recheck-refperf.sh
new file mode 100755 (executable)
index 0000000..6fc06cd
--- /dev/null
@@ -0,0 +1,67 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Analyze a given results directory for refperf performance measurements.
+#
+# Usage: kvm-recheck-refperf.sh resdir
+#
+# Copyright (C) IBM Corporation, 2016
+#
+# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
+
+i="$1"
+if test -d "$i" -a -r "$i"
+then
+       :
+else
+       echo Unreadable results directory: $i
+       exit 1
+fi
+PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
+. functions.sh
+
+configfile=`echo $i | sed -e 's/^.*\///'`
+
+sed -e 's/^\[[^]]*]//' < $i/console.log | tr -d '\015' |
+awk -v configfile="$configfile" '
+/^[    ]*Threads       Time\(ns\) *$/ {
+       if (dataphase + 0 == 0) {
+               dataphase = 1;
+               # print configfile, $0;
+       }
+       next;
+}
+
+/[^    ]*[0-9][0-9]*   [0-9][0-9]*\.[0-9][0-9]*$/ {
+       if (dataphase == 1) {
+               # print $0;
+               readertimes[++n] = $2;
+               sum += $2;
+       }
+       next;
+}
+
+{
+       if (dataphase == 1)
+               dataphase == 2;
+       next;
+}
+
+END {
+       print configfile " results:";
+       newNR = asort(readertimes);
+       if (newNR <= 0) {
+               print "No refperf records found???"
+               exit;
+       }
+       medianidx = int(newNR / 2);
+       if (newNR == medianidx * 2)
+               medianvalue = (readertimes[medianidx - 1] + readertimes[medianidx]) / 2;
+       else
+               medianvalue = readertimes[medianidx];
+       print "Average reader duration: " sum / newNR " nanoseconds";
+       print "Minimum reader duration: " readertimes[1];
+       print "Median reader duration: " medianvalue;
+       print "Maximum reader duration: " readertimes[newNR];
+       print "Computed from refperf printk output.";
+}'
index c279cf9cb0102fe05f4e5e2679300224a3312e5a..48b6a7248f50402136c104eaa94ff8c1079cae39 100755 (executable)
@@ -180,13 +180,14 @@ do
                shift
                ;;
        --torture)
-               checkarg --torture "(suite name)" "$#" "$2" '^\(lock\|rcu\|rcuperf\)$' '^--'
+               checkarg --torture "(suite name)" "$#" "$2" '^\(lock\|rcu\|rcuperf\|refperf\)$' '^--'
                TORTURE_SUITE=$2
                shift
-               if test "$TORTURE_SUITE" = rcuperf
+               if test "$TORTURE_SUITE" = rcuperf || test "$TORTURE_SUITE" = refperf
                then
-                       # If you really want jitter for rcuperf, specify
-                       # it after specifying rcuperf.  (But why?)
+                       # If you really want jitter for refperf or
+                       # rcuperf, specify it after specifying the rcuperf
+                       # or the refperf.  (But why jitter in these cases?)
                        jitter=0
                fi
                ;;
index 4bf62d7b1cbce6a400d70cf76e1b6bd53dba2d66..85af11d2d0cb192a7998daf97d88944650324bb0 100755 (executable)
@@ -33,8 +33,8 @@ then
 fi
 cat /dev/null > $file.diags
 
-# Check for proper termination, except that rcuperf runs don't indicate this.
-if test "$TORTURE_SUITE" != rcuperf
+# Check for proper termination, except for rcuperf and refperf.
+if test "$TORTURE_SUITE" != rcuperf && test "$TORTURE_SUITE" != refperf
 then
        # check for abject failure
 
diff --git a/tools/testing/selftests/rcutorture/configs/refperf/CFLIST b/tools/testing/selftests/rcutorture/configs/refperf/CFLIST
new file mode 100644 (file)
index 0000000..4d62eb4
--- /dev/null
@@ -0,0 +1,2 @@
+NOPREEMPT
+PREEMPT
diff --git a/tools/testing/selftests/rcutorture/configs/refperf/CFcommon b/tools/testing/selftests/rcutorture/configs/refperf/CFcommon
new file mode 100644 (file)
index 0000000..8ba5ba2
--- /dev/null
@@ -0,0 +1,2 @@
+CONFIG_RCU_REF_PERF_TEST=y
+CONFIG_PRINTK_TIME=y
diff --git a/tools/testing/selftests/rcutorture/configs/refperf/NOPREEMPT b/tools/testing/selftests/rcutorture/configs/refperf/NOPREEMPT
new file mode 100644 (file)
index 0000000..1cd25b7
--- /dev/null
@@ -0,0 +1,18 @@
+CONFIG_SMP=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_PREEMPT_RCU=n
+CONFIG_HZ_PERIODIC=n
+CONFIG_NO_HZ_IDLE=y
+CONFIG_NO_HZ_FULL=n
+CONFIG_RCU_FAST_NO_HZ=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_RCU_NOCB_CPU=n
+CONFIG_DEBUG_LOCK_ALLOC=n
+CONFIG_PROVE_LOCKING=n
+CONFIG_RCU_BOOST=n
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
+CONFIG_RCU_EXPERT=y
diff --git a/tools/testing/selftests/rcutorture/configs/refperf/PREEMPT b/tools/testing/selftests/rcutorture/configs/refperf/PREEMPT
new file mode 100644 (file)
index 0000000..d10bc69
--- /dev/null
@@ -0,0 +1,18 @@
+CONFIG_SMP=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_PREEMPT_RCU=y
+CONFIG_HZ_PERIODIC=n
+CONFIG_NO_HZ_IDLE=y
+CONFIG_NO_HZ_FULL=n
+CONFIG_RCU_FAST_NO_HZ=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_RCU_NOCB_CPU=n
+CONFIG_DEBUG_LOCK_ALLOC=n
+CONFIG_PROVE_LOCKING=n
+CONFIG_RCU_BOOST=n
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
+CONFIG_RCU_EXPERT=y
diff --git a/tools/testing/selftests/rcutorture/configs/refperf/ver_functions.sh b/tools/testing/selftests/rcutorture/configs/refperf/ver_functions.sh
new file mode 100644 (file)
index 0000000..489f05d
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Torture-suite-dependent shell functions for the rest of the scripts.
+#
+# Copyright (C) IBM Corporation, 2015
+#
+# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
+
+# per_version_boot_params bootparam-string config-file seconds
+#
+# Adds per-version torture-module parameters to kernels supporting them.
+per_version_boot_params () {
+       echo $1 refperf.shutdown=1 \
+               refperf.verbose=1
+}