TCP/IP 全卸載中的 LSO(Large Send Offload) 和 LRO(Large Receive Offload) 是網卡硬件加速技術,其核心目標是 將 TCP/IP 協議棧的處理任務從 CPU 轉移到網卡硬件,從而大幅降低 CPU 負載并提升網絡性能。以下是詳細解釋:
1. LSO(Large Send Offload)發送端卸載
- 問題背景:
當應用程序發送大量數據時(例如 64KB 文件),操作系統需要將數據拆分成多個 MTU 大小(如 1500B)的 TCP 分段。傳統方式由 CPU 完成分片、封裝 TCP/IP 頭部,消耗大量 CPU 資源。 - LSO 工作原理:
- 操作系統將 完整的大數據塊(如 64KB) 直接傳遞給網卡驅動。
- 網卡硬件自動完成:
- 將大數據塊按 MTU 拆分成小分段。
- 為每個分段生成 TCP/IP 頭部(序列號、校驗和等)。
- 僅通過一次 DMA 請求獲取數據,減少 PCIe 交互次數。
- 性能收益:
- CPU 開銷降低 90%+(例如發送 64KB 數據,CPU 中斷次數從 40+ 次減少到 1 次)。
- 吞吐量提升:100GbE 網卡可達 94 Gbps(接近線速)。
2. LRO(Large Receive Offload)接收端卸載
- 問題背景:
接收大量 TCP 分段時,CPU 需逐個重組數據包、驗證校驗和,導致高中斷頻率和延遲。 - LRO 工作原理:
- 網卡硬件在接收端緩存 屬于同一 TCP 流的分段。
- 將多個分段合并為 單個大數據包(例如將 50 個 1500B 包合并為 75KB)。
- 僅向 CPU 提交合并后的數據包,減少中斷次數。
- 性能收益:
- CPU 中斷頻率降低 10–50 倍(取決于數據流特征)。
- 延遲降低:小包處理延遲從 20μs 降至 5μs。
3. 全卸載技術棧(完整 TCP/IP 卸載)
現代智能網卡(如 NVIDIA ConnectX)進一步擴展了卸載范圍:
卸載功能 | 說明 | 硬件實現效果 |
---|---|---|
TCP 校驗和 | 網卡計算 IPv4/IPv6/TCP/UDP 校驗和 | 消除 CPU 校驗計算開銷 |
TSO(TCP Segmentation Offload) | LSO 的增強版,支持 IPv6/VLAN | 大文件傳輸零 CPU 干預 |
RSS(Receive Side Scaling) | 多隊列分流到不同 CPU 核心 | 避免單核瓶頸,提升并行性 |
VXLAN/GENEVE 封裝卸載 | 覆蓋網絡隧道封裝/解封裝 | 虛擬化網絡性能無損 |
4. 性能對比(啟用 vs 禁用卸載)
以 100GbE 網絡傳輸 64KB 數據 為例:
指標 | 禁用卸載(傳統 CPU 處理) | 啟用 LSO/LRO(硬件卸載) |
---|---|---|
CPU 占用率 | 80% (8 核心滿載) | 8% (單核輕度負載) |
中斷次數 | 43 次(發送+接收) | 2 次(發送 1 次 + 接收 1 次) |
有效吞吐量 | ≤ 40 Gbps | 94 Gbps |
延遲(P99) | 50μs | 8μs |
5. 技術限制與注意事項
- 兼容性問題:
- 某些防火墻/IDS 可能因 LRO 合并數據包而丟失原始包信息(需調整配置)。
- 適用場景:
- 適用:大數據傳輸(視頻流、文件傳輸)、高吞吐場景。
- 不適用:低延遲交易系統(需禁用 LRO 避免合并引入延遲)。
- 演進技術:
- GRO(Generic Receive Offload):Linux 內核的軟件級 LRO 替代方案,更靈活但效率低于硬件 LRO。
- USO(UDP Segmentation Offload):針對 UDP 的類似優化(如 NVIDIA ConnectX-6 以上支持)。
英偉達網卡的實現優勢
以 ConnectX-7 為例:
- 硬件加速引擎:內置 FlexParser? 技術,可卸載包括 TCP、VXLAN、TLS 在內的復雜協議。
- 動態負載均衡:結合 RSS + Flow Steering,自動分配流量到多核 CPU。
- RoCE 集成:LSO/LRO 與 RDMA 協同工作,實現 端到端零拷貝(例如 GPU Direct RDMA)。
💡 總結:LSO/LRO 是智能網卡的核心卸載技術,通過 硬件替代 CPU 處理網絡協議分片/重組,徹底釋放 CPU 算力,使 100GbE/400GbE 網絡的性能瓶頸從 CPU 轉移到物理鏈路本身。