Linux定时器中断

Sim*_*onC 4 linux scheduling kernel interrupt

我有两个关于 Linux 内核的问题。具体来说,有没有人确切地知道 Linux 在定时器中断中做了什么?是否有一些关于此的文档?在构建内核时更改 CONFIG_HZ 设置会产生什么影响?

提前致谢!

Ste*_*itt 10

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;
}
Run Code Online (Sandbox Code Playgroud)

这将调用全局时钟事件的事件处理程序,tick_handler_periodic默认情况下,它更新 jiffies 计数器,计算全局负载,并更新其他一些跟踪时间的地方。

作为中断发生的副作用,__schedule可能最终会被调用,因此定时器中断也可能导致任务切换(与任何其他中断一样)。

更改CONFIG_HZ 会更改定时器中断的周期。增加HZ意味着它更频繁地触发,因此有更多与计时器相关的开销,但任务调度等待一段时间的机会更少(因此交互性得到改善);减少HZ意味着它较少触发,因此与计时器相关的开销较少,但任务等待调度的风险较高(因此以交互响应为代价提高了吞吐量)。与往常一样,最佳折衷方案取决于您的特定工作负载。CONFIG_HZ无论如何,如今与调度方面的相关性较低;请参阅如何更改 Linux CPU 调度程序使用的时间片长度?

另请参阅Linux 中如何处理中断?


归档时间:

查看次数:

3283 次

最近记录:

5 年,10 月 前