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 转移到物理链路本身。