On Mon, Mar 22, 2021 at 08:57:06PM -0700, Josh Don wrote: > From: Paul Turner <pjt@xxxxxxxxxx> > > 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 <pjt@xxxxxxxxxx> > Signed-off-by: Josh Don <joshdon@xxxxxxxxxx> > --- > 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.