3

我正在为多个英特尔网卡(英特尔 EXPI9402PT,基于 82571EB 芯片)使用驱动程序 e1000e。问题是当我尝试在多个接口上使用最大速度(1GB)时,每个接口的速度开始下降。

我在内核空间中有自己的驱动程序,旨在仅发送给定的数据包。它只是通过以下方式分配数据包:

skb = dev_alloc_skb(packet->len);

他们通过以下方式发送它们:

result = dev->hard_start_xmit(skb,dev);

每个接口都有自己的驱动程序实例。

对于一个接口,我得到:120435948 字节/秒。

对于两个接口,我得到:61080233 字节/秒和 60515294 字节/秒。

对于三个接口,我得到:28564020 字节/秒、27111184 字节/秒、27118907 字节/秒。

可能是什么原因?hard_start_xmit 函数是可重入的吗?

4

2 回答 2

3

这很可能是由于主板上的带宽不足。

如果您试图通过速度低于 3 Gb/s 的总线传输 3 Gb/s 的信息,就会遇到问题。这些卡在什么类型的公共汽车上?

可能有修复,但我认为这是电路板的物理限制,不一定是您的驱动程序。

于 2009-06-18T11:17:27.213 回答
0

当我将 2 个接口的数字相加时,最终结果略大于单个接口的输出。对我来说,这意味着系统在使用这两个界面时效率会更高一些。一个可能的原因可能是更好的 CPU 利用率或总线利用率。但请注意,结果只是稍微好一点,可能表明导致瓶颈的资源限制为 121MB/s。一旦负载(3 个活动接口)超过此限制,性能将急剧下降至 82MB/s。

如果没有一些额外的测量,很难确定确切的原因,但我的猜测是

  1. CPU 受限:向系统添加多个 CPU 将排除此问题。
  2. 内存受限:请记住,即使设备在 x4 或 x8 插槽中,与主内存(即 SKB 所在的位置)的连接也可能无法承受该负载。
  3. 中断限制:每秒的数据包可能足够高,以至于切换进出中断上下文会损害性能。这不太可能,因为大多数驱动程序都擅长中断合并,但如果可能,将驱动程序切换到轮询模式以排除这种情况。
于 2009-06-18T20:03:01.750 回答