[PATCH v1] Add info log when user enables NOHZ in commandline but NOHZ is not possible

From: Ani Sinha
Date: Sun Jun 27 2021 - 03:31:11 EST


Commit 4f49b90abb4aca ("sched-clock: Migrate to use new tick
dependency mask model") had also removed the kernel warning
message informing the user that it was not possible to turn
on NO_HZ_FULL. This warning was added in commit e12d0271774fe
("nohz: Warn if the machine can not perform nohz_full") in order
to warn users when they enabled NOHZ using the kernel commandline
but kernel could not enable NOHZ. Removal of this log defeats this
purpose because we still do not want users thinking that they are
getting the benefit of nohz when their machine can not support it.
Hence this patch brings back the information log.

If at some point the conditions that prevented NOHZ from being
enabled goes away and the previous info log was printed, we print
another log informing the user that NOHZ was again possible.

Signed-off-by: Ani Sinha <ani@xxxxxxxxxxx>
---
kernel/time/tick-sched.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)

See also thread: https://lkml.org/lkml/2021/6/20/32

diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 828b091501ca..fbef95b57b1d 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -930,6 +930,7 @@ static void tick_nohz_full_update_tick(struct tick_sched *ts)
{
#ifdef CONFIG_NO_HZ_FULL
int cpu = smp_processor_id();
+ static bool no_tick_warned;

if (!tick_nohz_full_cpu(cpu))
return;
@@ -937,10 +938,24 @@ static void tick_nohz_full_update_tick(struct tick_sched *ts)
if (!ts->tick_stopped && ts->nohz_mode == NOHZ_MODE_INACTIVE)
return;

- if (can_stop_full_tick(cpu, ts))
+ if (can_stop_full_tick(cpu, ts)) {
tick_nohz_stop_sched_tick(ts, cpu);
- else if (ts->tick_stopped)
- tick_nohz_restart_sched_tick(ts, ktime_get());
+ if (no_tick_warned) {
+ pr_info("NO_HZ_FULL is now enabled in the system.\n");
+ no_tick_warned = false;
+ }
+ } else {
+ /*
+ * Don't allow the user to think they can get
+ * full NO_HZ with this machine.
+ */
+ if (!no_tick_warned && tick_nohz_full_running) {
+ pr_info("NO_HZ_FULL has been disabled in the system.");
+ no_tick_warned = true;
+ }
+ if (ts->tick_stopped)
+ tick_nohz_restart_sched_tick(ts, ktime_get());
+ }
#endif
}

--
2.25.1