在Linux内核中CONFIG_NO_HZ
没有设置。但初步阅读表明,从性能的角度来看,设置该选项会很好。但读了一些像这样的帖子让我再次思考。
为什么CONFIG_NO_HZ
默认情况下不设置或者启用后性能没有提高?
答案1
滴答是由硬件定时器生成的中断,并按照 CONFIG_HZ 内核配置确定的定期间隔发生,对于大多数体系结构来说,可以在编译内核时进行配置。滴答中断是每个 CPU 的中断。从 Linux 2.6.21 开始,可以使用 CONFIG_NO_HZ 内核配置选项来配置空闲动态时钟周期功能。目标是消除空闲时的滴答中断,以便能够进入更深的睡眠模式。这对于笔记本电脑很重要,但也可以减少服务器机房的电费。 Linux 3.10.0 引入了完整的动态滴答功能,以消除在 CPU 上运行单个任务时的滴答中断。这里的目标是通过确保线程不受干扰地运行来更好地支持高性能计算和实时用例。早期的配置 CONFIG_NO_HZ 已重命名为 CONFIG_NO_HZ_IDLE,新功能获得了新的配置选项 CONFIG_NO_HZ_FULL。
您问题的答案是 CONFIG_NO_HZ(_IDLE) 增加了进入和退出空闲状态的成本,稍微增加了空闲 CPU 恢复工作所需的时间。在对延迟高度敏感的环境中,该成本可能被认为过高。对于其他人来说,禁用空闲 CPU 的计时器几乎肯定是正确的做法;对于电池供电的系统来说,这是双重正确的。
答案2
性能改进并不是每个人都能看到,只有 RT 内核对某些用户真正重要的用户才能看到:DSP、音频/视频处理等。因此该配置选项并不普遍有益,因此被禁用。