关于网卡如何给CPU减负方法及策略

文章目录

  • 关于网卡如何给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(远程直接内存访问)技术,而无需修改应用程序代码。

相关推荐
玉梅小洋1 小时前
Linux命令详解 —— IP 命令及永久配置
linux·运维·tcp/ip
huohaiyu1 小时前
IP协议详解
服务器·网络·tcp/ip
LaoZhangGong1232 小时前
学习TCP/IP的第9步:客户端和服务端综合测试
网络·学习·tcp/ip
aesthetician4 小时前
WebSocket: 实时通信的脉动:深度解析与 TypeScript 实践
websocket·网络协议·typescript
云小逸5 小时前
【网络通信】TCP核心原理深度解析:三次握手/四次挥手为基,拥塞控制与慢启动核心精讲
网络·网络协议·tcp/ip
深蓝电商API5 小时前
httpx 异步客户端处理 WebSocket 数据
websocket·网络协议·httpx
苏渡苇6 小时前
用 Spring Boot 项目给工厂装“遥控器”:一行 API 控制现场设备!
java·人工智能·spring boot·后端·网络协议·边缘计算
北京耐用通信6 小时前
电子制造行业:耐达讯自动化Profinet转DeviceNet网关助力工业相机高效互联
人工智能·数码相机·物联网·网络协议·自动化·信息与通信
希赛网6 小时前
华为认证数通备考,以太网交换机的基础原理与应用
网络协议·华为认证·数通·希赛·交换路由·交换机基础与应用·以太网交换
小李独爱秋6 小时前
计算机网络经典问题透视:无线局域网名词中DCF和PCF的含义是什么?
网络协议·计算机网络·网络安全·信息与通信·dcf·pcf