完全消除现代 Linux >=5.0 中的计时器刻度

Completely eliminating the timer tick in modern Linux >=5.0

我正在尝试完全消除安静机器上一组内核的定时器中断。这些是这些内核定期处理的唯一中断。我已经 isolcpu 了它们,并用 CONFIG_NO_HZ_FULL 构建了一个内核,实际上现在它们每秒只接收一次定时器中断。 是否可以消除这个残留的 1Hz 定时器中断?

kernel doc 表明在某些时候需要偶尔打勾:

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.

而这个kernel patch,"Remove the 1 Hz tick code,"暗示在后来的内核版本中被去掉了:

Now that the 1Hz tick is offloaded to workqueues, we can safely remove the residual code that used to handle it locally.

我已经构建了 5.3.0 内核,希望删除这个残留的滴答声,但它仍然存在。

是否需要设置额外的启动参数?是否真的在最新版本的内核中删除了剩余计时器滴答声? (this question有一些相关信息)

不能从所有 cpu 中完全删除 1HZ 刻度,否则我们将无法保留任何统计信息。相反,它现在 运行 通过工作队列,您现在可以配置一个 housekeeping CPU 来处理所有全局工作队列任务。有关详细信息,请参阅此 commit

还建议使用 nohz_full 命令行参数和 cpu 集来管理孤立的 cpu 集。您仍然需要让其中之一(默认启动CPU)成为管家cpu。