Linux

Linux 定時器中斷

  • November 5, 2019

我有兩個關於 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 調度程序使用的時間片長度?

另請參閱Linux 中的中斷是如何處理的?

引用自:https://unix.stackexchange.com/questions/550444