IOAT 已启用但未在 Linux 中使用?

IOAT 已启用但未在 Linux 中使用?

在我们的带有 igb 版本 4.1.2 的 R610 上,我确实看到 ioatdma 模块正在加载(并使用 lsmod 加载):

ioatdma: Intel(R) QuickData Technology Driver 4.00
ioatdma 0000:00:16.0: irq 80 for MSI/MSI-X
ioatdma 0000:00:16.1: irq 81 for MSI/MSI-X
ioatdma 0000:00:16.2: irq 82 for MSI/MSI-X
ioatdma 0000:00:16.3: irq 83 for MSI/MSI-X
ioatdma 0000:00:16.4: irq 84 for MSI/MSI-X
ioatdma 0000:00:16.5: irq 85 for MSI/MSI-X
ioatdma 0000:00:16.6: irq 86 for MSI/MSI-X
ioatdma 0000:00:16.7: irq 87 for MSI/MSI-X

我们有一个四端口英特尔网卡,应该支持它:

07:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
07:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
08:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
08:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)

然而,它看起来似乎没有用于任何网络流量:

[root@or-rtlb01 ~]# cat /sys/class/dma/dma*/bytes*
0
0
0
0
0
0
0
0

有谁知道如何让 ioat 用于网络流量吗?

内核是Linux or-rtlb01.ds.stackexchange.com 3.7.7-1.el6.elrepo.x86_64 #1 SMP Mon Feb 11 22:28:07 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

答案1

您发送的数据包有多大?默认情况下,IOATDMA 驱动程序仅用于大数据包。您可以使用以下命令查看当前设置:

cat /proc/sys/net/ipv4/tcp_dma_copybreak

如果您希望该值更低,可以使用 sysctl 设置它。例如,要将数据包大小设置为 1,请使用:

sysctl net.ipv4.tcp_dma_copybreak=1

答案2

开始之前,更新整个服务器,如 BIOS 包括硬盘固件。

其次,始终使用最新的英特尔网络驱动程序igb。只需从源代码编译它即可。

BIOS 启用 DCA 和 IOATDMA。在 Linux 中尝试以下操作:

# modprobe ioatdma

# dmesg

您应该看到 ioatdma 驱动程序已加载。

现在,igb驱动程序与 10GBps 的驱动程序不同ixgbe。由于我根本不使用igb,我可以告诉你尝试停止网络/etc/init.d/network stoprmmod igb再次modprobe igb查看是否有任何差异,如果可以的话请发布结果。

相关内容