Linux
Linux 定時器中斷
我有兩個關於 Linux 核心的問題。具體來說,有人確切知道Linux在定時器中斷中做了什麼嗎?是否有一些關於此的文件?在建構核心時更改 CONFIG_HZ 設置會受到什麼影響?
提前致謝!
Linux 定時器中斷處理程序並沒有直接做那麼多事情。對於 x86,您將在以下位置找到預設的 PIT/HPET 定時器中斷處理程序
arch/x86/kernel/time.c
:static irqreturn_t timer_interrupt(int irq, void *dev_id) { global_clock_event->event_handler(global_clock_event); return IRQ_HANDLED; }
這會呼叫全域時鐘事件的事件處理程序,
tick_handler_periodic
預設情況下,它會更新 jiffies 計數器,計算全域負載,並更新其他一些跟踪時間的地方。作為中斷發生的副作用,
__schedule
最終可能會被呼叫,因此定時器中斷也可能導致任務切換(與任何其他中斷一樣)。更改CONFIG_HZ會更改定時器中斷的周期。增加
HZ
意味著它更頻繁地觸發,因此有更多與計時器相關的成本,但任務調度等待一段時間的機會更少(因此提高了互動性);減少HZ
意味著它觸發的頻率更低,因此與計時器相關的成本更少,但任務等待調度的風險更高(因此以犧牲互動響應為代價提高吞吐量)。與往常一樣,最佳折衷方案取決於您的具體工作量。無論如何,如今CONFIG_HZ
與調度方面的相關性較低;請參閱如何更改 Linux CPU 調度程序使用的時間片長度?