I'm trying to completely eliminate timer interrupts on a set of cores on a quiet machine. These are the only interrupts regularly processed by these cores. I've isolcpu
'd them, and built a kernel with CONFIG_NO_HZ_FULL
, and indeed now they only receive timer interrupts around once a second. Is it possible to remove this residual 1Hz timer interrupt?
This kernel doc suggests that an occasional tick was necessary at some point:
Some process-handling operations still require the occasional scheduling-clock tick. These operations include calculating CPU load, maintaining sched average, computing CFS entity vruntime, computing avenrun, and carrying out load balancing. They are currently accommodated by scheduling-clock tick every second or so. On-going work will eliminate the need even for these infrequent scheduling-clock ticks.
And this kernel patch, "Remove the 1 Hz tick code," suggests that it was removed in a later version of the kernel:
Now that the 1Hz tick is offloaded to workqueues, we can safely remove the residual code that used to handle it locally.
I've built the 5.3.0 kernel hoping that this residual tick would be removed, but it's still present.
Are there additional boot parameters I need to set? Is the residual timer tick really removed in the latest versions of the kernel? (this question has some relevant information)
The 1HZ tick can't be removed completely from all cpus otherwise we won't be able to keep any statistics. Instead what happens is that it is now run through a workqueue and you can now configure a housekeeping
CPU that will handle all global workqueue tasks. See this commit for details.
It is also recommended to use nohz_full command-line parameter along with cpusets to manage the set of isolated cpus. You still need to let one of them (boot CPU by default) to be the housekeeping cpu.