⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 torture.txt

📁 linux 内核源代码
💻 TXT
字号:
RCU Torture Test OperationCONFIG_RCU_TORTURE_TESTThe CONFIG_RCU_TORTURE_TEST config option is available for all RCUimplementations.  It creates an rcutorture kernel module that canbe loaded to run a torture test.  The test periodically outputsstatus messages via printk(), which can be examined via the dmesgcommand (perhaps grepping for "torture").  The test is startedwhen the module is loaded, and stops when the module is unloaded.However, actually setting this config option to "y" results in the systemrunning the test immediately upon boot, and ending only when the systemis taken down.  Normally, one will instead want to build the systemwith CONFIG_RCU_TORTURE_TEST=m and to use modprobe and rmmod to controlthe test, perhaps using a script similar to the one shown at the end ofthis document.  Note that you will need CONFIG_MODULE_UNLOAD in orderto be able to end the test.MODULE PARAMETERSThis module has the following parameters: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.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.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.shuffle_interval		The number of seconds to keep the test threads affinitied		to a particular subset of the CPUs.  Used in conjunction		with test_no_idle_hz.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.torture_type	The type of RCU to test: "rcu" for the rcu_read_lock() API,		"rcu_sync" for rcu_read_lock() with synchronous reclamation,		"rcu_bh" for the rcu_read_lock_bh() API, "rcu_bh_sync" for		rcu_read_lock_bh() with synchronous reclamation, "srcu" for		the "srcu_read_lock()" API, and "sched" for the use of		preempt_disable() together with synchronize_sched().verbose		Enable debug printk()s.  Default is disabled.OUTPUTThe statistics output is as follows:	rcu-torture: --- Start of test: nreaders=16 stat_interval=0 verbose=0	rcu-torture: rtc: 0000000000000000 ver: 1916 tfle: 0 rta: 1916 rtaf: 0 rtf: 1915	rcu-torture: Reader Pipe:  1466408 9747 0 0 0 0 0 0 0 0 0	rcu-torture: Reader Batch:  1464477 11678 0 0 0 0 0 0 0 0	rcu-torture: Free-Block Circulation:  1915 1915 1915 1915 1915 1915 1915 1915 1915 1915 0	rcu-torture: --- End of testThe command "dmesg | grep torture:" will extract this information onmost systems.  On more esoteric configurations, it may be necessary touse other commands to access the output of the printk()s used bythe RCU torture test.  The printk()s use KERN_ALERT, so they shouldbe evident.  ;-)The entries are as follows:o	"ggp": The number of counter flips (or batches) since boot.o	"rtc": The hexadecimal address of the structure currently visible	to readers.o	"ver": The number of times since boot that the rcutw writer task	has changed the structure visible to readers.o	"tfle": If non-zero, indicates that the "torture freelist"	containing structure 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.o	"rtf": Number of frees into the torture freelist.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 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-specificadditional information.  For example, SRCU provides the following:	srcu-torture: rtc: f8cf46a8 ver: 355 tfle: 0 rta: 356 rtaf: 0 rtf: 346 rtmbe: 0	srcu-torture: Reader Pipe:  559738 939 0 0 0 0 0 0 0 0 0	srcu-torture: Reader Batch:  560434 243 0 0 0 0 0 0 0 0	srcu-torture: Free-Block Circulation:  355 354 353 352 351 350 349 348 347 346 0	srcu-torture: per-CPU(idx=1): 0(0,1) 1(0,1) 2(0,0) 3(0,1)The first four lines are similar to those for RCU.  The last line showsthe per-CPU counter state.  The numbers in parentheses are the valuesof 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.USAGEThe following script may be used to torture RCU:	#!/bin/sh	modprobe rcutorture	sleep 100	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 automaticallychecked for such errors.  The "rmmod" command forces a "SUCCESS" or"FAILURE" indication to be printk()ed.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -