文章目录
- 关于网卡如何给CPU减负方法及策略:
-
- [一. udp offload](#一. udp offload)
-
- [1.1 理论知识](#1.1 理论知识)
-
- [1.1.1 UDP理论最大传输数据大小](#1.1.1 UDP理论最大传输数据大小)
- [1.1.2 UDP传输数据情况](#1.1.2 UDP传输数据情况)
- [1.2 开销对比表](#1.2 开销对比表)
- [📊 **UDP分片方式系统开销对比表**](#📊 UDP分片方式系统开销对比表)
- [1.3 实际测试](#1.3 实际测试)
- [1.4 网卡支持情况](#1.4 网卡支持情况)
- [二. RDMA](#二. RDMA)
-
- [2.1 RDMA 介绍](#2.1 RDMA 介绍)
-
- [2.1.1 RDMA 对比 DMA](#2.1.1 RDMA 对比 DMA)
- [2.1.2 RDMA 特点](#2.1.2 RDMA 特点)
- [2.1.3 RDMA 三大协议](#2.1.3 RDMA 三大协议)
- [2.2 网卡RDMA支持情况](#2.2 网卡RDMA支持情况)
-
- [2.2.1 mellanox connectx-3](#2.2.1 mellanox connectx-3)
- [2.2.2 Chelsio-T520](#2.2.2 Chelsio-T520)
- [2.2.3 intel-E810](#2.2.3 intel-E810)
- [2.3 windows 对 RDMA 支持情况](#2.3 windows 对 RDMA 支持情况)
-
- [2.3.1 SMB 直通](#2.3.1 SMB 直通)
- [2.3.2 Windows Sockets Direct (WSD)](#2.3.2 Windows Sockets Direct (WSD))
关于网卡如何给CPU减负方法及策略:
一. udp offload
1.1 理论知识
1.1.1 UDP理论最大传输数据大小
-
使用UDP传输数据时,有限制大小,协议里面是用2字节大小表示传输数据大小,理论最大也就是2^16 = 65536字节。
-
但是由于各种原因,实际上应用层发送的时候每次只会发送MTU(Maximum Transmission Unit,最大传输单元)大小的数据。
1.1.2 UDP传输数据情况
- 发送数据包有二种情况,分别是数据包小于 MTU, 数据包大于MTU
- 数据包大小 MTU,这种也是最基础的发送情况。
- 数据包大于 MTU ,这种就需要去把数据包拆分开,拆分至MTU大小,如何拆分分三种情况,如下:
- 操作系统协议栈分片(IP层)。(首包具有UDP头)
- UDP GSO (内核GSO层),处于网卡驱动层。发送给网卡前一刻进行分片。(每包都有UDP头)
- UFO(USO),交给网卡进行分片。
注意:Windows 10 版本 2004 及更高版本中支持的 UDP 分段卸载(USO)
1.2 开销对比表
📊 UDP分片方式系统开销对比表
| 对比维度 | 每次发送MTU大小(应用层分片) | IP层分片(协议栈分片) | UDP GSO(内核延迟分片) | UFO(USO)(硬件卸载) |
|---|---|---|---|---|
| 分片机制 | 应用层主动控制分片 | 网络层(IP层)强制分片 | 内核GSO层延迟分片 | 网卡硬件执行分片 |
| 系统调用次数 | ⚠️ 极高 (需为每个MTU包调用一次send()) |
⚠️ 高 (每个分片独立调用send()) |
✅ 低 (单次sendmmsg()提交聚合缓冲区) |
✅ 极低(单次调用提交超大缓冲区) |
| CPU开销 | ⚠️ 高 | ⚠️ 极高 | ⚠️ 中低 | ✅ 极低 |
| 内存操作 | 多次独立数据拷贝 | 多次数据拷贝与分片封装 | 聚合分片信息(sk_buff) |
DMA零拷贝(Scatter-Gather) |
| 配置要求 | 需应用层开发逻辑控制 | 默认支持 | 需内核启用GSO | 网卡硬件支持 |
1.3 实际测试
测试条件如下:
| 处理器 | 机带RAM | 网卡 | MTU(巨帧模式) | 数据量大小 |
|---|---|---|---|---|
| 11th Gen Intel® Core™ i5-1135G7 | 16GB | Realtek RTL8111H千兆网卡 | 9014 | 1.2GB |
测试结果如下:
| 应用层分片 | IP层分片(协议栈分片) | UDP GSO(内核延迟分片) | UDP GSO Offload(硬件卸载) |
|---|---|---|---|
| 每次发包大小:8192字节 | 每次发包大小:65507字节 | 每次发包大小:65507字节 | 每次发包大小:65507字节 |
| 花费时间:160-180s | 花费时间:20-25s | 花费时间:17-18s | 暂无 |
注意:由于是UDP传输都有丢包情况,丢包率 :IP层 分片 > UDP GSO > 应用层分片
1.4 网卡支持情况
-
网卡一般都支持TSO,几乎很少支持USO. 目前已知支持UFO(USO)型号较少。
-
支持USO比较合适的芯片为:intel-X710(10G),intel-E810(25G)
二. RDMA
2.1 RDMA 介绍
2.1.1 RDMA 对比 DMA
-
DMA :使用DMA技术,外部设备(PCIE设备)能够绕开CPU直接访问主机的系统主存
-
RDMA(Remote Direct Memory Access):在概念上是相对于DMA而言的。指外部设备能够绕过CPU,不仅可以访问本地主机的主存,还可以访问另一台远端主机上用户态的系统主存。

2.1.2 RDMA 特点
- CPU Offload:无需CPU干预,应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充
- Kernel Bypass:RDMA 提供一个专有的 Verbs interface 而不是传统的TCP/IP Socket interface。应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换
- Zero Copy:每个应用程序都能直接访问集群中的设备的虚拟内存,这意味着应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下,数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。

2.1.3 RDMA 三大协议
RDMA底层主要有三大协议,IWARP/RoCE/InfiniBand。如下图:
| 特性 | iWARP | RoCE/RoCEv2 | InfiniBand |
|---|---|---|---|
| 网络要求 | 标准以太网 | DCB/PFC 以太网 | 专用网络 |
| 路由支持 | ✅ | ✅ (RoCEv2) | ❌ |
| 延迟 | 中等 (1.5-2μs) | 低 (0.8-1.2μs) | 极低 (0.5-0.8μs) |
| 吞吐量 | 最高 100Gbps | 最高 400Gbps | 最高 600Gbps |
| CPU 开销 | 中等 | 低 | 最低 |
| WSD 优化 | TCP 卸载 | UDP/IP 卸载 | 原生支持 |

2.2 网卡RDMA支持情况
2.2.1 mellanox connectx-3
| 协议 | ConnectX-3 基础型号 | ConnectX-3 Pro |
|---|---|---|
| iWARP | ❌ | ❌ |
| RoCEv1 | ✅ | ✅ |
| RoCEv2 | ❌ | ✅(固件限制) |
| InfiniBand | ✅ | ✅ |
2.2.2 Chelsio-T520
| 协议 | 支持情况 |
|---|---|
| iWARP | ✅ 完全支持 |
| RoCE/RoCEv2 | ❌ 不支持 |
| InfiniBand | ❌ 不支持 |
2.2.3 intel-E810
| 协议 | 支持情况 |
|---|---|
| iWARP | ✅ 完全支持 |
| RoCE v1 | ⚠️ 有限支持 |
| RoCE v2 | ✅ 完全支持 |
| InfiniBand | ❌ 不支持 |
2.3 windows 对 RDMA 支持情况
2.3.1 SMB 直通
-
SMB协议介绍:SMB(全称是Server Message Block)是一个协议名, 是一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机等资源。SMB一开始的设计是在NetBIOS协议上运行的,而NetBIOS本身则运行在NetBEUI、IPX/SPX或TCP/IP协议上。
-
Windows Server 包括一个名为"服务器消息块"(SMB)Direct 的功能,该功能支持使用具有远程直接内存访问(RDMA)功能的网络适配器。 具有 RDMA 的网络适配器可以全速运行,且延迟较低,不会影响 CPU 利用率。 对于 Hyper-V 或Microsoft SQL Server 等工作负荷,此功能使远程文件服务器类似于本地存储。 SMB 直通在 Windows Server 2012 和将来的迭代中默认自动配置和启用。
**注意:**Windows 10 和 Windows 11 系列仅限于客户端,不能充当 SMB 直通服务器。
传统SMB路径 :
应用内存 → 内核缓冲 → TCP/IP栈 → 网卡 → 网络 → 对端内核缓冲 → 应用内存
SMB Direct路径 :
应用内存 → RDMA网卡 → 网络 → 对端应用内存
2.3.2 Windows Sockets Direct (WSD)
WSD允许现有的Winsock应用程序透明地使用RDMA(远程直接内存访问)技术,而无需修改应用程序代码。
(DeepSeek是这样回答,微软官方以前有这句话,现在下架了(链接失效了)),感觉上应该是可以这样用的(待验证)
Sockets Direct (WSD)
WSD允许现有的Winsock应用程序透明地使用RDMA(远程直接内存访问)技术,而无需修改应用程序代码。