mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
Pull RCU updates from Paul E. McKenney: * Documentation updates, including fixes to the design-level requirements documentation and a fixed version of the design-level data-structure documentation. These fixes include removing cartoons and getting rid of the html/htmlx duplication. * Further improvements to the new-age expedited grace periods. * Miscellaneous fixes. * Torture-test changes, including a new rcuperf module for measuring RCU grace-period performance and scalability, which is useful for the expedited-grace-period changes. Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
commit
41ed943d85
47 changed files with 10417 additions and 3693 deletions
90
tools/testing/selftests/rcutorture/bin/jitter.sh
Executable file
90
tools/testing/selftests/rcutorture/bin/jitter.sh
Executable file
|
|
@ -0,0 +1,90 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Alternate sleeping and spinning on randomly selected CPUs. The purpose
|
||||
# of this script is to inflict random OS jitter on a concurrently running
|
||||
# test.
|
||||
#
|
||||
# Usage: jitter.sh me duration [ sleepmax [ spinmax ] ]
|
||||
#
|
||||
# me: Random-number-generator seed salt.
|
||||
# duration: Time to run in seconds.
|
||||
# sleepmax: Maximum microseconds to sleep, defaults to one second.
|
||||
# spinmax: Maximum microseconds to spin, defaults to one millisecond.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you can access it online at
|
||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
||||
#
|
||||
# Copyright (C) IBM Corporation, 2016
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
|
||||
me=$(($1 * 1000))
|
||||
duration=$2
|
||||
sleepmax=${3-1000000}
|
||||
spinmax=${4-1000}
|
||||
|
||||
n=1
|
||||
|
||||
starttime=`awk 'BEGIN { print systime(); }' < /dev/null`
|
||||
|
||||
while :
|
||||
do
|
||||
# Check for done.
|
||||
t=`awk -v s=$starttime 'BEGIN { print systime() - s; }' < /dev/null`
|
||||
if test "$t" -gt "$duration"
|
||||
then
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
# Set affinity to randomly selected CPU
|
||||
cpus=`ls /sys/devices/system/cpu/*/online |
|
||||
sed -e 's,/[^/]*$,,' -e 's/^[^0-9]*//' |
|
||||
grep -v '^0*$'`
|
||||
cpumask=`awk -v cpus="$cpus" -v me=$me -v n=$n 'BEGIN {
|
||||
srand(n + me + systime());
|
||||
ncpus = split(cpus, ca);
|
||||
curcpu = ca[int(rand() * ncpus + 1)];
|
||||
mask = lshift(1, curcpu);
|
||||
if (mask + 0 <= 0)
|
||||
mask = 1;
|
||||
printf("%#x\n", mask);
|
||||
}' < /dev/null`
|
||||
n=$(($n+1))
|
||||
if ! taskset -p $cpumask $$ > /dev/null 2>&1
|
||||
then
|
||||
echo taskset failure: '"taskset -p ' $cpumask $$ '"'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Sleep a random duration
|
||||
sleeptime=`awk -v me=$me -v n=$n -v sleepmax=$sleepmax 'BEGIN {
|
||||
srand(n + me + systime());
|
||||
printf("%06d", int(rand() * sleepmax));
|
||||
}' < /dev/null`
|
||||
n=$(($n+1))
|
||||
sleep .$sleeptime
|
||||
|
||||
# Spin a random duration
|
||||
limit=`awk -v me=$me -v n=$n -v spinmax=$spinmax 'BEGIN {
|
||||
srand(n + me + systime());
|
||||
printf("%06d", int(rand() * spinmax));
|
||||
}' < /dev/null`
|
||||
n=$(($n+1))
|
||||
for i in {1..$limit}
|
||||
do
|
||||
echo > /dev/null
|
||||
done
|
||||
done
|
||||
|
||||
exit 1
|
||||
121
tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf-ftrace.sh
Executable file
121
tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf-ftrace.sh
Executable file
|
|
@ -0,0 +1,121 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Analyze a given results directory for rcuperf 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
|
||||
# argument checking.
|
||||
#
|
||||
# Usage: kvm-recheck-rcuperf-ftrace.sh resdir
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you can access it online at
|
||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
||||
#
|
||||
# Copyright (C) IBM Corporation, 2016
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
|
||||
i="$1"
|
||||
. tools/testing/selftests/rcutorture/bin/functions.sh
|
||||
|
||||
if test "`grep -c 'rcu_exp_grace_period.*start' < $i/console.log`" -lt 100
|
||||
then
|
||||
exit 10
|
||||
fi
|
||||
|
||||
sed -e 's/^\[[^]]*]//' < $i/console.log |
|
||||
grep 'us : rcu_exp_grace_period' |
|
||||
sed -e 's/us : / : /' |
|
||||
tr -d '\015' |
|
||||
awk '
|
||||
$8 == "start" {
|
||||
if (starttask != "")
|
||||
nlost++;
|
||||
starttask = $1;
|
||||
starttime = $3;
|
||||
startseq = $7;
|
||||
}
|
||||
|
||||
$8 == "end" {
|
||||
if (starttask == $1 && startseq == $7) {
|
||||
curgpdur = $3 - starttime;
|
||||
gptimes[++n] = curgpdur;
|
||||
gptaskcnt[starttask]++;
|
||||
sum += curgpdur;
|
||||
if (curgpdur > 1000)
|
||||
print "Long GP " starttime "us to " $3 "us (" curgpdur "us)";
|
||||
starttask = "";
|
||||
} else {
|
||||
# Lost a message or some such, reset.
|
||||
starttask = "";
|
||||
nlost++;
|
||||
}
|
||||
}
|
||||
|
||||
$8 == "done" {
|
||||
piggybackcnt[$1]++;
|
||||
}
|
||||
|
||||
END {
|
||||
newNR = asort(gptimes);
|
||||
if (newNR <= 0) {
|
||||
print "No ftrace records found???"
|
||||
exit 10;
|
||||
}
|
||||
pct50 = int(newNR * 50 / 100);
|
||||
if (pct50 < 1)
|
||||
pct50 = 1;
|
||||
pct90 = int(newNR * 90 / 100);
|
||||
if (pct90 < 1)
|
||||
pct90 = 1;
|
||||
pct99 = int(newNR * 99 / 100);
|
||||
if (pct99 < 1)
|
||||
pct99 = 1;
|
||||
div = 10 ** int(log(gptimes[pct90]) / log(10) + .5) / 100;
|
||||
print "Histogram bucket size: " div;
|
||||
last = gptimes[1] - 10;
|
||||
count = 0;
|
||||
for (i = 1; i <= newNR; i++) {
|
||||
current = div * int(gptimes[i] / div);
|
||||
if (last == current) {
|
||||
count++;
|
||||
} else {
|
||||
if (count > 0)
|
||||
print last, count;
|
||||
count = 1;
|
||||
last = current;
|
||||
}
|
||||
}
|
||||
if (count > 0)
|
||||
print last, count;
|
||||
print "Distribution of grace periods across tasks:";
|
||||
for (i in gptaskcnt) {
|
||||
print "\t" i, gptaskcnt[i];
|
||||
nbatches += gptaskcnt[i];
|
||||
}
|
||||
ngps = nbatches;
|
||||
print "Distribution of piggybacking across tasks:";
|
||||
for (i in piggybackcnt) {
|
||||
print "\t" i, piggybackcnt[i];
|
||||
ngps += piggybackcnt[i];
|
||||
}
|
||||
print "Average grace-period duration: " sum / newNR " microseconds";
|
||||
print "Minimum grace-period duration: " gptimes[1];
|
||||
print "50th percentile grace-period duration: " gptimes[pct50];
|
||||
print "90th percentile grace-period duration: " gptimes[pct90];
|
||||
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 " Lost: " nlost + 0;
|
||||
print "Computed from ftrace data.";
|
||||
}'
|
||||
exit 0
|
||||
96
tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf.sh
Executable file
96
tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf.sh
Executable file
|
|
@ -0,0 +1,96 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Analyze a given results directory for rcuperf performance measurements.
|
||||
#
|
||||
# Usage: kvm-recheck-rcuperf.sh resdir
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you can access it online at
|
||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
||||
#
|
||||
# Copyright (C) IBM Corporation, 2016
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
|
||||
i="$1"
|
||||
if test -d $i
|
||||
then
|
||||
:
|
||||
else
|
||||
echo Unreadable results directory: $i
|
||||
exit 1
|
||||
fi
|
||||
PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
|
||||
. tools/testing/selftests/rcutorture/bin/functions.sh
|
||||
|
||||
if kvm-recheck-rcuperf-ftrace.sh $i
|
||||
then
|
||||
# ftrace data was successfully analyzed, call it good!
|
||||
exit 0
|
||||
fi
|
||||
|
||||
configfile=`echo $i | sed -e 's/^.*\///'`
|
||||
|
||||
sed -e 's/^\[[^]]*]//' < $i/console.log |
|
||||
awk '
|
||||
/-perf: .* gps: .* batches:/ {
|
||||
ngps = $9;
|
||||
nbatches = $11;
|
||||
}
|
||||
|
||||
/-perf: .*writer-duration/ {
|
||||
gptimes[++n] = $5 / 1000.;
|
||||
sum += $5 / 1000.;
|
||||
}
|
||||
|
||||
END {
|
||||
newNR = asort(gptimes);
|
||||
if (newNR <= 0) {
|
||||
print "No rcuperf records found???"
|
||||
exit;
|
||||
}
|
||||
pct50 = int(newNR * 50 / 100);
|
||||
if (pct50 < 1)
|
||||
pct50 = 1;
|
||||
pct90 = int(newNR * 90 / 100);
|
||||
if (pct90 < 1)
|
||||
pct90 = 1;
|
||||
pct99 = int(newNR * 99 / 100);
|
||||
if (pct99 < 1)
|
||||
pct99 = 1;
|
||||
div = 10 ** int(log(gptimes[pct90]) / log(10) + .5) / 100;
|
||||
print "Histogram bucket size: " div;
|
||||
last = gptimes[1] - 10;
|
||||
count = 0;
|
||||
for (i = 1; i <= newNR; i++) {
|
||||
current = div * int(gptimes[i] / div);
|
||||
if (last == current) {
|
||||
count++;
|
||||
} else {
|
||||
if (count > 0)
|
||||
print last, count;
|
||||
count = 1;
|
||||
last = current;
|
||||
}
|
||||
}
|
||||
if (count > 0)
|
||||
print last, count;
|
||||
print "Average grace-period duration: " sum / newNR " microseconds";
|
||||
print "Minimum grace-period duration: " gptimes[1];
|
||||
print "50th percentile grace-period duration: " gptimes[pct50];
|
||||
print "90th percentile grace-period duration: " gptimes[pct90];
|
||||
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.";
|
||||
}'
|
||||
|
|
@ -48,7 +48,10 @@ do
|
|||
cat $i/Make.oldconfig.err
|
||||
fi
|
||||
parse-build.sh $i/Make.out $configfile
|
||||
parse-torture.sh $i/console.log $configfile
|
||||
if test "$TORTURE_SUITE" != rcuperf
|
||||
then
|
||||
parse-torture.sh $i/console.log $configfile
|
||||
fi
|
||||
parse-console.sh $i/console.log $configfile
|
||||
if test -r $i/Warnings
|
||||
then
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
# Execute this in the source tree. Do not run it as a background task
|
||||
# because qemu does not seem to like that much.
|
||||
#
|
||||
# Usage: kvm-test-1-run.sh config builddir resdir minutes qemu-args boot_args
|
||||
# Usage: kvm-test-1-run.sh config builddir resdir seconds qemu-args boot_args
|
||||
#
|
||||
# qemu-args defaults to "-enable-kvm -soundhw pcspk -nographic", along with
|
||||
# arguments specifying the number of CPUs and other
|
||||
|
|
@ -91,25 +91,33 @@ fi
|
|||
# CONFIG_PCMCIA=n
|
||||
# CONFIG_CARDBUS=n
|
||||
# CONFIG_YENTA=n
|
||||
if kvm-build.sh $config_template $builddir $T
|
||||
base_resdir=`echo $resdir | sed -e 's/\.[0-9]\+$//'`
|
||||
if test "$base_resdir" != "$resdir" -a -f $base_resdir/bzImage -a -f $base_resdir/vmlinux
|
||||
then
|
||||
# Rerunning previous test, so use that test's kernel.
|
||||
QEMU="`identify_qemu $base_resdir/vmlinux`"
|
||||
KERNEL=$base_resdir/bzImage
|
||||
ln -s $base_resdir/Make*.out $resdir # for kvm-recheck.sh
|
||||
ln -s $base_resdir/.config $resdir # for kvm-recheck.sh
|
||||
elif kvm-build.sh $config_template $builddir $T
|
||||
then
|
||||
# Had to build a kernel for this test.
|
||||
QEMU="`identify_qemu $builddir/vmlinux`"
|
||||
BOOT_IMAGE="`identify_boot_image $QEMU`"
|
||||
cp $builddir/Make*.out $resdir
|
||||
cp $builddir/vmlinux $resdir
|
||||
cp $builddir/.config $resdir
|
||||
if test -n "$BOOT_IMAGE"
|
||||
then
|
||||
cp $builddir/$BOOT_IMAGE $resdir
|
||||
KERNEL=$resdir/bzImage
|
||||
else
|
||||
echo No identifiable boot image, not running KVM, see $resdir.
|
||||
echo Do the torture scripts know about your architecture?
|
||||
fi
|
||||
parse-build.sh $resdir/Make.out $title
|
||||
if test -f $builddir.wait
|
||||
then
|
||||
mv $builddir.wait $builddir.ready
|
||||
fi
|
||||
else
|
||||
# Build failed.
|
||||
cp $builddir/Make*.out $resdir
|
||||
cp $builddir/.config $resdir || :
|
||||
echo Build failed, not running KVM, see $resdir.
|
||||
|
|
@ -119,12 +127,15 @@ else
|
|||
fi
|
||||
exit 1
|
||||
fi
|
||||
if test -f $builddir.wait
|
||||
then
|
||||
mv $builddir.wait $builddir.ready
|
||||
fi
|
||||
while test -f $builddir.ready
|
||||
do
|
||||
sleep 1
|
||||
done
|
||||
minutes=$4
|
||||
seconds=$(($minutes * 60))
|
||||
seconds=$4
|
||||
qemu_args=$5
|
||||
boot_args=$6
|
||||
|
||||
|
|
@ -167,15 +178,26 @@ then
|
|||
exit 0
|
||||
fi
|
||||
echo "NOTE: $QEMU either did not run or was interactive" > $resdir/console.log
|
||||
echo $QEMU $qemu_args -m 512 -kernel $resdir/bzImage -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
|
||||
( $QEMU $qemu_args -m 512 -kernel $resdir/bzImage -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) &
|
||||
qemu_pid=$!
|
||||
echo $QEMU $qemu_args -m 512 -kernel $KERNEL -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
|
||||
( $QEMU $qemu_args -m 512 -kernel $KERNEL -append "$qemu_append $boot_args"& echo $! > $resdir/qemu_pid; wait `cat $resdir/qemu_pid`; echo $? > $resdir/qemu-retval ) &
|
||||
commandcompleted=0
|
||||
echo Monitoring qemu job at pid $qemu_pid
|
||||
sleep 10 # Give qemu's pid a chance to reach the file
|
||||
if test -s "$resdir/qemu_pid"
|
||||
then
|
||||
qemu_pid=`cat "$resdir/qemu_pid"`
|
||||
echo Monitoring qemu job at pid $qemu_pid
|
||||
else
|
||||
qemu_pid=""
|
||||
echo Monitoring qemu job at yet-as-unknown pid
|
||||
fi
|
||||
while :
|
||||
do
|
||||
if test -z "$qemu_pid" -a -s "$resdir/qemu_pid"
|
||||
then
|
||||
qemu_pid=`cat "$resdir/qemu_pid"`
|
||||
fi
|
||||
kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
|
||||
if kill -0 $qemu_pid > /dev/null 2>&1
|
||||
if test -z "$qemu_pid" || kill -0 "$qemu_pid" > /dev/null 2>&1
|
||||
then
|
||||
if test $kruntime -ge $seconds
|
||||
then
|
||||
|
|
@ -195,12 +217,16 @@ do
|
|||
ps -fp $killpid >> $resdir/Warnings 2>&1
|
||||
fi
|
||||
else
|
||||
echo ' ---' `date`: Kernel done
|
||||
echo ' ---' `date`: "Kernel done"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test $commandcompleted -eq 0
|
||||
if test -z "$qemu_pid" -a -s "$resdir/qemu_pid"
|
||||
then
|
||||
qemu_pid=`cat "$resdir/qemu_pid"`
|
||||
fi
|
||||
if test $commandcompleted -eq 0 -a -n "$qemu_pid"
|
||||
then
|
||||
echo Grace period for qemu job at pid $qemu_pid
|
||||
while :
|
||||
|
|
@ -220,6 +246,9 @@ then
|
|||
fi
|
||||
sleep 1
|
||||
done
|
||||
elif test -z "$qemu_pid"
|
||||
then
|
||||
echo Unknown PID, cannot kill qemu command
|
||||
fi
|
||||
|
||||
parse-torture.sh $resdir/console.log $title
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ T=/tmp/kvm.sh.$$
|
|||
trap 'rm -rf $T' 0
|
||||
mkdir $T
|
||||
|
||||
dur=30
|
||||
dur=$((30*60))
|
||||
dryrun=""
|
||||
KVM="`pwd`/tools/testing/selftests/rcutorture"; export KVM
|
||||
PATH=${KVM}/bin:$PATH; export PATH
|
||||
|
|
@ -48,6 +48,7 @@ resdir=""
|
|||
configs=""
|
||||
cpus=0
|
||||
ds=`date +%Y.%m.%d-%H:%M:%S`
|
||||
jitter=0
|
||||
|
||||
. functions.sh
|
||||
|
||||
|
|
@ -63,6 +64,7 @@ usage () {
|
|||
echo " --dryrun sched|script"
|
||||
echo " --duration minutes"
|
||||
echo " --interactive"
|
||||
echo " --jitter N [ maxsleep (us) [ maxspin (us) ] ]"
|
||||
echo " --kmake-arg kernel-make-arguments"
|
||||
echo " --mac nn:nn:nn:nn:nn:nn"
|
||||
echo " --no-initrd"
|
||||
|
|
@ -116,12 +118,17 @@ do
|
|||
;;
|
||||
--duration)
|
||||
checkarg --duration "(minutes)" $# "$2" '^[0-9]*$' '^error'
|
||||
dur=$2
|
||||
dur=$(($2*60))
|
||||
shift
|
||||
;;
|
||||
--interactive)
|
||||
TORTURE_QEMU_INTERACTIVE=1; export TORTURE_QEMU_INTERACTIVE
|
||||
;;
|
||||
--jitter)
|
||||
checkarg --jitter "(# threads [ sleep [ spin ] ])" $# "$2" '^-\{,1\}[0-9]\+\( \+[0-9]\+\)\{,2\} *$' '^error$'
|
||||
jitter="$2"
|
||||
shift
|
||||
;;
|
||||
--kmake-arg)
|
||||
checkarg --kmake-arg "(kernel make arguments)" $# "$2" '.*' '^error$'
|
||||
TORTURE_KMAKE_ARG="$2"
|
||||
|
|
@ -156,7 +163,7 @@ do
|
|||
shift
|
||||
;;
|
||||
--torture)
|
||||
checkarg --torture "(suite name)" "$#" "$2" '^\(lock\|rcu\)$' '^--'
|
||||
checkarg --torture "(suite name)" "$#" "$2" '^\(lock\|rcu\|rcuperf\)$' '^--'
|
||||
TORTURE_SUITE=$2
|
||||
shift
|
||||
;;
|
||||
|
|
@ -299,6 +306,7 @@ awk < $T/cfgcpu.pack \
|
|||
-v CONFIGDIR="$CONFIGFRAG/" \
|
||||
-v KVM="$KVM" \
|
||||
-v ncpus=$cpus \
|
||||
-v jitter="$jitter" \
|
||||
-v rd=$resdir/$ds/ \
|
||||
-v dur=$dur \
|
||||
-v TORTURE_QEMU_ARG="$TORTURE_QEMU_ARG" \
|
||||
|
|
@ -359,6 +367,16 @@ function dump(first, pastlast, batchnum)
|
|||
print "\techo ----", cfr[j], cpusr[j] ovf ": Starting kernel. `date` >> " rd "/log";
|
||||
print "fi"
|
||||
}
|
||||
njitter = 0;
|
||||
split(jitter, ja);
|
||||
if (ja[1] == -1 && ncpus == 0)
|
||||
njitter = 1;
|
||||
else if (ja[1] == -1)
|
||||
njitter = ncpus;
|
||||
else
|
||||
njitter = ja[1];
|
||||
for (j = 0; j < njitter; j++)
|
||||
print "jitter.sh " j " " dur " " ja[2] " " ja[3] "&"
|
||||
print "wait"
|
||||
print "if test -z \"$TORTURE_BUILDONLY\""
|
||||
print "then"
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ CONFIG_HOTPLUG_CPU=n
|
|||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_RCU_FANOUT=4
|
||||
CONFIG_RCU_FANOUT_LEAF=4
|
||||
CONFIG_RCU_FANOUT_LEAF=3
|
||||
CONFIG_RCU_NOCB_CPU=n
|
||||
CONFIG_DEBUG_LOCK_ALLOC=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
rcutorture.torture_type=rcu_bh
|
||||
rcutorture.torture_type=rcu_bh rcutree.rcu_fanout_leaf=4
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
TREE
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
CONFIG_RCU_PERF_TEST=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
20
tools/testing/selftests/rcutorture/configs/rcuperf/TREE
Normal file
20
tools/testing/selftests/rcutorture/configs/rcuperf/TREE
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
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_RCU_TRACE=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
|
||||
CONFIG_RCU_TRACE=y
|
||||
23
tools/testing/selftests/rcutorture/configs/rcuperf/TREE54
Normal file
23
tools/testing/selftests/rcutorture/configs/rcuperf/TREE54
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=54
|
||||
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_RCU_TRACE=n
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_RCU_FANOUT=3
|
||||
CONFIG_RCU_FANOUT_LEAF=2
|
||||
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
|
||||
CONFIG_RCU_TRACE=y
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Torture-suite-dependent shell functions for the rest of the scripts.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you can access it online at
|
||||
# http://www.gnu.org/licenses/gpl-2.0.html.
|
||||
#
|
||||
# Copyright (C) IBM Corporation, 2015
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
|
||||
# rcuperf_param_nreaders bootparam-string
|
||||
#
|
||||
# Adds nreaders rcuperf module parameter if not already specified.
|
||||
rcuperf_param_nreaders () {
|
||||
if ! echo "$1" | grep -q "rcuperf.nreaders"
|
||||
then
|
||||
echo rcuperf.nreaders=-1
|
||||
fi
|
||||
}
|
||||
|
||||
# rcuperf_param_nwriters bootparam-string
|
||||
#
|
||||
# Adds nwriters rcuperf module parameter if not already specified.
|
||||
rcuperf_param_nwriters () {
|
||||
if ! echo "$1" | grep -q "rcuperf.nwriters"
|
||||
then
|
||||
echo rcuperf.nwriters=-1
|
||||
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 `rcuperf_param_nreaders "$1"` \
|
||||
`rcuperf_param_nwriters "$1"` \
|
||||
rcuperf.perf_runnable=1 \
|
||||
rcuperf.shutdown=1 \
|
||||
rcuperf.verbose=1
|
||||
}
|
||||
Loading…
Reference in a new issue