-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 288670 b: refs/heads/master c: ac483c4 h: refs/heads/master v: v3
- Loading branch information
Jiri Olsa
authored and
Steven Rostedt
committed
Feb 3, 2012
1 parent
738ade8
commit 0c81e67
Showing
413 changed files
with
6,698 additions
and
3,374 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: d1e169da9e20efc0762da6ec160dd7740d0103f5 | ||
refs/heads/master: ac483c446b67870444c9eeaf8325d3d2af9b91bc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
|
||
[NMI watchdog is available for x86 and x86-64 architectures] | ||
|
||
Is your system locking up unpredictably? No keyboard activity, just | ||
a frustrating complete hard lockup? Do you want to help us debugging | ||
such lockups? If all yes then this document is definitely for you. | ||
|
||
On many x86/x86-64 type hardware there is a feature that enables | ||
us to generate 'watchdog NMI interrupts'. (NMI: Non Maskable Interrupt | ||
which get executed even if the system is otherwise locked up hard). | ||
This can be used to debug hard kernel lockups. By executing periodic | ||
NMI interrupts, the kernel can monitor whether any CPU has locked up, | ||
and print out debugging messages if so. | ||
|
||
In order to use the NMI watchdog, you need to have APIC support in your | ||
kernel. For SMP kernels, APIC support gets compiled in automatically. For | ||
UP, enable either CONFIG_X86_UP_APIC (Processor type and features -> Local | ||
APIC support on uniprocessors) or CONFIG_X86_UP_IOAPIC (Processor type and | ||
features -> IO-APIC support on uniprocessors) in your kernel config. | ||
CONFIG_X86_UP_APIC is for uniprocessor machines without an IO-APIC. | ||
CONFIG_X86_UP_IOAPIC is for uniprocessor with an IO-APIC. [Note: certain | ||
kernel debugging options, such as Kernel Stack Meter or Kernel Tracer, | ||
may implicitly disable the NMI watchdog.] | ||
|
||
For x86-64, the needed APIC is always compiled in. | ||
|
||
Using local APIC (nmi_watchdog=2) needs the first performance register, so | ||
you can't use it for other purposes (such as high precision performance | ||
profiling.) However, at least oprofile and the perfctr driver disable the | ||
local APIC NMI watchdog automatically. | ||
|
||
To actually enable the NMI watchdog, use the 'nmi_watchdog=N' boot | ||
parameter. Eg. the relevant lilo.conf entry: | ||
|
||
append="nmi_watchdog=1" | ||
|
||
For SMP machines and UP machines with an IO-APIC use nmi_watchdog=1. | ||
For UP machines without an IO-APIC use nmi_watchdog=2, this only works | ||
for some processor types. If in doubt, boot with nmi_watchdog=1 and | ||
check the NMI count in /proc/interrupts; if the count is zero then | ||
reboot with nmi_watchdog=2 and check the NMI count. If it is still | ||
zero then log a problem, you probably have a processor that needs to be | ||
added to the nmi code. | ||
|
||
A 'lockup' is the following scenario: if any CPU in the system does not | ||
execute the period local timer interrupt for more than 5 seconds, then | ||
the NMI handler generates an oops and kills the process. This | ||
'controlled crash' (and the resulting kernel messages) can be used to | ||
debug the lockup. Thus whenever the lockup happens, wait 5 seconds and | ||
the oops will show up automatically. If the kernel produces no messages | ||
then the system has crashed so hard (eg. hardware-wise) that either it | ||
cannot even accept NMI interrupts, or the crash has made the kernel | ||
unable to print messages. | ||
|
||
Be aware that when using local APIC, the frequency of NMI interrupts | ||
it generates, depends on the system load. The local APIC NMI watchdog, | ||
lacking a better source, uses the "cycles unhalted" event. As you may | ||
guess it doesn't tick when the CPU is in the halted state (which happens | ||
when the system is idle), but if your system locks up on anything but the | ||
"hlt" processor instruction, the watchdog will trigger very soon as the | ||
"cycles unhalted" event will happen every clock tick. If it locks up on | ||
"hlt", then you are out of luck -- the event will not happen at all and the | ||
watchdog won't trigger. This is a shortcoming of the local APIC watchdog | ||
-- unfortunately there is no "clock ticks" event that would work all the | ||
time. The I/O APIC watchdog is driven externally and has no such shortcoming. | ||
But its NMI frequency is much higher, resulting in a more significant hit | ||
to the overall system performance. | ||
|
||
On x86 nmi_watchdog is disabled by default so you have to enable it with | ||
a boot time parameter. | ||
|
||
It's possible to disable the NMI watchdog in run-time by writing "0" to | ||
/proc/sys/kernel/nmi_watchdog. Writing "1" to the same file will re-enable | ||
the NMI watchdog. Notice that you still need to use "nmi_watchdog=" parameter | ||
at boot time. | ||
|
||
NOTE: In kernels prior to 2.4.2-ac18 the NMI-oopser is enabled unconditionally | ||
on x86 SMP boxes. | ||
|
||
[ feel free to send bug reports, suggestions and patches to | ||
Ingo Molnar <mingo@redhat.com> or the Linux SMP mailing | ||
list at <linux-smp@vger.kernel.org> ] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.