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 發行版和/或硬體平臺固有的。

  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 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 位元組資料長度。

  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 通用公共許可證第 2 版的條款重新分發和/或修改它。

您應該已經隨本程式收到了 GNU 通用公共許可證的副本;如果未收到,請致函:Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA。

本軟體“按原樣”提供,不附帶任何明示或暗示的保證,包括但不限於適銷性和特定用途適用性的暗示保證。

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