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()
和NOHZdo_timer()
是负责更新jiffies
值的函数,还负责进程的循环调度
NOHZ功能关闭系统上的高分辨率定时器
我无法理解的是,高分辨率计时器如何影响do\u timer()
?即使hi-res硬件处于睡眠状态,持续时钟也能够每10毫秒执行一次do_timer()
。其次,如果do_timer()
没有在应该执行的时候执行,这意味着某些进程没有在理想情况下应该执行分时共享。大量的谷歌搜索确实表明,对于许多人来说,当NOHZ=OFFNOHZ=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:可能有人写得不好