Re: [PATCH v2] sched: Warn on long periods of pending need_resched
From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-03-24 09:39:34
Also in:
linux-fsdevel, lkml
On Mon, Mar 22, 2021 at 08:57:06PM -0700, Josh Don wrote:
quoted hunk ↗ jump to hunk
From: Paul Turner <redacted> CPU scheduler marks need_resched flag to signal a schedule() on a particular CPU. But, schedule() may not happen immediately in cases where the current task is executing in the kernel mode (no preemption state) for extended periods of time. This patch adds a warn_on if need_resched is pending for more than the time specified in sysctl resched_latency_warn_ms. If it goes off, it is likely that there is a missing cond_resched() somewhere. Monitoring is done via the tick and the accuracy is hence limited to jiffy scale. This also means that we won't trigger the warning if the tick is disabled. This feature is default disabled. It can be toggled on using sysctl resched_latency_warn_enabled. Signed-off-by: Paul Turner <redacted> Signed-off-by: Josh Don <redacted> --- Delta from v1: - separate sysctl for enabling/disabling and triggering warn_once behavior - add documentation - static branch for the enable Documentation/admin-guide/sysctl/kernel.rst | 23 ++++++ include/linux/sched/sysctl.h | 4 ++ kernel/sched/core.c | 78 ++++++++++++++++++++- kernel/sched/debug.c | 10 +++ kernel/sched/sched.h | 10 +++ kernel/sysctl.c | 24 +++++++ 6 files changed, 148 insertions(+), 1 deletion(-)diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst index 1d56a6b73a4e..2d4a21d3b79f 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst@@ -1077,6 +1077,29 @@ ROM/Flash boot loader. Maybe to tell it what to do after rebooting. ??? +resched_latency_warn_enabled +============================ + +Enables/disables a warning that will trigger if need_resched is set for +longer than sysctl ``resched_latency_warn_ms``. This warning likely +indicates a kernel bug, such as a failure to call cond_resched(). + +Requires ``CONFIG_SCHED_DEBUG``. + + +resched_latency_warn_ms +======================= + +See ``resched_latency_warn_enabled``. + + +resched_latency_warn_once +========================= + +If set, ``resched_latency_warn_enabled`` will only trigger one warning +per boot. + + sched_energy_aware ==================
Should we perhaps take out all SCHED_DEBUG sysctls and move them to
/debug/sched/ ? (along with the existing /debug/sched_{debug,features,preemp}
files)
Having all that in sysctl and documented gives them far too much sheen
of ABI.
Not saying this patch should do that, just as a general observation.