Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux TSO (TCP Segmentation Offload) 實現原理:網卡硬體分段降低 CPU 負載

編輯:關於 Linux

TSO 讓網卡硬體接管 TCP 分段重組,CPU 僅需提交大塊資料 (如 64KB),網卡依 MTU 自動切割成多個 MSS 大小的 TCP 封包並補齊標頭。本文從數位邏輯電路角度,描述 TSO 硬體引擎的核心模組:封包緩衝、序號產生器、檢核和計算、標頭模板引擎、DMA 搬移控制器。

TSO 硬體架構圖

TSO 硬體處理流程

  1. 驅動程式提交:skb (socket buffer) 標記 TSO 標誌,含完整 TCP 負載 (≤ 64KB)、模板標頭 (IP/TCP 固定欄位)。
  2. 分段引擎:依 MSS 計算分段數,啟動計數器。
  3. 序號產生器:每段遞增 MSS 位元組數。
  4. 標頭模板引擎:複製模板 → 更新 IP 總長度、TCP 序號、Flags (PSH/ACK)、檢核和。
  5. 檢核和計算器:硬體並行計算 IP/TCP 檢核和 (含偽標頭)。
  6. DMA 搬移:將完成的封包搬移至 TX 環形緩衝,觸發發送。

關鍵電路模組

  • 比較器/譯碼器:判斷剩餘負載是否 ≥ MSS。
  • 加法器/累加器:序號遞增、IP ID 遞增。
  • 多工器:選擇模板欄位或動態計算欄位。
  • 觸發器/狀態機:控制分段循環 (IDLE → SEG_BUILD → CHKSUM → DMA → NEXT)。

驅動程式協作 (Linux Kernel)

// skb 準備
skb_shinfo(skb)->gso_size = mss;      // 設定分段大小
skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
skb->ip_summed = CHECKSUM_PARTIAL;    // 硬體計算檢核和

// 網卡驅動 xmit
netdev_start_xmit(skb, dev) {
    if (skb_is_gso(skb))
        hw_tso_segment(skb);   // 觸發硬體 TSO 引擎
}

效能效益

  • CPU 循環減少 90%+ (大封包場景)。
  • 記憶體頻寬降低 (少建立 skb 結構體)。
  • 中斷次數減少 (單次 DMA 完成多封包)。

TSO 是現代高速網卡 (10GbE+) 的標配功能,配合 LRO (Large Receive Offload) 實現雙向卸載。

Copyright © Windows教程網 All Rights Reserved