![产生过多中断的硬件会独占CPU吗?](https://linux22.com/image/132417/%E4%BA%A7%E7%94%9F%E8%BF%87%E5%A4%9A%E4%B8%AD%E6%96%AD%E7%9A%84%E7%A1%AC%E4%BB%B6%E4%BC%9A%E7%8B%AC%E5%8D%A0CPU%E5%90%97%EF%BC%9F.png)
假设我的网络接口接收了太多数据包,并且我有一个单核处理器。
是什么阻止了它(如果有的话)继续中断内核并基本上垄断 CPU(上半部又上半部)?
答案1
如果工作量太大底部一半,以软中断的形式:ksoftirqd,它作为内核线程运行,因此仅接收其与其他进程相比的“公平”分配的CPU。最近在 2016 年左右进行了修复,特别是因为您提到的网络案例。
https://lwn.net/Articles/687617/
我认为在软中断处理完所有已知数据包之前不需要重新启用上半部分。然而,这可能是 NAPI 特有的。您可以查看 LWN.net 上有关 NAPI 的早期文章。
https://lwn.net/Articles/30107/
https://lwn.net/Articles/214457/
https://lwn.net/Articles/244640/
驱动程序可以继续使用旧的 2.4 技术来连接到网络堆栈,并且不会从 NAPI 更改中受益。向内核添加 NAPI 不会破坏向后兼容性。然而,NAPI 需要以下功能可用:
A) DMA 环或足够的 RAM 以在软件设备中存储数据包。
B) 能够关闭中断或可能将数据包发送到堆栈的事件。