Intel 10Gbps 卡带宽

Intel 10Gbps 卡带宽

我有一张 Intel 10Gbps 卡,上面有 82599 10GbE 控制器。该卡有两个端口。控制器的数据表显示它支持 PCIe 2.0(2.5 GT/s 或 5.0 GT/s)

现在,根据 PCIe SIG 的常见问题解答页面(链接:https://www.pcisig.com/news_room/faqs/pcie3.0_faq/#EQ3) 表示,对于 5.0 GT/s 符号率,PCIe 可提供 4Gbps 的互连带宽,每个通道每个方向的带宽为 500MB/s)

我对该卡进行了 netperf 测试(我通过 OFC 背对背连接了两张卡,中间没有交换机),带宽约为 3.3Gbps(约为 400MB/s)

我的卡是否利用率过低,还是这些数字加起来是正确的?为什么我无法在卡上获得完整的 10Gbps(只能获得 3.3Gbps)

(该卡为 x4,位于 x8 插槽上)

更新:网卡接入配置为 PCIe 3.0 的插槽,它是一个 x8 插槽(支持高达 8.0 GT/s)。至于主板本身,它是一块飞思卡尔主板(处理器:T4240)。所以我认为主板可能没问题,但网卡是两者中速度较慢的。

提前致谢。

答案1

有很多原因导致您无法在链路上看到 10Gbps。我可以提供以下几点:

  • PCIe 2.0 提供每通道 4Gbps 的有效带宽。PCIe 2.0 或更高版本的 8x 插槽中的 PCIe 2.0 4x 卡将具有 4x 链路,提供 20Gbps 的有效带宽。这足以处理两条链路完全饱和的情况(假设您的其他硬件可以处理)。
  • 许多通用桌面和服务器操作系统不是默认配置为处理高带宽网络。

要充分发挥该卡的性能,您需要:

  • 禁用任何会限制网络性能或 CPU 速度/中断处理的功能:

Linux 示例

service irqbalance stop
service cpuspeed stop
chkconfig irqbalance off
chkconfig cpuspeed off
  • 启用具有高传输队列长度的 9K 巨型帧:

Linux 示例

ifconfig eth2 mtu 9000 txqueuelen 1000 up
  • 增加网络缓冲区,以便能够保持卡中充满数据:

Linux 示例

# -- 10gbe tuning from Intel ixgb driver README -- #

# turn off selective ACK and timestamps
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0

# memory allocation min/pressure/max.
# read buffer, write buffer, and buffer space
net.ipv4.tcp_rmem = 10000000 10000000 10000000
net.ipv4.tcp_wmem = 10000000 10000000 10000000
net.ipv4.tcp_mem = 10000000 10000000 10000000

net.core.rmem_max = 524287
net.core.wmem_max = 524287
net.core.rmem_default = 524287
net.core.wmem_default = 524287
net.core.optmem_max = 524287
net.core.netdev_max_backlog = 300000

您可以对 PCI 链路进行进一步的调整,例如将最大块大小增加到 4K。经过适当的调整后,您应该能够推动9.90Gbps在每个链接上。

请记住服务器客户端,并且沿途的每一跳(交换机/路由器)都必须进行类似的调整,以免阻碍数据流。

答案2

同样如此... 结果是因为 10Gbps 协议恢复了旧的调制解调器编码... 带有起始/停止位和 8 位数据。

今日汇率:

R:512+0 records in
512+0 records out
4294967296 bytes (4.0GB) copied, 6.37415s, 642.6MB/s
W:512+0 records in
512+0 records out
4294967296 bytes (4.0GB) copied, 6.78951s, 603.3MB/s

(这是在 Win7 客户端上运行的,与 Linux 端的空文件对话——/dev/zero 用于读取,/dev/null 用于写入)。

对于“smb/cifs”和单个客户端,将 2 张卡绑定在一起并不能提高吞吐量(因为 smb/cifs 是 1 个连接/客户端协议)。:-(

ps-顺便说一句,这在 1Gb 上是不成立的,但我认为在 40Gb 上也不成立... 太差劲了!感觉就像刚出来时磁盘空间 MB!= 1024**2 字节的问题... 这是一种让它听起来比实际情况更好的方法...

相关内容