内核启动参数nohz_full和isolcpus=nohz有什么区别

内核启动参数nohz_full和isolcpus=nohz有什么区别

当隔离抖动敏感进程的 CPU 核心时,通常会使用引导参数nohz_fullisolcpus(我知道后者已被弃用,有利于 cpuset,但它仍然存在)。isolcpus还有一个nohz参数。我想知道是否有同样的效果nohz_full

答案1

最初,nohz_full内核参数仅意味着 (*) :

设置指定的 CPU 列表,只要有可能,其滴答就会停止。

什么时候异构CPU的目的是 (*) :

指定一个或多个CPU以隔离标志列表中指定的干扰

骚乱描绘的区域比仅计时器刻度要宽得多。
事实上,如果工作队列在所有 CPU 之间共享,并且为了负载平衡,调度程序算法必须在所有这些 CPU 上运行……这也包含了 nohz_full 不会阻止 isolcpus 会阻止的干扰。

这个补丁(从 2015 年开始)甚至承认:

nohz_full 仅在设置了 isolcpus 的情况下才有用,否则调度程序必须定期运行以尝试确定是否从其他核心窃取工作。

并做到了:

当在命令行上使用 nohz_full=xxx 启动时,我们应该像也设置了 isolcpus=xxx 一样,并设置(或扩展) isolcpus 设置以包含 nohz_full cpu。

因此……我们现在可以认为:如果指定的 CPU 组相同,则不再需要指定这两个参数。


(*) 引用Linux 内核用户和管理员指南

相关内容