本地定时器中断和定时器有什么区别?

本地定时器中断和定时器有什么区别?

当我cat /proc/interrupts在多核 x86_64 台式电脑(内核 3.16)上执行此操作时,我看到以下内容:

0:         16          0   IO-APIC-edge      timer
LOC:     529283     401319   Local timer interrupts

当我cat /proc/interrupts在多核 x86_64 笔记本电脑(内核 3.19)上执行此操作时,我看到以下内容:

0:    1009220          0   IO-APIC-edge      timer
LOC:     206713     646587   Local timer interrupts

当我看到这种差异时,我问自己这两者之间有什么区别?

我希望有人能相当彻底地解释这一点,给出的解释这里不是很详细,也没有解释为什么我的台式电脑不使用计时器,但我的笔记本电脑却使用计时器。

答案1

在你明显的 x86_PC 架构下:


中断请求0是与第一个定时器(Timer0)相关的中断线可编程的间隔定时器。它是由IO APIC仅限启动 cpu (cpu0)。
该中断也称为调度时钟中断或者 调度时钟滴答或者简单地打钩:

如果NO_HZ未设置内核配置旋钮(或在 Linux 内核版本 < 3.10 下) 该中断将被编程为定期触发赫兹频率。
如果设置了 NO_HZ,则 PIT 将以其一次性模式工作

在早期启动时使用,它仍然可以用作调度时钟滴答和更新系统时间,除非某些情况更好的(*1)时钟源发现可用。
无论如何,它都会用于 cpu 时间统计,如果TICK_CPU_ACCOUNTING被设置为内核配置的一部分。


LOC是与相关的中断本地APIC定时器
在一些繁琐的初始化之后应该启用它。 (参见上面的链接)

然后,根据CPU硬件能力来保持这个时钟源在中间时间稳定,取决于内核的配置和引导命令行参数它将取代 PIC 中断来触发各种调度程序操作、精确的 CPU 时间统计和系统时间保持。

相关内容