我正在使用 Linux 版本 2.6.32.28,我只是想知道:因为使用时每个 CPU 有一个队列netif_rx(skb)
,并且如果 PCI 中断将使用 CPU 的两个内核处理(现在它只使用一个,另一个好问题是为什么),内核如何不弄乱接收包的顺序?我错过了什么吗?
问问题
531 次
1 回答
1
在 Linux 版本 2.6.32.28 中,在这种情况下基本上使用 NAPI,如果第一个数据包到来,则生成中断并使用其相关的处理程序来处理数据包。
并且数据包处理基本上分两部分完成......
1-> 硬中断 在这种情况下,数据包仅在NIC的DMA 引擎的帮助下被放置在内核内存中。因此,不需要 CPU,并且为此数据包分配了sk_buff 结构。& 这个sk_buff 的先锋位于 CPU 积压中。
2-> 软中断 在这种情况下,会产生一个软中断,负责从 CPU 积压中删除数据包并为网络堆栈中的上层处理它。
&对于您的问题,使用 2 个 cpu 核心,只使用一个 cpu 核心,因为在NAPI
中
,如果在处理前一个数据包期间出现另一个数据包,则不会产生中断,但只有这个数据包在 linux-kernel 的帮助下被放置的DMA。&运行中断只是拍摄数据包并继续处理。
于 2012-11-06T07:08:27.997 回答