Timer 哪个CPU以SMP为单位递增jiffies?

Timer 哪个CPU以SMP为单位递增jiffies?,timer,linux-kernel,linux-device-driver,Timer,Linux Kernel,Linux Device Driver,正如我所读到的,jiffies在每个计时器滴答声中都会随着计时器ISR而递增。但在SMP中,所有CPU都有自己的计时器中断,因此也有自己的计时器ISR。所以我的问题是: jiffies是否在所有CPU中都是全球性的?如果是,如何以及哪个CPU在其计时器ISR中增加它 根据我的理解,jiffies不能是每个CPU的,否则在不同CPU上调度的相同进程将看到不同的jiffy值。有两个计时器中断: 本地计时器中断(/proc/interrupts中的LOC)在每个CPU上每一瞬间触发一次。 全局计时器中

正如我所读到的,jiffies在每个计时器滴答声中都会随着计时器ISR而递增。但在SMP中,所有CPU都有自己的计时器中断,因此也有自己的计时器ISR。所以我的问题是:

jiffies是否在所有CPU中都是全球性的?如果是,如何以及哪个CPU在其计时器ISR中增加它


根据我的理解,jiffies不能是每个CPU的,否则在不同CPU上调度的相同进程将看到不同的jiffy值。

有两个计时器中断:
本地计时器中断(
/proc/interrupts
中的
LOC
)在每个CPU上每一瞬间触发一次。
全局计时器中断(中断0)在任何CPU上每一瞬间触发一次。它增加了
jiffies

请注意,“Tickless Kernel”配置选项(在Linux 2.6.21中引入,
CONFIG\u NO\u HZ
)删除了这些中断。使用无滴答的内核,不再有周期性中断。相反,当进程启动其量程时,Linux会在硬件中设置一个“闹钟”,在量程结束时触发中断。

请参阅本文

基本上,
tick\u do\u timer\u cpu
变量保存cpu ID,该ID应该运行管理jiffies的代码。jiffies管理功能的执行可以从一个核心跳到另一个核心,但显然不能在不同的核心上同时进行更新


另请参见

CPU0 CPU1 CPU2 CPU3 0:41 19 0 8 IO APIC edge timer@ugoren:以上是我的ubuntu桌面上中断0的cat/proc/interrupts输出。我仍然想知道哪个CPU在计算哪个定时器中断的jiffies。下面是我的cat/proc/version Linux版本3.2.0-26-generic-pae(buildd@lamiak)(gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5))看起来全局计时器中断每次都由不同的CPU处理。我看它没有问题。是的,全局计时器(中断0)每次都由不同的CPU处理。但是,如果此计时器使jiffies递增,则所有CPU上的计数之和应为jiffies值。但是总和是68(41+19+0+8),这不可能是jiffies。我猜你使用的是一个无滴答的内核。我会更新一下答案。