Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU updates from Ingo Molnar: "The main changes in this cycle were: - documentation updates - miscellaneous fixes - minor reorganization of code - torture-test updates" * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (30 commits) rcu: Correctly handle sparse possible cpus rcu: sysctl: Panic on RCU Stall rcu: Fix a typo in a comment rcu: Make call_rcu_tasks() tolerate first call with irqs disabled rcu: Disable TASKS_RCU for usermode Linux rcu: No ordering for rcu_assign_pointer() of NULL rcutorture: Fix error return code in rcu_perf_init() torture: Inflict default jitter rcuperf: Don't treat gp_exp mis-setting as a WARN rcutorture: Drop "-soundhw pcspkr" from x86 boot arguments rcutorture: Don't specify the cpu type of QEMU on PPC rcutorture: Make -soundhw a x86 specific option rcutorture: Use vmlinux as the fallback kernel image rcutorture/doc: Create initrd using dracut torture: Stop onoff task if there is only one cpu torture: Add starvation events to error summary torture: Break online and offline functions out of torture_onoff() torture: Forgive lengthy trace dumps and preemption torture: Remove CONFIG_RCU_TORTURE_TEST_RUNNABLE, simplify code torture: Simplify code, eliminate RCU_PERF_TEST_RUNNABLE ...
This commit is contained in:
@@ -99,8 +99,9 @@ configfrag_hotplug_cpu () {
|
||||
# identify_boot_image qemu-cmd
|
||||
#
|
||||
# Returns the relative path to the kernel build image. This will be
|
||||
# arch/<arch>/boot/bzImage unless overridden with the TORTURE_BOOT_IMAGE
|
||||
# environment variable.
|
||||
# arch/<arch>/boot/bzImage or vmlinux if bzImage is not a target for the
|
||||
# architecture, unless overridden with the TORTURE_BOOT_IMAGE environment
|
||||
# variable.
|
||||
identify_boot_image () {
|
||||
if test -n "$TORTURE_BOOT_IMAGE"
|
||||
then
|
||||
@@ -110,11 +111,8 @@ identify_boot_image () {
|
||||
qemu-system-x86_64|qemu-system-i386)
|
||||
echo arch/x86/boot/bzImage
|
||||
;;
|
||||
qemu-system-ppc64)
|
||||
echo arch/powerpc/boot/bzImage
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo vmlinux
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -175,7 +173,7 @@ identify_qemu_args () {
|
||||
qemu-system-x86_64|qemu-system-i386)
|
||||
;;
|
||||
qemu-system-ppc64)
|
||||
echo -enable-kvm -M pseries -cpu POWER7 -nodefaults
|
||||
echo -enable-kvm -M pseries -nodefaults
|
||||
echo -device spapr-vscsi
|
||||
if test -n "$TORTURE_QEMU_INTERACTIVE" -a -n "$TORTURE_QEMU_MAC"
|
||||
then
|
||||
|
@@ -8,9 +8,9 @@
|
||||
#
|
||||
# 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
|
||||
# options generated from the underlying CPU architecture.
|
||||
# qemu-args defaults to "-enable-kvm -nographic", along with arguments
|
||||
# specifying the number of CPUs and other options
|
||||
# generated from the underlying CPU architecture.
|
||||
# boot_args defaults to value returned by the per_version_boot_params
|
||||
# shell function.
|
||||
#
|
||||
@@ -96,7 +96,8 @@ if test "$base_resdir" != "$resdir" -a -f $base_resdir/bzImage -a -f $base_resdi
|
||||
then
|
||||
# Rerunning previous test, so use that test's kernel.
|
||||
QEMU="`identify_qemu $base_resdir/vmlinux`"
|
||||
KERNEL=$base_resdir/bzImage
|
||||
BOOT_IMAGE="`identify_boot_image $QEMU`"
|
||||
KERNEL=$base_resdir/${BOOT_IMAGE##*/} # use the last component of ${BOOT_IMAGE}
|
||||
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
|
||||
@@ -110,7 +111,7 @@ then
|
||||
if test -n "$BOOT_IMAGE"
|
||||
then
|
||||
cp $builddir/$BOOT_IMAGE $resdir
|
||||
KERNEL=$resdir/bzImage
|
||||
KERNEL=$resdir/${BOOT_IMAGE##*/}
|
||||
else
|
||||
echo No identifiable boot image, not running KVM, see $resdir.
|
||||
echo Do the torture scripts know about your architecture?
|
||||
@@ -147,7 +148,7 @@ then
|
||||
fi
|
||||
|
||||
# Generate -smp qemu argument.
|
||||
qemu_args="-enable-kvm -soundhw pcspk -nographic $qemu_args"
|
||||
qemu_args="-enable-kvm -nographic $qemu_args"
|
||||
cpu_count=`configNR_CPUS.sh $config_template`
|
||||
cpu_count=`configfrag_boot_cpus "$boot_args" "$config_template" "$cpu_count"`
|
||||
vcpus=`identify_qemu_vcpus`
|
||||
@@ -229,6 +230,7 @@ fi
|
||||
if test $commandcompleted -eq 0 -a -n "$qemu_pid"
|
||||
then
|
||||
echo Grace period for qemu job at pid $qemu_pid
|
||||
oldline="`tail $resdir/console.log`"
|
||||
while :
|
||||
do
|
||||
kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
|
||||
@@ -238,13 +240,29 @@ then
|
||||
else
|
||||
break
|
||||
fi
|
||||
if test $kruntime -ge $((seconds + $TORTURE_SHUTDOWN_GRACE))
|
||||
must_continue=no
|
||||
newline="`tail $resdir/console.log`"
|
||||
if test "$newline" != "$oldline" && echo $newline | grep -q ' [0-9]\+us : '
|
||||
then
|
||||
must_continue=yes
|
||||
fi
|
||||
last_ts="`tail $resdir/console.log | grep '^\[ *[0-9]\+\.[0-9]\+]' | tail -1 | sed -e 's/^\[ *//' -e 's/\..*$//'`"
|
||||
if test -z "last_ts"
|
||||
then
|
||||
last_ts=0
|
||||
fi
|
||||
if test "$newline" != "$oldline" -a "$last_ts" -lt $((seconds + $TORTURE_SHUTDOWN_GRACE))
|
||||
then
|
||||
must_continue=yes
|
||||
fi
|
||||
if test $must_continue = no -a $kruntime -ge $((seconds + $TORTURE_SHUTDOWN_GRACE))
|
||||
then
|
||||
echo "!!! PID $qemu_pid hung at $kruntime vs. $seconds seconds" >> $resdir/Warnings 2>&1
|
||||
kill -KILL $qemu_pid
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
oldline=$newline
|
||||
sleep 10
|
||||
done
|
||||
elif test -z "$qemu_pid"
|
||||
then
|
||||
|
@@ -48,7 +48,7 @@ resdir=""
|
||||
configs=""
|
||||
cpus=0
|
||||
ds=`date +%Y.%m.%d-%H:%M:%S`
|
||||
jitter=0
|
||||
jitter="-1"
|
||||
|
||||
. functions.sh
|
||||
|
||||
|
@@ -33,7 +33,7 @@ if grep -Pq '\x00' < $file
|
||||
then
|
||||
print_warning Console output contains nul bytes, old qemu still running?
|
||||
fi
|
||||
egrep 'Badness|WARNING:|Warn|BUG|===========|Call Trace:|Oops:|detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state' < $file | grep -v 'ODEBUG: ' | grep -v 'Warning: unable to open an initial console' > $1.diags
|
||||
egrep 'Badness|WARNING:|Warn|BUG|===========|Call Trace:|Oops:|detected stalls on CPUs/tasks:|self-detected stall on CPU|Stall ended before state dump start|\?\?\? Writer stall state|rcu_.*kthread starved for' < $file | grep -v 'ODEBUG: ' | grep -v 'Warning: unable to open an initial console' > $1.diags
|
||||
if test -s $1.diags
|
||||
then
|
||||
print_warning Assertion failure in $file $title
|
||||
@@ -69,6 +69,11 @@ then
|
||||
then
|
||||
summary="$summary Stalls: $n_stalls"
|
||||
fi
|
||||
n_starves=`grep -c 'rcu_.*kthread starved for' $1`
|
||||
if test "$n_starves" -ne 0
|
||||
then
|
||||
summary="$summary Starves: $n_starves"
|
||||
fi
|
||||
print_warning Summary: $summary
|
||||
else
|
||||
rm $1.diags
|
||||
|
@@ -13,6 +13,22 @@ cd initrd
|
||||
cpio -id < /tmp/initrd.img.zcat
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Another way to create an initramfs image is using "dracut"[1], which is
|
||||
available on many distros, however the initramfs dracut generates is a cpio
|
||||
archive with another cpio archive in it, so an extra step is needed to create
|
||||
the initrd directory hierarchy.
|
||||
|
||||
Here are the commands to create a initrd directory for rcutorture using
|
||||
dracut:
|
||||
|
||||
------------------------------------------------------------------------
|
||||
dracut --no-hostonly --no-hostonly-cmdline --module "base bash shutdown" /tmp/initramfs.img
|
||||
cd tools/testing/selftests/rcutorture
|
||||
mkdir initrd
|
||||
cd initrd
|
||||
/usr/lib/dracut/skipcpio /tmp/initramfs.img | zcat | cpio -id < /tmp/initramfs.img
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Interestingly enough, if you are running rcutorture, you don't really
|
||||
need userspace in many cases. Running without userspace has the
|
||||
advantage of allowing you to test your kernel independently of the
|
||||
@@ -89,3 +105,9 @@ while :
|
||||
do
|
||||
sleep 10
|
||||
done
|
||||
------------------------------------------------------------------------
|
||||
|
||||
References:
|
||||
[1]: https://dracut.wiki.kernel.org/index.php/Main_Page
|
||||
[2]: http://blog.elastocloud.org/2015/06/rapid-linux-kernel-devtest-with-qemu.html
|
||||
[3]: https://www.centos.org/forums/viewtopic.php?t=51621
|
||||
|
Reference in New Issue
Block a user