当我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 时间统计和系统时间保持。