Lem0n Asked: 2018-05-01 10:08:49 +0800 CST2018-05-01 10:08:49 +0800 CST 2018-05-01 10:08:49 +0800 CST 产生过多中断的硬件能否独占 CPU? 772 假设我的网络接口接收到的数据包过多,而我有一个单核处理器。 是什么阻止它(如果有的话)继续中断内核并从本质上垄断 CPU(上半部之后的上半部)? linux-kernel interrupt 1 个回答 Voted Best Answer sourcejedi 2018-05-01T10:17:57+08:002018-05-01T10:17:57+08:00 如果在下半部分有太多工作,则以softirq: ksoftirqd 的形式运行,它作为内核线程运行,因此仅接收其 CPU 与其他进程的“公平”分配。最近在 2016 年左右进行了修复,特别是因为您提到的网络案例。 https://lwn.net/Articles/687617/ 我认为在softirq处理完所有已知数据包之前不需要重新启用上半部分。但是,这可能特定于 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)能够关闭中断或可能将数据包发送到堆栈的事件。 -- https://lwn.net/2002/0321/a/napi-howto.php3
如果在下半部分有太多工作,则以softirq: ksoftirqd 的形式运行,它作为内核线程运行,因此仅接收其 CPU 与其他进程的“公平”分配。最近在 2016 年左右进行了修复,特别是因为您提到的网络案例。
https://lwn.net/Articles/687617/
我认为在softirq处理完所有已知数据包之前不需要重新启用上半部分。但是,这可能特定于 NAPI。您可以查看例如来自 LWN.net 的有关 NAPI 的早期文章。
https://lwn.net/Articles/30107/
https://lwn.net/Articles/214457/
https://lwn.net/Articles/244640/
-- https://lwn.net/2002/0321/a/napi-howto.php3