NOHZ=ON如何影响Linux内核中的do_timer()?

NOHZ=ON如何影响Linux内核中的do_timer()?,linux,time,timer,linux-kernel,Linux,Time,Timer,Linux Kernel,在一个简单的实验中,我设置了NOHZ=OFF,并使用printk()打印调用do\u timer()函数的频率。在我的机器上每10毫秒就会有一次呼叫 但是,如果NOHZ=ON则调用do_timer()的方式会有很多抖动。大多数情况下,它确实每10毫秒就会接到一次电话,但有时它完全错过了最后期限 我研究了do_timer()和NOHZdo_timer()是负责更新jiffies值的函数,还负责进程的循环调度 NOHZ功能关闭系统上的高分辨率定时器 我无法理解的是,高分辨率计时器如何影响do\u t

在一个简单的实验中,我设置了
NOHZ=OFF
,并使用
printk()
打印调用
do\u timer()函数的频率。在我的机器上每10毫秒就会有一次呼叫

但是,如果
NOHZ=ON
则调用
do_timer()
的方式会有很多抖动。大多数情况下,它确实每10毫秒就会接到一次电话,但有时它完全错过了最后期限

我研究了
do_timer()
和NOHZ
do_timer()
是负责更新
jiffies
值的函数,还负责进程的循环调度

NOHZ功能关闭系统上的高分辨率定时器

我无法理解的是,高分辨率计时器如何影响
do\u timer()
?即使hi-res硬件处于睡眠状态,持续时钟也能够每10毫秒执行一次
do_timer()
。其次,如果
do_timer()
没有在应该执行的时候执行,这意味着某些进程没有在理想情况下应该执行分时共享。大量的谷歌搜索确实表明,对于许多人来说,当NOHZ=OFF
NOHZ=OFF
时,许多应用程序开始工作得更好

简而言之,
NOHZ=ON
如何影响
do_timer()


为什么
dou_timer()
错过了它的截止日期?

首先让我们了解什么是
无滴答的内核
NOHZ=On
CONFIG\u NO_HZ
集),以及从
2.6.17
将其引入Linux内核的动机是什么

传统上,Linux内核为每个CPU使用一个周期计时器。 这个计时器做了很多事情,比如进程计算, 调度器负载平衡,并维护每CPU计时器事件。更老的 Linux内核使用频率为100Hz(100个计时器事件)的计时器 每秒或每10ms一个事件),而较新的内核使用250Hz (每秒250个事件或每4ms一个事件)或1000Hz(1000个事件 每秒或每1ms一个事件)

这种周期性计时器事件通常称为“计时器滴答声”。计时器 tick的设计很简单,但有一个显著的缺点: 无论处理器状态如何,计时器周期性地出现, 不管是空闲还是忙碌。如果处理器空闲,它必须唤醒 每1、4或10毫秒从省电睡眠状态恢复一次。这 花费相当多的能源,消耗笔记本电脑和笔记本电脑的电池寿命 导致服务器不必要的功耗

通过“无滴答的空闲”,Linux内核消除了这种周期性的空闲 当CPU空闲时,计时器滴答作响。这允许CPU保持在工作状态 节能状态持续时间较长,降低了整体能耗 系统功耗

因此,降低功耗是无痒内核的主要动机之一。但在大多数情况下,性能会随着功耗的降低而受到影响。对于台式计算机,性能是最重要的,因此您可以看到,对于大多数台式计算机,
NOHZ=OFF
工作得非常好

用Ingo Molnar自己的话来说

无滴答的内核特性(CONFIG_NO_HZ)启用“按需”计时器 中断:如果没有计时器将在1.5秒内过期 当系统闲置时,系统将保持完全闲置一段时间 1.5秒。这将带来更酷的CPU和节能:在我们的(x86)测试盒上,我们已经测量了有效的IRQ速率,从HZ开始 每秒1-2次定时器中断

现在,让我们尝试回答您的问题-

我无法理解的是,高分辨率定时器如何影响 你有计时器吗

如果系统支持高分辨率计时器,则在大多数系统上,计时器中断可能比通常的
10ms
更频繁。i、 e这些计时器试图通过利用系统功能和更快地触发计时器中断(例如,每隔
100us
)来提高系统的响应速度。因此,使用
NOHZ
选项,这些定时器被冷却,因此
do_timer

即使hi-res硬件处于睡眠状态,持久时钟也会更稳定 能够每10毫秒执行一次do_定时器

是的,它是有能力的。但是,
NOHZ
的意图恰恰相反。防止频繁的定时器中断

其次,如果do_计时器在应该的时候没有执行,这意味着 流程没有在理想情况下获得分时度假 明白了

如注释中所述,
NOHZ
不会导致进程调度的频率降低,因为它只在CPU空闲时启动,换句话说,当没有进程可调度时。只有流程会计工作将在延迟时间完成

你为什么错过了最后期限

如前所述,这是
NOHZ

我建议您从内核源代码入手。搜索
CONFIG_NO_HZ
并尝试了解为
NOHZ
功能添加的新功能


这里有一个测试是为了测量

我非常感谢这个答案。我的印象是,NOHZ只影响租用计时器,因此do_计时器在任何方面都不会受到影响(我认为do_计时器是由持久时钟触发的,而持久时钟不受NOHZ开关的影响)。
NOHZ
不会导致进程调度的频率降低,因为它只在CPU空闲时启动-换句话说,当没有进程可调度时。@caf非常感谢指针caf。用您的评论更新了我的答案:)那么,如果
NOHZ
不影响进程调度,那么当
NOHZ=OFF
时,为什么性能(如系统冻结)会提高呢?我见过很多人抱怨这是论坛。@PavanManjunath:可能有人写得不好