当我读到时,定时器ISR在每个定时器滴答时增加jiffies。但在SMP中,所有CPU都有自己的定时器中断,因此它们自己的定时器ISR。所以我的问题是:
所有CPU的jiffies都是全局的吗?如果是这样,在定时器ISR中如何以及哪个CPU递增它?
根据我的理解,jiffies不能是每个cpu,否则在不同的cpu上安排的相同进程将看到不同的jiffy值。
由于
答案 0 :(得分:5)
有两个定时器中断:
每个CPU上的本地定时器中断(LOC
中的/proc/interrupts
)每个jiffy触发一次
全局定时器中断(中断0)每个jiffy触发一次,一个CPU。它会增加jiffies
。
请注意,“Tickless Kernel”配置选项(在Linux 2.6.21中引入,CONFIG_NO_HZ
)会删除这些中断。使用无滴答内核,不再有周期性中断。相反,当一个进程启动它的量子时,Linux会在硬件中设置一个“闹钟”,以便在量子结束时触发中断。
答案 1 :(得分:0)
请参阅此帖子link。
基本上,tick_do_timer_cpu
变量保存CPU ID,该ID应该运行管理jiffies的代码。 jiffies管理功能执行可以从一个核心跳转到另一个核心,但显然不能在同一时间在不同的核心上进行更新。