Merge branch 'scftorture.2020.08.24a' into HEAD
scftorture.2020.08.24a: Torture tests for smp_call_function() and friends.
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Analyze a given results directory for rcuperf performance measurements,
|
||||
# Analyze a given results directory for rcuscale performance measurements,
|
||||
# looking for ftrace data. Exits with 0 if data was found, analyzed, and
|
||||
# printed. Intended to be invoked from kvm-recheck-rcuperf.sh after
|
||||
# printed. Intended to be invoked from kvm-recheck-rcuscale.sh after
|
||||
# argument checking.
|
||||
#
|
||||
# Usage: kvm-recheck-rcuperf-ftrace.sh resdir
|
||||
# Usage: kvm-recheck-rcuscale-ftrace.sh resdir
|
||||
#
|
||||
# Copyright (C) IBM Corporation, 2016
|
||||
#
|
@@ -1,9 +1,9 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Analyze a given results directory for rcuperf performance measurements.
|
||||
# Analyze a given results directory for rcuscale scalability measurements.
|
||||
#
|
||||
# Usage: kvm-recheck-rcuperf.sh resdir
|
||||
# Usage: kvm-recheck-rcuscale.sh resdir
|
||||
#
|
||||
# Copyright (C) IBM Corporation, 2016
|
||||
#
|
||||
@@ -20,7 +20,7 @@ fi
|
||||
PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
|
||||
. functions.sh
|
||||
|
||||
if kvm-recheck-rcuperf-ftrace.sh $i
|
||||
if kvm-recheck-rcuscale-ftrace.sh $i
|
||||
then
|
||||
# ftrace data was successfully analyzed, call it good!
|
||||
exit 0
|
||||
@@ -30,12 +30,12 @@ configfile=`echo $i | sed -e 's/^.*\///'`
|
||||
|
||||
sed -e 's/^\[[^]]*]//' < $i/console.log |
|
||||
awk '
|
||||
/-perf: .* gps: .* batches:/ {
|
||||
/-scale: .* gps: .* batches:/ {
|
||||
ngps = $9;
|
||||
nbatches = $11;
|
||||
}
|
||||
|
||||
/-perf: .*writer-duration/ {
|
||||
/-scale: .*writer-duration/ {
|
||||
gptimes[++n] = $5 / 1000.;
|
||||
sum += $5 / 1000.;
|
||||
}
|
||||
@@ -43,7 +43,7 @@ awk '
|
||||
END {
|
||||
newNR = asort(gptimes);
|
||||
if (newNR <= 0) {
|
||||
print "No rcuperf records found???"
|
||||
print "No rcuscale records found???"
|
||||
exit;
|
||||
}
|
||||
pct50 = int(newNR * 50 / 100);
|
||||
@@ -79,5 +79,5 @@ END {
|
||||
print "99th percentile grace-period duration: " gptimes[pct99];
|
||||
print "Maximum grace-period duration: " gptimes[newNR];
|
||||
print "Grace periods: " ngps + 0 " Batches: " nbatches + 0 " Ratio: " ngps / nbatches;
|
||||
print "Computed from rcuperf printk output.";
|
||||
print "Computed from rcuscale printk output.";
|
||||
}'
|
38
tools/testing/selftests/rcutorture/bin/kvm-recheck-scf.sh
Executable file
38
tools/testing/selftests/rcutorture/bin/kvm-recheck-scf.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Analyze a given results directory for rcutorture progress.
|
||||
#
|
||||
# Usage: kvm-recheck-rcu.sh resdir
|
||||
#
|
||||
# Copyright (C) Facebook, 2020
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@kernel.org>
|
||||
|
||||
i="$1"
|
||||
if test -d "$i" -a -r "$i"
|
||||
then
|
||||
:
|
||||
else
|
||||
echo Unreadable results directory: $i
|
||||
exit 1
|
||||
fi
|
||||
. functions.sh
|
||||
|
||||
configfile=`echo $i | sed -e 's/^.*\///'`
|
||||
nscfs="`grep 'scf_invoked_count ver:' $i/console.log 2> /dev/null | tail -1 | sed -e 's/^.* scf_invoked_count ver: //' -e 's/ .*$//' | tr -d '\015'`"
|
||||
if test -z "$nscfs"
|
||||
then
|
||||
echo "$configfile ------- "
|
||||
else
|
||||
dur="`sed -e 's/^.* scftorture.shutdown_secs=//' -e 's/ .*$//' < $i/qemu-cmd 2> /dev/null`"
|
||||
if test -z "$dur"
|
||||
then
|
||||
rate=""
|
||||
else
|
||||
nscfss=`awk -v nscfs=$nscfs -v dur=$dur '
|
||||
BEGIN { print nscfs / dur }' < /dev/null`
|
||||
rate=" ($nscfss/s)"
|
||||
fi
|
||||
echo "${configfile} ------- ${nscfs} SCF handler invocations$rate"
|
||||
fi
|
@@ -71,7 +71,7 @@ usage () {
|
||||
echo " --qemu-args qemu-arguments"
|
||||
echo " --qemu-cmd qemu-system-..."
|
||||
echo " --results absolute-pathname"
|
||||
echo " --torture lock|rcu|rcuperf|refscale|scf"
|
||||
echo " --torture lock|rcu|rcuscale|refscale|scf"
|
||||
echo " --trust-make"
|
||||
exit 1
|
||||
}
|
||||
@@ -198,13 +198,13 @@ do
|
||||
shift
|
||||
;;
|
||||
--torture)
|
||||
checkarg --torture "(suite name)" "$#" "$2" '^\(lock\|rcu\|rcuperf\|refscale\)$' '^--'
|
||||
checkarg --torture "(suite name)" "$#" "$2" '^\(lock\|rcu\|rcuscale\|refscale\|scf\)$' '^--'
|
||||
TORTURE_SUITE=$2
|
||||
shift
|
||||
if test "$TORTURE_SUITE" = rcuperf || test "$TORTURE_SUITE" = refscale
|
||||
if test "$TORTURE_SUITE" = rcuscale || test "$TORTURE_SUITE" = refscale
|
||||
then
|
||||
# If you really want jitter for refscale or
|
||||
# rcuperf, specify it after specifying the rcuperf
|
||||
# rcuscale, specify it after specifying the rcuscale
|
||||
# or the refscale. (But why jitter in these cases?)
|
||||
jitter=0
|
||||
fi
|
||||
|
@@ -33,8 +33,8 @@ then
|
||||
fi
|
||||
cat /dev/null > $file.diags
|
||||
|
||||
# Check for proper termination, except for rcuperf and refscale.
|
||||
if test "$TORTURE_SUITE" != rcuperf && test "$TORTURE_SUITE" != refscale
|
||||
# Check for proper termination, except for rcuscale and refscale.
|
||||
if test "$TORTURE_SUITE" != rcuscale && test "$TORTURE_SUITE" != refscale
|
||||
then
|
||||
# check for abject failure
|
||||
|
||||
@@ -67,6 +67,7 @@ then
|
||||
grep --binary-files=text 'torture:.*ver:' $file |
|
||||
egrep --binary-files=text -v '\(null\)|rtc: 000000000* ' |
|
||||
sed -e 's/^(initramfs)[^]]*] //' -e 's/^\[[^]]*] //' |
|
||||
sed -e 's/^.*ver: //' |
|
||||
awk '
|
||||
BEGIN {
|
||||
ver = 0;
|
||||
@@ -74,13 +75,13 @@ then
|
||||
}
|
||||
|
||||
{
|
||||
if (!badseq && ($5 + 0 != $5 || $5 <= ver)) {
|
||||
if (!badseq && ($1 + 0 != $1 || $1 <= ver)) {
|
||||
badseqno1 = ver;
|
||||
badseqno2 = $5;
|
||||
badseqno2 = $1;
|
||||
badseqnr = NR;
|
||||
badseq = 1;
|
||||
}
|
||||
ver = $5
|
||||
ver = $1
|
||||
}
|
||||
|
||||
END {
|
||||
|
@@ -1,2 +0,0 @@
|
||||
CONFIG_RCU_PERF_TEST=y
|
||||
CONFIG_PRINTK_TIME=y
|
@@ -0,0 +1,2 @@
|
||||
CONFIG_RCU_SCALE_TEST=y
|
||||
CONFIG_PRINTK_TIME=y
|
@@ -11,6 +11,6 @@
|
||||
#
|
||||
# Adds per-version torture-module parameters to kernels supporting them.
|
||||
per_version_boot_params () {
|
||||
echo $1 rcuperf.shutdown=1 \
|
||||
rcuperf.verbose=1
|
||||
echo $1 rcuscale.shutdown=1 \
|
||||
rcuscale.verbose=1
|
||||
}
|
2
tools/testing/selftests/rcutorture/configs/scf/CFLIST
Normal file
2
tools/testing/selftests/rcutorture/configs/scf/CFLIST
Normal file
@@ -0,0 +1,2 @@
|
||||
NOPREEMPT
|
||||
PREEMPT
|
2
tools/testing/selftests/rcutorture/configs/scf/CFcommon
Normal file
2
tools/testing/selftests/rcutorture/configs/scf/CFcommon
Normal file
@@ -0,0 +1,2 @@
|
||||
CONFIG_SCF_TORTURE_TEST=y
|
||||
CONFIG_PRINTK_TIME=y
|
9
tools/testing/selftests/rcutorture/configs/scf/NOPREEMPT
Normal file
9
tools/testing/selftests/rcutorture/configs/scf/NOPREEMPT
Normal file
@@ -0,0 +1,9 @@
|
||||
CONFIG_SMP=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=n
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=n
|
||||
CONFIG_NO_HZ_FULL=y
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_PROVE_LOCKING=n
|
@@ -0,0 +1 @@
|
||||
nohz_full=1
|
9
tools/testing/selftests/rcutorture/configs/scf/PREEMPT
Normal file
9
tools/testing/selftests/rcutorture/configs/scf/PREEMPT
Normal file
@@ -0,0 +1,9 @@
|
||||
CONFIG_SMP=y
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=y
|
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Torture-suite-dependent shell functions for the rest of the scripts.
|
||||
#
|
||||
# Copyright (C) Facebook, 2020
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@kernel.org>
|
||||
|
||||
# scftorture_param_onoff bootparam-string config-file
|
||||
#
|
||||
# Adds onoff scftorture module parameters to kernels having it.
|
||||
scftorture_param_onoff () {
|
||||
if ! bootparam_hotplug_cpu "$1" && configfrag_hotplug_cpu "$2"
|
||||
then
|
||||
echo CPU-hotplug kernel, adding scftorture onoff. 1>&2
|
||||
echo scftorture.onoff_interval=1000 scftorture.onoff_holdoff=30
|
||||
fi
|
||||
}
|
||||
|
||||
# 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 `scftorture_param_onoff "$1" "$2"` \
|
||||
scftorture.stat_interval=15 \
|
||||
scftorture.shutdown_secs=$3 \
|
||||
scftorture.verbose=1 \
|
||||
scf
|
||||
}
|
Reference in New Issue
Block a user