Chelsio N210 10Gb 以太网网络控制器¶
Linux 驱动程序发布说明
版本 2.1.1
2005 年 6 月 20 日
引言¶
本文档描述了 Chelsio 10Gb 以太网网络控制器的 Linux 驱动程序。此驱动程序支持 Chelsio N210 网卡,并向后兼容 Chelsio N110 型号的 10Gb 网卡。
功能¶
自适应中断 (adaptive-rx)¶
此功能提供了一种自适应算法,可调整中断合并参数,使驱动程序能够动态调整延迟设置,以在各种网络负载下实现最高性能。
用于控制此功能的接口是 ethtool。有关更多用法信息,请参阅 ethtool 的手册页。
默认情况下,adaptive-rx 已禁用。要启用 adaptive-rx
ethtool -C <interface> adaptive-rx on要禁用 adaptive-rx,请使用 ethtool
ethtool -C <interface> adaptive-rx off禁用 adaptive-rx 后,计时器延迟值将设置为 50us。您可以在禁用 adaptive-rx 后设置计时器延迟。
ethtool -C <interface> rx-usecs <microseconds>在 eth0 上将计时器延迟值设置为 100us 的示例
ethtool -C eth0 rx-usecs 100您也可以在禁用 adaptive-rx 时提供一个计时器延迟值
ethtool -C <interface> adaptive-rx off rx-usecs <microseconds>如果 adaptive-rx 被禁用并且指定了计时器延迟值,则计时器将设置为指定值,直到用户更改或启用 adaptive-rx 为止。
要查看 adaptive-rx 和计时器延迟值的状态
ethtool -c <interface>
TCP 分段卸载 (TSO) 支持¶
此功能也称为“大发送”,它允许系统的协议栈将部分出站 TCP 处理卸载到网络接口卡,从而降低系统 CPU 利用率并提高性能。
用于控制此功能的接口是 ethtool 1.8 或更高版本。有关更多用法信息,请参阅 ethtool 的手册页。
默认情况下,TSO 已启用。要禁用 TSO
ethtool -K <interface> tso off要启用 TSO
ethtool -K <interface> tso on要查看 TSO 的状态
ethtool -k <interface>
性能¶
以下信息仅作为示例,说明如何更改系统参数以进行“性能调优”以及应使用何种值。您可能希望或不希望更改这些系统参数,具体取决于您的服务器/工作站应用程序。Chelsio Communications 不以任何方式保证这样做,且风险由“您自行承担”。Chelsio 对数据丢失或设备损坏概不负责。
您的发行版可能有不同的操作方式,或者您可能更喜欢不同的方法。这些命令仅为提供操作示例,绝非最终定论。
对以下任何系统更改都只会在您重启系统之前生效。您可能希望编写一个在启动时运行的脚本,其中包含您系统的最佳设置。
设置 PCI 延迟计时器
setpci -d 1425::
0x0c.l=0x0000F800
禁用 TCP 时间戳
sysctl -w net.ipv4.tcp_timestamps=0
禁用 SACK
sysctl -w net.ipv4.tcp_sack=0
设置大量传入连接请求
sysctl -w net.ipv4.tcp_max_syn_backlog=3000
设置最大接收套接字缓冲区大小
sysctl -w net.core.rmem_max=1024000
设置最大发送套接字缓冲区大小
sysctl -w net.core.wmem_max=1024000
将 smp_affinity(在多处理器系统上)设置为单个 CPU
echo 1 > /proc/irq/<interrupt_number>/smp_affinity
设置默认接收套接字缓冲区大小
sysctl -w net.core.rmem_default=524287
设置默认发送套接字缓冲区大小
sysctl -w net.core.wmem_default=524287
设置最大选项内存缓冲区
sysctl -w net.core.optmem_max=524287
设置最大积压(内核丢弃前的未处理数据包数量)
sysctl -w net.core.netdev_max_backlog=300000
设置 TCP 读取缓冲区 (最小/默认/最大)
sysctl -w net.ipv4.tcp_rmem="10000000 10000000 10000000"
设置 TCP 写入缓冲区 (最小/压力/最大)
sysctl -w net.ipv4.tcp_wmem="10000000 10000000 10000000"
设置 TCP 缓冲区空间 (最小/压力/最大)
sysctl -w net.ipv4.tcp_mem="10000000 10000000 10000000"
单连接的 TCP 窗口大小
接收缓冲区 (RX_WINDOW) 的大小必须至少与发送方和接收方之间通信链路的带宽-延迟积一样大。由于 RTT 的变化,您可能需要将缓冲区大小增加到带宽-延迟积的 2 倍。请参阅 W. Richard Stevens 所著《TCP/IP 详解,卷 1,协议》第 289 页。
在 10Gb 速度下,使用以下公式
RX_WINDOW >= 1.25MBytes * RTT(in milliseconds) Example for RTT with 100us: RX_WINDOW = (1,250,000 * 0.1) = 125,000
256KB - 512KB 的 RX_WINDOW 大小应该足够。
设置最小、最大和默认接收缓冲区 (RX_WINDOW) 大小
sysctl -w net.ipv4.tcp_rmem="<min> <default> <max>"
- 多连接的 TCP 窗口大小
接收缓冲区 (RX_WINDOW) 的大小可以按照与单连接相同的方式计算,但应除以连接数。较小的窗口可以防止拥塞并促进更好的步调,尤其是在 MAC 级别流量控制效果不佳或机器不支持时。可能需要通过实验才能获得正确的值。此方法是为正确接收缓冲区大小提供的一个起点。
设置最小、最大和默认接收缓冲区 (RX_WINDOW) 大小的方式与单连接相同。
驱动程序消息¶
以下是 syslog 记录的最常见消息。这些消息可以在 /var/log/messages 中找到。
驱动程序启动
Chelsio Network Driver - version 2.1.1检测到网卡
eth#: Chelsio N210 1x10GBaseX NIC (rev #), PCIX 133MHz/64-bit链路已连接
eth#: link is up at 10 Gbps, full duplex链路已断开
eth#: link is down
已知问题¶
这些问题已在测试期间发现。以下信息提供了问题的解决方案。在某些情况下,此问题是 Linux 或特定 Linux 发行版和/或硬件平台固有的。
多处理器 (SMP) 系统上大量的 TCP 重传。
在具有多个 CPU 的系统上,网络控制器的中断 (IRQ) 可能绑定到多个 CPU。如果数据包数据在不同 CPU 之间拆分并以与预期不同的顺序重新组装,这将导致 TCP 重传。
要消除 TCP 重传,请将特定中断的 smp_affinity 设置为单个 CPU。您可以通过使用 ifconfig 查找 N110/N210 上使用的中断 (IRQ)。
ifconfig <dev_name> | grep Interrupt将 smp_affinity 设置为单个 CPU
echo 1 > /proc/irq/<interrupt_number>/smp_affinity强烈建议您不要在系统上运行 irqbalance 守护程序,因为它会更改您已应用的任何 smp_affinity 设置。irqbalance 守护程序每隔 10 秒运行一次,并将中断绑定到守护程序确定的负载最小的 CPU。要禁用此守护程序
chkconfig --level 2345 irqbalance off默认情况下,某些 Linux 发行版会启用内核功能 irqbalance,其功能与守护程序相同。要禁用此功能,请将以下行添加到您的引导加载程序中
noirqbalance Example using the Grub bootloader:: title Red Hat Enterprise Linux AS (2.4.21-27.ELsmp) root (hd0,0) kernel /vmlinuz-2.4.21-27.ELsmp ro root=/dev/hda3 noirqbalance initrd /initrd-2.4.21-27.ELsmp.img运行 insmod 后,驱动程序被加载,并且在未运行 ifup 的情况下启动了不正确的网络接口。
当使用 2.4.x 内核(包括 RHEL 内核)时,Linux 内核会调用一个名为“hotplug”的脚本。此脚本主要用于在插入 USB 设备时自动启动它们,但是,此脚本也尝试在加载内核模块后自动启动网络接口。hotplug 脚本通过扫描 /etc/sysconfig/network-scripts 中的 ifcfg-eth# 配置文件,查找 HWADDR=<mac_address> 来实现这一点。
如果 hotplug 脚本在任何 ifcfg-eth# 文件中找不到 HWADDRR,它将使用下一个可用的接口名称启动设备。如果此接口已为不同的网卡配置,则您的新接口将具有不正确的 IP 地址和网络设置。
要解决此问题,您可以将 HWADDR=<mac_address> 键添加到网络控制器的接口配置文件中。
要禁用此“热插拔”功能,您可以将驱动程序(模块名称)添加到位于 /etc/hotplug 的“黑名单”文件中。但已注意到此方法不适用于网络设备,因为 net.agent 脚本不使用黑名单文件。只需删除或重命名位于 /etc/hotplug 的 net.agent 脚本即可禁用此功能。
在带有 HyperTransport PCI-X Tunnel 芯片组的 AMD Opteron 系统上运行大量多连接流量时,传输协议 (TP) 挂起。
如果您的 AMD Opteron 系统使用 AMD-8131 HyperTransport PCI-X Tunnel 芯片组,则在使用总线 PCI-X 总线上的 133Mhz PCI-X 卡时,您可能会遇到 AMD 发现的“133-Mhz 模式拆分完成数据损坏”错误。
AMD 表示:“在高度特定的条件下,AMD-8131 PCI-X Tunnel 可以通过拆分完成周期向以 133 Mhz 运行的 PCI-X 卡提供过时数据”,从而导致数据损坏。
AMD 提供了此问题的三种解决方法,但是,Chelsio 建议使用第一个选项以在此错误情况下获得最佳性能
对于 133Mhz 二级总线操作,通过 PCI-X 卡的 BIOS 配置编程,将事务长度和未完成事务的数量限制为以下值
数据长度(字节):1k
允许的总未完成事务:2
有关此错误以及 AMD 建议的解决方法,请参阅 AMD 8131-HT/PCI-X 勘误表 26310 Rev 3.08 2004 年 8 月版,第 56 节,“133-MHz 模式拆分完成数据损坏”。
可能可以在 AMD 推荐的 PCI-X 设置之外进行操作,尝试将数据长度增加到 2k 字节以提高性能。如果您在使用这些设置时遇到问题,请恢复到“安全”设置并重现问题,然后再提交错误或寻求支持。
注意
大多数系统上的默认设置是 8 个未完成事务和 2k 字节数据长度。
在多处理器系统上,已注意到处理 10Gb 网络的应用程序可能在 CPU 之间切换,导致性能下降和/或不稳定。
如果在 SMP 系统上运行并进行性能测量,建议您运行最新的 netperf-2.4.0+,或者使用绑定工具,例如 Tim Hockin 的 procstate 工具(runon)<http://www.hockin.org/~thockin/procstate/>。
将 netserver 和 netperf(或其他应用程序)绑定到特定的 CPU 将在性能测量中产生显著差异。您可能需要试验将应用程序绑定到哪个 CPU,以实现系统的最佳性能。
如果您正在开发专为 10Gb 网络设计的应用程序,请记住您可能需要查看内核函数 sched_setaffinity 和 sched_getaffinity 来绑定您的应用程序。
如果您只是运行用户空间应用程序,例如 ftp、telnet 等,您可能希望尝试 Tim Hockin 的 procstate 工具提供的 runon 工具。您还可以尝试将接口绑定到特定的 CPU:runon 0 ifup eth0
支持¶
如果您在软件或硬件方面遇到问题,请通过电子邮件联系我们的客户支持团队:support@chelsio.com 或访问我们的网站:http://www.chelsio.com
Chelsio Communications
370 San Aleso Ave.
Suite 100
Sunnyvale, CA 94085
http://www.chelsio.com
本程序是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证第 2 版的条款重新分发和/或修改它。
您应该已经随本程序收到了 GNU 通用公共许可证的副本;如果未收到,请致函:Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA。
本软件“按原样”提供,不附带任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证。
版权所有 © 2003-2005 Chelsio Communications。保留所有权利。