diff options
| author | Aaron Tomlin <atomlin@atomlin.com> | 2026-08-29 10:53:20 -0400 |
|---|---|---|
| committer | Andrew Morton <akpm@linux-foundation.org> | 2026-09-03 17:39:49 -0700 |
| commit | 4cfcb7570e31d9b87eefc19fbf66be04960e88d3 (patch) | |
| tree | 65f5c5c96908086f4932f4a87caee94466b9fbd7 /Documentation | |
| parent | 568eccf4da54c00c95c8e8e24b848509d8ef352e (diff) | |
| download | linux-next-4cfcb7570e31d9b87eefc19fbf66be04960e88d3.tar.gz linux-next-4cfcb7570e31d9b87eefc19fbf66be04960e88d3.zip | |
hung_task: reset warning budget when problem gets resolved
Patch series "hung_task: Improve warning budget handling and task
reporting", v10.
The hung_task watchdog detects tasks stuck in TASK_UNINTERRUPTIBLE (D)
state for longer than CONFIG_DEFAULT_HUNG_TASK_TIMEOUT seconds. To
prevent log spam during system spikes, sysctl_hung_task_warnings enforces
a budget on the number of logged warnings.
However, the current implementation has two major limitations:
1. Permanent exhaustion of warning budget
sysctl_hung_task_warnings is decremented directly when
printing warnings. Once this budget hits zero, no further warnings
are reported until an administrator manually updates the sysctl
value or reboots the system. Consequently, a single temporary hang
episode permanently blinds the kernel watchdog to any subsequent
hung tasks after system recovery.
2. Total log suppression when budget is exhausted
Once the warning budget reaches zero, hung_task_info()
completely suppresses all output, including the basic single-line
alert. While suppressing verbose stack dumps and lock debugging is
desirable to prevent dmesg flooding, hiding basic task alerts
leaves administrators entirely unaware that tasks are hanging.
This patch series resolves both limitations by decoupling the configured
warning limit from the active runtime budget, automatically resetting the
budget upon system recovery or sysctl updates, and emitting a single
aggregate summary line when hung tasks are detected under an exhausted
warning budget.
Patch 1 separates the configured sysctl hung_task_warnings from the
runtime budget, making khungtaskd the sole owner of runtime budget
updates. The budget is reloaded directly when a scan finds zero hung
tasks, or via an atomic reset request published on sysctl write.
Patch 2 prevents dmesg flooding during system-wide hangs by keeping
non-panic per-task stack dumps budgeted, while providing ongoing
visibility by logging a single aggregate summary line at the end of each
scan iteration when the warning budget is exhausted.
This patch (of 2):
The sysctl hung_task_warnings currently holds both the configured warning
limit and the remaining budget. Each detailed report decrements the
sysctl, so once it reaches zero, the configured limit is lost and cannot
be restored automatically.
Keep sysctl_hung_task_warnings as the configured warning limit and make
khungtaskd the sole owner of the remaining budget. A check that finds no
hung tasks reloads the budget directly from the configured limit. A
successful sysctl write publishes an atomic reset request, which
khungtaskd consumes at the start of the next check.
Link: https://lore.kernel.org/20260829145321.18423-1-atomlin@atomlin.com
Link: https://lore.kernel.org/20260829145321.18423-2-atomlin@atomlin.com
Signed-off-by: Aaron Tomlin <atomlin@atomlin.com>
Suggested-by: Petr Mladek <pmladek@suse.com>
Suggested-by: Lance Yang <lance.yang@linux.dev>
Tested-by: Lance Yang <lance.yang@linux.dev>
Reviewed-by: Lance Yang <lance.yang@linux.dev>
Reviewed-by: Bradley Morgan <brads@mainlining.org>
Cc: David Laight <david.laight.linux@gmail.com>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'Documentation')
| -rw-r--r-- | Documentation/admin-guide/sysctl/kernel.rst | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst index b6328cd0f43e..31fbc8c9184c 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst @@ -459,8 +459,9 @@ hung_task_warnings ================== The maximum number of warnings to report. During a check interval -if a hung task is detected, this value is decreased by 1. -When this value reaches 0, no more warnings will be reported. +if a hung task is detected, the internal warning budget is decreased by 1. +When this budget reaches 0, no more detailed warnings will be reported. The +warning budget is reset to the configured limit when no hung task is found. This file shows up if ``CONFIG_DETECT_HUNG_TASK`` is enabled. -1: report an infinite number of warnings. |
