Chelsio N210 10Gb 以太网网络控制器

Linux 驱动程序发行说明

版本 2.1.1

2005 年 6 月 20 日

简介

本文档描述了 Chelsio 10Gb 以太网网络控制器的 Linux 驱动程序。该驱动程序支持 Chelsio N210 NIC,并向后兼容 Chelsio N110 型号的 10Gb NIC。

功能特性

自适应中断 (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 后,计时器延迟值将设置为 50 微秒。您可以在禁用 adaptive-rx 后设置计时器延迟

ethtool -C <interface> rx-usecs <microseconds>

一个在 eth0 上将计时器延迟值设置为 100 微秒的示例

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 Illustrated, Volume 1, The Protocols”第 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

检测到 NIC

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 发行版和/或硬件平台固有的。

  1. 多处理器 (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
    
  2. 在运行 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 脚本即可禁用此功能。

  3. 在具有 HyperTransport PCI-X 通道芯片组的 AMD Opteron 系统上运行繁重的多连接流量时,传输协议 (TP) 挂起。

    如果您的 AMD Opteron 系统使用 AMD-8131 HyperTransport PCI-X 通道芯片组,则您在使用总线 PCI-X 总线上的 133Mhz PCI-X 卡时,可能会遇到 AMD 确定的“133-Mhz 模式分割完成数据损坏”错误。

    AMD 表示:“在高度特定的条件下,AMD-8131 PCI-X 通道可以通过分割完成周期向以 133 Mhz 运行的 PCI-X 卡提供过时的数据”,从而导致数据损坏。

    AMD 为此问题提供了三种解决方法,但是,Chelsio 建议使用第一种选项以获得此错误的最佳性能

    对于 133Mhz 的二级总线操作,通过 PCI-X 卡的 BIOS 配置编程将事务长度和未完成的事务数量限制为以下值

    数据长度(字节):1k

    允许的总未完成事务:2

    有关此错误以及 AMD 建议的解决方法,请参阅 AMD 8131-HT/PCI-X Errata 26310 Rev 3.08 2004 年 8 月,第 56 节,“133-MHz 模式分割完成数据损坏”。

    可能会在 AMD 推荐的 PCI-X 设置之外工作,尝试将数据长度增加到 2k 字节以提高性能。如果您在这些设置方面遇到问题,请恢复到“安全”设置,并在提交错误或寻求支持之前重复该问题。

    注意

    大多数系统上的默认设置为 8 个未完成的事务和 2k 字节的数据长度。

  4. 在多处理器系统上,请注意,处理 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 通用公共许可证第二版条款对其进行重新分发和/或修改。

您应该已收到一份 GNU 通用公共许可证的副本,与本程序一同分发;如果没有,请致信 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA。

本软件按“原样”提供,不附带任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的暗示保证。

版权所有 © 2003-2005 Chelsio Communications。保留所有权利。