在我们的带有 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 stop
并rmmod igb
再次modprobe igb
查看是否有任何差异,如果可以的话请发布结果。