RCU Torture Test Operation


CONFIG_RCU_TORTURE_TEST

The CONFIG_RCU_TORTURE_TEST config option is available for all RCU
implementations.  It creates an rcutorture kernel module that can
be loaded to run a torture test.  The test periodically outputs
status messages via printk(), which can be examined via the dmesg
command (perhaps grepping for "torture").  The test is started
when the module is loaded, and stops when the module is unloaded.

CONFIG_RCU_TORTURE_TEST_RUNNABLE

It is also possible to specify CONFIG_RCU_TORTURE_TEST=y, which will
result in the tests being loaded into the base kernel.  In this case,
the CONFIG_RCU_TORTURE_TEST_RUNNABLE config option is used to specify
whether the RCU torture tests are to be started immediately during
boot or whether the /proc/sys/kernel/rcutorture_runnable file is used
to enable them.  This /proc file can be used to repeatedly pause and
restart the tests, regardless of the initial state specified by the
CONFIG_RCU_TORTURE_TEST_RUNNABLE config option.

You will normally -not- want to start the RCU torture tests during boot
(and thus the default is CONFIG_RCU_TORTURE_TEST_RUNNABLE=n), but doing
this can sometimes be useful in finding boot-time bugs.


MODULE PARAMETERS

This module has the following parameters:

fqs_duration	Duration (in microseconds) of artificially induced bursts
		of force_quiescent_state() invocations.  In RCU
		implementations having force_quiescent_state(), these
		bursts help force races between forcing a given grace
		period and that grace period ending on its own.

fqs_holdoff	Holdoff time (in microseconds) between consecutive calls
		to force_quiescent_state() within a burst.

fqs_stutter	Wait time (in seconds) between consecutive bursts
		of calls to force_quiescent_state().

gp_normal	Make the fake writers use normal synchronous grace-period
		primitives.

gp_exp		Make the fake writers use expedited synchronous grace-period
		primitives.  If both gp_normal and gp_exp are set, or
		if neither gp_normal nor gp_exp are set, then randomly
		choose the primitive so that about 50% are normal and
		50% expedited.  By default, neither are set, which
		gives best overall test coverage.

irqreader	Says to invoke RCU readers from irq level.  This is currently
		done via timers.  Defaults to "1" for variants of RCU that
		permit this.  (Or, more accurately, variants of RCU that do
		-not- permit this know to ignore this variable.)

n_barrier_cbs	If this is nonzero, RCU barrier testing will be conducted,
		in which case n_barrier_cbs specifies the number of
		RCU callbacks (and corresponding kthreads) to use for
		this testing.  The value cannot be negative.  If you
		specify this to be non-zero when torture_type indicates a
		synchronous RCU implementation (one for which a member of
		the synchronize_rcu() rather than the call_rcu() family is
		used -- see the documentation for torture_type below), an
		error will be reported and no testing will be carried out.

nfakewriters	This is the number of RCU fake writer threads to run.  Fake
		writer threads repeatedly use the synchronous "wait for
		current readers" function of the interface selected by
		torture_type, with a delay between calls to allow for various
		different numbers of writers running in parallel.
		nfakewriters defaults to 4, which provides enough parallelism
		to trigger special cases caused by multiple writers, such as
		the synchronize_srcu() early return optimization.

nreaders	This is the number of RCU reading threads supported.
		The default is twice the number of CPUs.  Why twice?
		To properly exercise RCU implementations with preemptible
		read-side critical sections.

onoff_interval
		The number of seconds between each attempt to execute a
		randomly selected CPU-hotplug operation.  Defaults to
		zero, which disables CPU hotplugging.  In HOTPLUG_CPU=n
		kernels, rcutorture will silently refuse to do any
		CPU-hotplug operations regardless of what value is
		specified for onoff_interval.

onoff_holdoff	The number of seconds to wait until starting CPU-hotplug
		operations.  This would normally only be used when
		rcutorture was built into the kernel and started
		automatically at boot time, in which case it is useful
		in order to avoid confusing boot-time code with CPUs
		coming and going.

shuffle_interval
		The number of seconds to keep the test threads affinitied
		to a particular subset of the CPUs, defaults to 3 seconds.
		Used in conjunction with test_no_idle_hz.

shutdown_secs	The number of seconds to run the test before terminating
		the test and powering off the system.  The default is
		zero, which disables test termination and system shutdown.
		This capability is useful for automated testing.

stall_cpu	The number of seconds that a CPU should be stalled while
		within both an rcu_read_lock() and a preempt_disable().
		This stall happens only once per rcutorture run.
		If you need multiple stalls, use modprobe and rmmod to
		repeatedly run rcutorture.  The default for stall_cpu
		is zero, which prevents rcutorture from stalling a CPU.

		Note that attempts to rmmod rcutorture while the stall
		is ongoing will hang, so be careful what value you
		choose for this module parameter!  In addition, too-large
		values for stall_cpu might well induce failures and
		warnings in other parts of the kernel.  You have been
		warned!

stall_cpu_holdoff
		The number of seconds to wait after rcutorture starts
		before stalling a CPU.  Defaults to 10 seconds.

stat_interval	The number of seconds between output of torture
		statistics (via printk()).  Regardless of the interval,
		statistics are printed when the module is unloaded.
		Setting the interval to zero causes the statistics to
		be printed -only- when the module is unloaded, and this
		is the default.

stutter		The length of time to run the test before pausing for this
		same period of time.  Defaults to "stutter=5", so as
		to run and pause for (roughly) five-second intervals.
		Specifying "stutter=0" causes the test to run continuously
		without pausing, which is the old default behavior.

test_boost	Whether or not to test the ability of RCU to do priority
		boosting.  Defaults to "test_boost=1", which performs
		RCU priority-inversion testing only if the selected
		RCU implementation supports priority boosting.  Specifying
		"test_boost=0" never performs RCU priority-inversion
		testing.  Specifying "test_boost=2" performs RCU
		priority-inversion testing even if the selected RCU
		implementation does not support RCU priority boosting,
		which can be used to test rcutorture's ability to
		carry out RCU priority-inversion testing.

test_boost_interval
		The number of seconds in an RCU priority-inversion test
		cycle.	Defaults to "test_boost_interval=7".  It is
		usually wise for this value to be relatively prime to
		the value selected for "stutter".

test_boost_duration
		The number of seconds to do RCU priority-inversion testing
		within any given "test_boost_interval".  Defaults to
		"test_boost_duration=4".

test_no_idle_hz	Whether or not to test the ability of RCU to operate in
		a kernel that disables the scheduling-clock interrupt to
		idle CPUs.  Boolean parameter, "1" to test, "0" otherwise.
		Defaults to omitting this test.

torture_type	The type of RCU to test, with string values as follows:

		"rcu":  rcu_read_lock(), rcu_read_unlock() and call_rcu().

		"rcu_sync":  rcu_read_lock(), rcu_read_unlock(), and
			synchronize_rcu().

		"rcu_expedited": rcu_read_lock(), rcu_read_unlock(), and
			synchronize_rcu_expedited().

		"rcu_bh": rcu_read_lock_bh(), rcu_read_unlock_bh(), and
			call_rcu_bh().

		"rcu_bh_sync": rcu_read_lock_bh(), rcu_read_unlock_bh(),
			and synchronize_rcu_bh().

		"rcu_bh_expedited": rcu_read_lock_bh(), rcu_read_unlock_bh(),
			and synchronize_rcu_bh_expedited().

		"srcu": srcu_read_lock(), srcu_read_unlock() and
			call_srcu().

		"srcu_sync": srcu_read_lock(), srcu_read_unlock() and
			synchronize_srcu().

		"srcu_expedited": srcu_read_lock(), srcu_read_unlock() and
			synchronize_srcu_expedited().

		"sched": preempt_disable(), preempt_enable(), and
			call_rcu_sched().

		"sched_sync": preempt_disable(), preempt_enable(), and
			synchronize_sched().

		"sched_expedited": preempt_disable(), preempt_enable(), and
			synchronize_sched_expedited().

		Defaults to "rcu".

verbose		Enable debug printk()s.  Default is disabled.


OUTPUT

The statistics output is as follows:

	rcu-torture:--- Start of test: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4
	rcu-torture: rtc:           (null) ver: 155441 tfle: 0 rta: 155441 rtaf: 8884 rtf: 155440 rtmbe: 0 rtbe: 0 rtbke: 0 rtbre: 0 rtbf: 0 rtb: 0 nt: 3055767
	rcu-torture: Reader Pipe:  727860534 34213 0 0 0 0 0 0 0 0 0
	rcu-torture: Reader Batch:  727877838 17003 0 0 0 0 0 0 0 0 0
	rcu-torture: Free-Block Circulation:  155440 155440 155440 155440 155440 155440 155440 155440 155440 155440 0
	rcu-torture:--- End of test: SUCCESS: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4

The command "dmesg | grep torture:" will extract this information on
most systems.  On more esoteric configurations, it may be necessary to
use other commands to access the output of the printk()s used by
the RCU torture test.  The printk()s use KERN_ALERT, so they should
be evident.  ;-)

The first and last lines show the rcutorture module parameters, and the
last line shows either "SUCCESS" or "FAILURE", based on rcutorture's
automatic determination as to whether RCU operated correctly.

The entries are as follows:

o	"rtc": The hexadecimal address of the structure currently visible
	to readers.

o	"ver": The number of times since boot that the RCU writer task
	has changed the structure visible to readers.

o	"tfle": If non-zero, indicates that the "torture freelist"
	containing structures to be placed into the "rtc" area is empty.
	This condition is important, since it can fool you into thinking
	that RCU is working when it is not.  :-/

o	"rta": Number of structures allocated from the torture freelist.

o	"rtaf": Number of allocations from the torture freelist that have
	failed due to the list being empty.  It is not unusual for this
	to be non-zero, but it is bad for it to be a large fraction of
	the value indicated by "rta".

o	"rtf": Number of frees into the torture freelist.

o	"rtmbe": A non-zero value indicates that rcutorture believes that
	rcu_assign_pointer() and rcu_dereference() are not working
	correctly.  This value should be zero.

o	"rtbe": A non-zero value indicates that one of the rcu_barrier()
	family of functions is not working correctly.

o	"rtbke": rcutorture was unable to create the real-time kthreads
	used to force RCU priority inversion.  This value should be zero.

o	"rtbre": Although rcutorture successfully created the kthreads
	used to force RCU priority inversion, it was unable to set them
	to the real-time priority level of 1.  This value should be zero.

o	"rtbf": The number of times that RCU priority boosting failed
	to resolve RCU priority inversion.

o	"rtb": The number of times that rcutorture attempted to force
	an RCU priority inversion condition.  If you are testing RCU
	priority boosting via the "test_boost" module parameter, this
	value should be non-zero.

o	"nt": The number of times rcutorture ran RCU read-side code from
	within a timer handler.  This value should be non-zero only
	if you specified the "irqreader" module parameter.

o	"Reader Pipe": Histogram of "ages" of structures seen by readers.
	If any entries past the first two are non-zero, RCU is broken.
	And rcutorture prints the error flag string "!!!" to make sure
	you notice.  The age of a newly allocated structure is zero,
	it becomes one when removed from reader visibility, and is
	incremented once per grace period subsequently -- and is freed
	after passing through (RCU_TORTURE_PIPE_LEN-2) grace periods.

	The output displayed above was taken from a correctly working
	RCU.  If you want to see what it looks like when broken, break
	it yourself.  ;-)

o	"Reader Batch": Another histogram of "ages" of structures seen
	by readers, but in terms of counter flips (or batches) rather
	than in terms of grace periods.  The legal number of non-zero
	entries is again two.  The reason for this separate view is that
	it is sometimes easier to get the third entry to show up in the
	"Reader Batch" list than in the "Reader Pipe" list.

o	"Free-Block Circulation": Shows the number of torture structures
	that have reached a given point in the pipeline.  The first element
	should closely correspond to the number of structures allocated,
	the second to the number that have been removed from reader view,
	and all but the last remaining to the corresponding number of
	passes through a grace period.  The last entry should be zero,
	as it is only incremented if a torture structure's counter
	somehow gets incremented farther than it should.

Different implementations of RCU can provide implementation-specific
additional information.  For example, SRCU provides the following
additional line:

	srcu-torture: per-CPU(idx=1): 0(0,1) 1(0,1) 2(0,0) 3(0,1)

This line shows the per-CPU counter state.  The numbers in parentheses are
the values of the "old" and "current" counters for the corresponding CPU.
The "idx" value maps the "old" and "current" values to the underlying
array, and is useful for debugging.


USAGE

The following script may be used to torture RCU:

	#!/bin/sh

	modprobe rcutorture
	sleep 3600
	rmmod rcutorture
	dmesg | grep torture:

The output can be manually inspected for the error flag of "!!!".
One could of course create a more elaborate script that automatically
checked for such errors.  The "rmmod" command forces a "SUCCESS",
"FAILURE", or "RCU_HOTPLUG" indication to be printk()ed.  The first
two are self-explanatory, while the last indicates that while there
were no RCU failures, CPU-hotplug problems were detected.
