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

相关推荐
莫小墨2 小时前
Modbus协议
网络协议
汤愈韬2 小时前
防火墙双机热备技术之VRRP
网络·网络协议·网络安全·security·huawei
北京耐用通信2 小时前
告别通信干扰与距离限制:耐达讯自动化Profibus总线光纤中继器赋能伺服驱动器稳定连接
人工智能·科技·网络协议·自动化·信息与通信
乾元3 小时前
10 个可复制的企业级项目:从需求到交付的 AI 网络工程模板(深度实战版)
运维·网络·人工智能·网络协议·安全
我是海飞3 小时前
杰理 AC792N WebSocket 客户端例程使用测试教程
c语言·python·单片机·websocket·网络协议·嵌入式·杰理
刘某某.3 小时前
RPC分类
网络·网络协议·rpc
chao1898443 小时前
基于STM32与W5500的Modbus TCP协议实现指南
stm32·嵌入式硬件·tcp/ip
石像鬼₧魂石4 小时前
windows系统139/tcp与445/tcp端口渗透完整流程闭环(复习总结)
windows·网络协议·tcp/ip
科技块儿4 小时前
内网系统IP离线数据库搭建与维护完整方案
数据库·网络协议·tcp/ip