【问题标题】:Completely eliminating the timer tick in modern Linux >=5.0完全消除现代 Linux >=5.0 中的计时器滴答声
【发布时间】:2020-06-04 21:46:55
【问题描述】:

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

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

一些流程处理操作仍然需要偶尔 调度时钟滴答。这些操作包括计算 CPU 负载,维护计划平均值,计算 CFS 实体 vruntime, 计算 avenrun,进行负载均衡。他们是 当前由调度时钟每秒刻度容纳 或者。正在进行的工作将消除对这些的需求 不频繁的调度时钟滴答声。

而这个kernel patch,“删除 1 Hz 滴答代码”表明它已在更高版本的内核中被删除:

现在 1Hz 滴答已卸载到工作队列,我们​​可以安全地删除 用于在本地处理它的残留代码。

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

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

【问题讨论】:

  • 如果您要问如何配置内核版本,那不是编程问题。我认为这可能是Unix & Linux 的话题。
  • 我认为 1 Hz 滴答代码被卸载到全局工作队列,而不是完全删除。 sched/isolation: Offload residual 1Hz scheduler tick 的提交描述提供了更多信息。
  • @TobySpeight 我链接的问题非常相似,尚未关闭/有 6 个赞成票,还有很多其他关于配置 Linux 的 SO 问题。我还认为 SO 是接触具有内核开发经验的人的合理场所,他​​们可能在这里有一些见解。
  • @sevko 下面的答案对你有用吗?

标签: linux timer linux-kernel real-time interrupt


【解决方案1】:

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

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

【讨论】:

  • 我目前正在使用 isolcpus=8-15 nohz_full=8-15 并运行 echo 1 > /sys/devices/virtual/workqueue/cpumask,但例如,剩余的 1Hz 滴答声仍然在核心 13 上运行。看起来this question 有类似的困难。试图弄清楚我错过了什么。
  • nohz_offload 似乎相关,但不在 5.3.0 内核参数文档中。
  • 让它工作。我的最后一组内核参数是isolcpus=nohz,domain,8-15 nohz_full=8-15。此外,我意识到我正在通过chrt -f 使用FIFO 调度运行我的程序,但忘记将/proc/sys/kernel/sched_rt_runtime_us 设置为-1,这会引入可变性(可能是因为它被内核抢占了)。无论是在没有chrt -f 的情况下运行,还是在运行时将sched_rt_runtime_us 设置为-1,都解决了问题。
  • @sevko 我发现我不需要 nohz_full=(我认为 isolcpus=nohz 是多余的)但我必须在 CentOS 8 内核 4.18 上添加 tsc=reliable。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多