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。保留所有權利。