xref: /OK3568_Linux_fs/kernel/Documentation/admin-guide/kernel-per-CPU-kthreads.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun==========================================
2*4882a593SmuzhiyunReducing OS jitter due to per-cpu kthreads
3*4882a593Smuzhiyun==========================================
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunThis document lists per-CPU kthreads in the Linux kernel and presents
6*4882a593Smuzhiyunoptions to control their OS jitter.  Note that non-per-CPU kthreads are
7*4882a593Smuzhiyunnot listed here.  To reduce OS jitter from non-per-CPU kthreads, bind
8*4882a593Smuzhiyunthem to a "housekeeping" CPU dedicated to such work.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunReferences
11*4882a593Smuzhiyun==========
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun-	Documentation/core-api/irq/irq-affinity.rst:  Binding interrupts to sets of CPUs.
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun-	Documentation/admin-guide/cgroup-v1:  Using cgroups to bind tasks to sets of CPUs.
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun-	man taskset:  Using the taskset command to bind tasks to sets
18*4882a593Smuzhiyun	of CPUs.
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun-	man sched_setaffinity:  Using the sched_setaffinity() system
21*4882a593Smuzhiyun	call to bind tasks to sets of CPUs.
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun-	/sys/devices/system/cpu/cpuN/online:  Control CPU N's hotplug state,
24*4882a593Smuzhiyun	writing "0" to offline and "1" to online.
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun-	In order to locate kernel-generated OS jitter on CPU N:
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun		cd /sys/kernel/debug/tracing
29*4882a593Smuzhiyun		echo 1 > max_graph_depth # Increase the "1" for more detail
30*4882a593Smuzhiyun		echo function_graph > current_tracer
31*4882a593Smuzhiyun		# run workload
32*4882a593Smuzhiyun		cat per_cpu/cpuN/trace
33*4882a593Smuzhiyun
34*4882a593Smuzhiyunkthreads
35*4882a593Smuzhiyun========
36*4882a593Smuzhiyun
37*4882a593SmuzhiyunName:
38*4882a593Smuzhiyun  ehca_comp/%u
39*4882a593Smuzhiyun
40*4882a593SmuzhiyunPurpose:
41*4882a593Smuzhiyun  Periodically process Infiniband-related work.
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunTo reduce its OS jitter, do any of the following:
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun1.	Don't use eHCA Infiniband hardware, instead choosing hardware
46*4882a593Smuzhiyun	that does not require per-CPU kthreads.  This will prevent these
47*4882a593Smuzhiyun	kthreads from being created in the first place.  (This will
48*4882a593Smuzhiyun	work for most people, as this hardware, though important, is
49*4882a593Smuzhiyun	relatively old and is produced in relatively low unit volumes.)
50*4882a593Smuzhiyun2.	Do all eHCA-Infiniband-related work on other CPUs, including
51*4882a593Smuzhiyun	interrupts.
52*4882a593Smuzhiyun3.	Rework the eHCA driver so that its per-CPU kthreads are
53*4882a593Smuzhiyun	provisioned only on selected CPUs.
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun
56*4882a593SmuzhiyunName:
57*4882a593Smuzhiyun  irq/%d-%s
58*4882a593Smuzhiyun
59*4882a593SmuzhiyunPurpose:
60*4882a593Smuzhiyun  Handle threaded interrupts.
61*4882a593Smuzhiyun
62*4882a593SmuzhiyunTo reduce its OS jitter, do the following:
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun1.	Use irq affinity to force the irq threads to execute on
65*4882a593Smuzhiyun	some other CPU.
66*4882a593Smuzhiyun
67*4882a593SmuzhiyunName:
68*4882a593Smuzhiyun  kcmtpd_ctr_%d
69*4882a593Smuzhiyun
70*4882a593SmuzhiyunPurpose:
71*4882a593Smuzhiyun  Handle Bluetooth work.
72*4882a593Smuzhiyun
73*4882a593SmuzhiyunTo reduce its OS jitter, do one of the following:
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun1.	Don't use Bluetooth, in which case these kthreads won't be
76*4882a593Smuzhiyun	created in the first place.
77*4882a593Smuzhiyun2.	Use irq affinity to force Bluetooth-related interrupts to
78*4882a593Smuzhiyun	occur on some other CPU and furthermore initiate all
79*4882a593Smuzhiyun	Bluetooth activity on some other CPU.
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunName:
82*4882a593Smuzhiyun  ksoftirqd/%u
83*4882a593Smuzhiyun
84*4882a593SmuzhiyunPurpose:
85*4882a593Smuzhiyun  Execute softirq handlers when threaded or when under heavy load.
86*4882a593Smuzhiyun
87*4882a593SmuzhiyunTo reduce its OS jitter, each softirq vector must be handled
88*4882a593Smuzhiyunseparately as follows:
89*4882a593Smuzhiyun
90*4882a593SmuzhiyunTIMER_SOFTIRQ
91*4882a593Smuzhiyun-------------
92*4882a593Smuzhiyun
93*4882a593SmuzhiyunDo all of the following:
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun1.	To the extent possible, keep the CPU out of the kernel when it
96*4882a593Smuzhiyun	is non-idle, for example, by avoiding system calls and by forcing
97*4882a593Smuzhiyun	both kernel threads and interrupts to execute elsewhere.
98*4882a593Smuzhiyun2.	Build with CONFIG_HOTPLUG_CPU=y.  After boot completes, force
99*4882a593Smuzhiyun	the CPU offline, then bring it back online.  This forces
100*4882a593Smuzhiyun	recurring timers to migrate elsewhere.	If you are concerned
101*4882a593Smuzhiyun	with multiple CPUs, force them all offline before bringing the
102*4882a593Smuzhiyun	first one back online.  Once you have onlined the CPUs in question,
103*4882a593Smuzhiyun	do not offline any other CPUs, because doing so could force the
104*4882a593Smuzhiyun	timer back onto one of the CPUs in question.
105*4882a593Smuzhiyun
106*4882a593SmuzhiyunNET_TX_SOFTIRQ and NET_RX_SOFTIRQ
107*4882a593Smuzhiyun---------------------------------
108*4882a593Smuzhiyun
109*4882a593SmuzhiyunDo all of the following:
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun1.	Force networking interrupts onto other CPUs.
112*4882a593Smuzhiyun2.	Initiate any network I/O on other CPUs.
113*4882a593Smuzhiyun3.	Once your application has started, prevent CPU-hotplug operations
114*4882a593Smuzhiyun	from being initiated from tasks that might run on the CPU to
115*4882a593Smuzhiyun	be de-jittered.  (It is OK to force this CPU offline and then
116*4882a593Smuzhiyun	bring it back online before you start your application.)
117*4882a593Smuzhiyun
118*4882a593SmuzhiyunBLOCK_SOFTIRQ
119*4882a593Smuzhiyun-------------
120*4882a593Smuzhiyun
121*4882a593SmuzhiyunDo all of the following:
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun1.	Force block-device interrupts onto some other CPU.
124*4882a593Smuzhiyun2.	Initiate any block I/O on other CPUs.
125*4882a593Smuzhiyun3.	Once your application has started, prevent CPU-hotplug operations
126*4882a593Smuzhiyun	from being initiated from tasks that might run on the CPU to
127*4882a593Smuzhiyun	be de-jittered.  (It is OK to force this CPU offline and then
128*4882a593Smuzhiyun	bring it back online before you start your application.)
129*4882a593Smuzhiyun
130*4882a593SmuzhiyunIRQ_POLL_SOFTIRQ
131*4882a593Smuzhiyun----------------
132*4882a593Smuzhiyun
133*4882a593SmuzhiyunDo all of the following:
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun1.	Force block-device interrupts onto some other CPU.
136*4882a593Smuzhiyun2.	Initiate any block I/O and block-I/O polling on other CPUs.
137*4882a593Smuzhiyun3.	Once your application has started, prevent CPU-hotplug operations
138*4882a593Smuzhiyun	from being initiated from tasks that might run on the CPU to
139*4882a593Smuzhiyun	be de-jittered.  (It is OK to force this CPU offline and then
140*4882a593Smuzhiyun	bring it back online before you start your application.)
141*4882a593Smuzhiyun
142*4882a593SmuzhiyunTASKLET_SOFTIRQ
143*4882a593Smuzhiyun---------------
144*4882a593Smuzhiyun
145*4882a593SmuzhiyunDo one or more of the following:
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun1.	Avoid use of drivers that use tasklets.  (Such drivers will contain
148*4882a593Smuzhiyun	calls to things like tasklet_schedule().)
149*4882a593Smuzhiyun2.	Convert all drivers that you must use from tasklets to workqueues.
150*4882a593Smuzhiyun3.	Force interrupts for drivers using tasklets onto other CPUs,
151*4882a593Smuzhiyun	and also do I/O involving these drivers on other CPUs.
152*4882a593Smuzhiyun
153*4882a593SmuzhiyunSCHED_SOFTIRQ
154*4882a593Smuzhiyun-------------
155*4882a593Smuzhiyun
156*4882a593SmuzhiyunDo all of the following:
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun1.	Avoid sending scheduler IPIs to the CPU to be de-jittered,
159*4882a593Smuzhiyun	for example, ensure that at most one runnable kthread is present
160*4882a593Smuzhiyun	on that CPU.  If a thread that expects to run on the de-jittered
161*4882a593Smuzhiyun	CPU awakens, the scheduler will send an IPI that can result in
162*4882a593Smuzhiyun	a subsequent SCHED_SOFTIRQ.
163*4882a593Smuzhiyun2.	CONFIG_NO_HZ_FULL=y and ensure that the CPU to be de-jittered
164*4882a593Smuzhiyun	is marked as an adaptive-ticks CPU using the "nohz_full="
165*4882a593Smuzhiyun	boot parameter.  This reduces the number of scheduler-clock
166*4882a593Smuzhiyun	interrupts that the de-jittered CPU receives, minimizing its
167*4882a593Smuzhiyun	chances of being selected to do the load balancing work that
168*4882a593Smuzhiyun	runs in SCHED_SOFTIRQ context.
169*4882a593Smuzhiyun3.	To the extent possible, keep the CPU out of the kernel when it
170*4882a593Smuzhiyun	is non-idle, for example, by avoiding system calls and by
171*4882a593Smuzhiyun	forcing both kernel threads and interrupts to execute elsewhere.
172*4882a593Smuzhiyun	This further reduces the number of scheduler-clock interrupts
173*4882a593Smuzhiyun	received by the de-jittered CPU.
174*4882a593Smuzhiyun
175*4882a593SmuzhiyunHRTIMER_SOFTIRQ
176*4882a593Smuzhiyun---------------
177*4882a593Smuzhiyun
178*4882a593SmuzhiyunDo all of the following:
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun1.	To the extent possible, keep the CPU out of the kernel when it
181*4882a593Smuzhiyun	is non-idle.  For example, avoid system calls and force both
182*4882a593Smuzhiyun	kernel threads and interrupts to execute elsewhere.
183*4882a593Smuzhiyun2.	Build with CONFIG_HOTPLUG_CPU=y.  Once boot completes, force the
184*4882a593Smuzhiyun	CPU offline, then bring it back online.  This forces recurring
185*4882a593Smuzhiyun	timers to migrate elsewhere.  If you are concerned with multiple
186*4882a593Smuzhiyun	CPUs, force them all offline before bringing the first one
187*4882a593Smuzhiyun	back online.  Once you have onlined the CPUs in question, do not
188*4882a593Smuzhiyun	offline any other CPUs, because doing so could force the timer
189*4882a593Smuzhiyun	back onto one of the CPUs in question.
190*4882a593Smuzhiyun
191*4882a593SmuzhiyunRCU_SOFTIRQ
192*4882a593Smuzhiyun-----------
193*4882a593Smuzhiyun
194*4882a593SmuzhiyunDo at least one of the following:
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun1.	Offload callbacks and keep the CPU in either dyntick-idle or
197*4882a593Smuzhiyun	adaptive-ticks state by doing all of the following:
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun	a.	CONFIG_NO_HZ_FULL=y and ensure that the CPU to be
200*4882a593Smuzhiyun		de-jittered is marked as an adaptive-ticks CPU using the
201*4882a593Smuzhiyun		"nohz_full=" boot parameter.  Bind the rcuo kthreads to
202*4882a593Smuzhiyun		housekeeping CPUs, which can tolerate OS jitter.
203*4882a593Smuzhiyun	b.	To the extent possible, keep the CPU out of the kernel
204*4882a593Smuzhiyun		when it is non-idle, for example, by avoiding system
205*4882a593Smuzhiyun		calls and by forcing both kernel threads and interrupts
206*4882a593Smuzhiyun		to execute elsewhere.
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun2.	Enable RCU to do its processing remotely via dyntick-idle by
209*4882a593Smuzhiyun	doing all of the following:
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun	a.	Build with CONFIG_NO_HZ=y and CONFIG_RCU_FAST_NO_HZ=y.
212*4882a593Smuzhiyun	b.	Ensure that the CPU goes idle frequently, allowing other
213*4882a593Smuzhiyun		CPUs to detect that it has passed through an RCU quiescent
214*4882a593Smuzhiyun		state.	If the kernel is built with CONFIG_NO_HZ_FULL=y,
215*4882a593Smuzhiyun		userspace execution also allows other CPUs to detect that
216*4882a593Smuzhiyun		the CPU in question has passed through a quiescent state.
217*4882a593Smuzhiyun	c.	To the extent possible, keep the CPU out of the kernel
218*4882a593Smuzhiyun		when it is non-idle, for example, by avoiding system
219*4882a593Smuzhiyun		calls and by forcing both kernel threads and interrupts
220*4882a593Smuzhiyun		to execute elsewhere.
221*4882a593Smuzhiyun
222*4882a593SmuzhiyunName:
223*4882a593Smuzhiyun  kworker/%u:%d%s (cpu, id, priority)
224*4882a593Smuzhiyun
225*4882a593SmuzhiyunPurpose:
226*4882a593Smuzhiyun  Execute workqueue requests
227*4882a593Smuzhiyun
228*4882a593SmuzhiyunTo reduce its OS jitter, do any of the following:
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun1.	Run your workload at a real-time priority, which will allow
231*4882a593Smuzhiyun	preempting the kworker daemons.
232*4882a593Smuzhiyun2.	A given workqueue can be made visible in the sysfs filesystem
233*4882a593Smuzhiyun	by passing the WQ_SYSFS to that workqueue's alloc_workqueue().
234*4882a593Smuzhiyun	Such a workqueue can be confined to a given subset of the
235*4882a593Smuzhiyun	CPUs using the ``/sys/devices/virtual/workqueue/*/cpumask`` sysfs
236*4882a593Smuzhiyun	files.	The set of WQ_SYSFS workqueues can be displayed using
237*4882a593Smuzhiyun	"ls /sys/devices/virtual/workqueue".  That said, the workqueues
238*4882a593Smuzhiyun	maintainer would like to caution people against indiscriminately
239*4882a593Smuzhiyun	sprinkling WQ_SYSFS across all the workqueues.	The reason for
240*4882a593Smuzhiyun	caution is that it is easy to add WQ_SYSFS, but because sysfs is
241*4882a593Smuzhiyun	part of the formal user/kernel API, it can be nearly impossible
242*4882a593Smuzhiyun	to remove it, even if its addition was a mistake.
243*4882a593Smuzhiyun3.	Do any of the following needed to avoid jitter that your
244*4882a593Smuzhiyun	application cannot tolerate:
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun	a.	Build your kernel with CONFIG_SLUB=y rather than
247*4882a593Smuzhiyun		CONFIG_SLAB=y, thus avoiding the slab allocator's periodic
248*4882a593Smuzhiyun		use of each CPU's workqueues to run its cache_reap()
249*4882a593Smuzhiyun		function.
250*4882a593Smuzhiyun	b.	Avoid using oprofile, thus avoiding OS jitter from
251*4882a593Smuzhiyun		wq_sync_buffer().
252*4882a593Smuzhiyun	c.	Limit your CPU frequency so that a CPU-frequency
253*4882a593Smuzhiyun		governor is not required, possibly enlisting the aid of
254*4882a593Smuzhiyun		special heatsinks or other cooling technologies.  If done
255*4882a593Smuzhiyun		correctly, and if you CPU architecture permits, you should
256*4882a593Smuzhiyun		be able to build your kernel with CONFIG_CPU_FREQ=n to
257*4882a593Smuzhiyun		avoid the CPU-frequency governor periodically running
258*4882a593Smuzhiyun		on each CPU, including cs_dbs_timer() and od_dbs_timer().
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun		WARNING:  Please check your CPU specifications to
261*4882a593Smuzhiyun		make sure that this is safe on your particular system.
262*4882a593Smuzhiyun	d.	As of v3.18, Christoph Lameter's on-demand vmstat workers
263*4882a593Smuzhiyun		commit prevents OS jitter due to vmstat_update() on
264*4882a593Smuzhiyun		CONFIG_SMP=y systems.  Before v3.18, is not possible
265*4882a593Smuzhiyun		to entirely get rid of the OS jitter, but you can
266*4882a593Smuzhiyun		decrease its frequency by writing a large value to
267*4882a593Smuzhiyun		/proc/sys/vm/stat_interval.  The default value is HZ,
268*4882a593Smuzhiyun		for an interval of one second.	Of course, larger values
269*4882a593Smuzhiyun		will make your virtual-memory statistics update more
270*4882a593Smuzhiyun		slowly.  Of course, you can also run your workload at
271*4882a593Smuzhiyun		a real-time priority, thus preempting vmstat_update(),
272*4882a593Smuzhiyun		but if your workload is CPU-bound, this is a bad idea.
273*4882a593Smuzhiyun		However, there is an RFC patch from Christoph Lameter
274*4882a593Smuzhiyun		(based on an earlier one from Gilad Ben-Yossef) that
275*4882a593Smuzhiyun		reduces or even eliminates vmstat overhead for some
276*4882a593Smuzhiyun		workloads at https://lkml.org/lkml/2013/9/4/379.
277*4882a593Smuzhiyun	e.	If running on high-end powerpc servers, build with
278*4882a593Smuzhiyun		CONFIG_PPC_RTAS_DAEMON=n.  This prevents the RTAS
279*4882a593Smuzhiyun		daemon from running on each CPU every second or so.
280*4882a593Smuzhiyun		(This will require editing Kconfig files and will defeat
281*4882a593Smuzhiyun		this platform's RAS functionality.)  This avoids jitter
282*4882a593Smuzhiyun		due to the rtas_event_scan() function.
283*4882a593Smuzhiyun		WARNING:  Please check your CPU specifications to
284*4882a593Smuzhiyun		make sure that this is safe on your particular system.
285*4882a593Smuzhiyun	f.	If running on Cell Processor, build your kernel with
286*4882a593Smuzhiyun		CBE_CPUFREQ_SPU_GOVERNOR=n to avoid OS jitter from
287*4882a593Smuzhiyun		spu_gov_work().
288*4882a593Smuzhiyun		WARNING:  Please check your CPU specifications to
289*4882a593Smuzhiyun		make sure that this is safe on your particular system.
290*4882a593Smuzhiyun	g.	If running on PowerMAC, build your kernel with
291*4882a593Smuzhiyun		CONFIG_PMAC_RACKMETER=n to disable the CPU-meter,
292*4882a593Smuzhiyun		avoiding OS jitter from rackmeter_do_timer().
293*4882a593Smuzhiyun
294*4882a593SmuzhiyunName:
295*4882a593Smuzhiyun  rcuc/%u
296*4882a593Smuzhiyun
297*4882a593SmuzhiyunPurpose:
298*4882a593Smuzhiyun  Execute RCU callbacks in CONFIG_RCU_BOOST=y kernels.
299*4882a593Smuzhiyun
300*4882a593SmuzhiyunTo reduce its OS jitter, do at least one of the following:
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun1.	Build the kernel with CONFIG_PREEMPT=n.  This prevents these
303*4882a593Smuzhiyun	kthreads from being created in the first place, and also obviates
304*4882a593Smuzhiyun	the need for RCU priority boosting.  This approach is feasible
305*4882a593Smuzhiyun	for workloads that do not require high degrees of responsiveness.
306*4882a593Smuzhiyun2.	Build the kernel with CONFIG_RCU_BOOST=n.  This prevents these
307*4882a593Smuzhiyun	kthreads from being created in the first place.  This approach
308*4882a593Smuzhiyun	is feasible only if your workload never requires RCU priority
309*4882a593Smuzhiyun	boosting, for example, if you ensure frequent idle time on all
310*4882a593Smuzhiyun	CPUs that might execute within the kernel.
311*4882a593Smuzhiyun3.	Build with CONFIG_RCU_NOCB_CPU=y and boot with the rcu_nocbs=
312*4882a593Smuzhiyun	boot parameter offloading RCU callbacks from all CPUs susceptible
313*4882a593Smuzhiyun	to OS jitter.  This approach prevents the rcuc/%u kthreads from
314*4882a593Smuzhiyun	having any work to do, so that they are never awakened.
315*4882a593Smuzhiyun4.	Ensure that the CPU never enters the kernel, and, in particular,
316*4882a593Smuzhiyun	avoid initiating any CPU hotplug operations on this CPU.  This is
317*4882a593Smuzhiyun	another way of preventing any callbacks from being queued on the
318*4882a593Smuzhiyun	CPU, again preventing the rcuc/%u kthreads from having any work
319*4882a593Smuzhiyun	to do.
320*4882a593Smuzhiyun
321*4882a593SmuzhiyunName:
322*4882a593Smuzhiyun  rcuop/%d and rcuos/%d
323*4882a593Smuzhiyun
324*4882a593SmuzhiyunPurpose:
325*4882a593Smuzhiyun  Offload RCU callbacks from the corresponding CPU.
326*4882a593Smuzhiyun
327*4882a593SmuzhiyunTo reduce its OS jitter, do at least one of the following:
328*4882a593Smuzhiyun
329*4882a593Smuzhiyun1.	Use affinity, cgroups, or other mechanism to force these kthreads
330*4882a593Smuzhiyun	to execute on some other CPU.
331*4882a593Smuzhiyun2.	Build with CONFIG_RCU_NOCB_CPU=n, which will prevent these
332*4882a593Smuzhiyun	kthreads from being created in the first place.  However, please
333*4882a593Smuzhiyun	note that this will not eliminate OS jitter, but will instead
334*4882a593Smuzhiyun	shift it to RCU_SOFTIRQ.
335*4882a593Smuzhiyun
336*4882a593SmuzhiyunName:
337*4882a593Smuzhiyun  watchdog/%u
338*4882a593Smuzhiyun
339*4882a593SmuzhiyunPurpose:
340*4882a593Smuzhiyun  Detect software lockups on each CPU.
341*4882a593Smuzhiyun
342*4882a593SmuzhiyunTo reduce its OS jitter, do at least one of the following:
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun1.	Build with CONFIG_LOCKUP_DETECTOR=n, which will prevent these
345*4882a593Smuzhiyun	kthreads from being created in the first place.
346*4882a593Smuzhiyun2.	Boot with "nosoftlockup=0", which will also prevent these kthreads
347*4882a593Smuzhiyun	from being created.  Other related watchdog and softlockup boot
348*4882a593Smuzhiyun	parameters may be found in Documentation/admin-guide/kernel-parameters.rst
349*4882a593Smuzhiyun	and Documentation/watchdog/watchdog-parameters.rst.
350*4882a593Smuzhiyun3.	Echo a zero to /proc/sys/kernel/watchdog to disable the
351*4882a593Smuzhiyun	watchdog timer.
352*4882a593Smuzhiyun4.	Echo a large number of /proc/sys/kernel/watchdog_thresh in
353*4882a593Smuzhiyun	order to reduce the frequency of OS jitter due to the watchdog
354*4882a593Smuzhiyun	timer down to a level that is acceptable for your workload.
355