目录

RDMA-00-名词解释

概述

  1. Mellanox: 迈洛思是基于InfiniBand和以太网技术的计算机网络产品供应商,已经被Nvidia收购
  2. RDMA: Remote Direct Memory Access也叫远程直接内存访问,是一种绕过远程主机操作系统内核访问其内存中数据的技术,由于不经过操作系统,不仅节省了大量CPU资源,同样也提高了系统吞吐量、降低了系统的网络通信延迟,尤其适合在大规模并行计算机集群中有广泛应用
  3. InfiniBand: 一种高性能、低延迟的互连技术,它专门用于连接计算机和存储设备,以提高计算机集群和数据中心之间的通信性能。它使用专用的物理介质和协议,支持点对点和多点连接,同时支持RDMA(远程直接内存访问)和消息传递等通信方式
  4. RoCE: RDMA over Converged Ethernet,是一种网络协议,允许通过以太网网络进行远程直接内存访问(RDMA),可以在不需要特殊硬件支持的情况下,实现低延迟、高吞吐量的数据传输
  5. iWARP: 互联网广域RDMA协议,是一种计算机网络协议,实施远程直接内存访问(RDMA),以通过Internet协议(IP)网络进行高效数据传输
  6. HCA: The IB Host Channel Adapter,一般是指RDMA网卡
  7. SRIOV: Single Root Input/Output Virtualization允许单个物理网络接口控制器(NIC)出现为多个独立的虚拟NIC,每个虚拟NIC都具有自己的虚拟资源集,例如虚拟MAC地址、虚拟VLAN标签和虚拟队列
  8. Multus CNI: 为pod提供了多网络的支持

传输速率对比

RDMA 设备的传输速率主要有以下几种类型:

  1. FDR(Fourteen Data Rate): 传输速率为56Gbps,支持InfiniBand和Omni-Path等协议
  2. EDR(Enhanced Data Rate): 传输速率为100Gbps,支持InfiniBand 和 Omni-Path 等协议
  3. HDR(High Data Rate): 传输速率为200Gbps,支持InfiniBand和Omni-Path等协议
  4. NDR(Next Data Rate): 传输速率为400Gbps,支持InfiniBand和Omni-Path等协议

以太网卡的传输速率主要有以下几种类型:

  1. 10Mbps: 传输速率为10兆位每秒,属于最初的以太网标准。现在已经很少使用
  2. 100Mbps: 传输速率为100兆位每秒,也称为快速以太网,已经成为了标准的以太网速度
  3. 1Gbps: 传输速率为1千兆位每秒,也称为千兆以太网,是目前最常用的以太网速度
  4. 10Gbps: 传输速率为10千兆位每秒,也称为10千兆以太网,适用于高速数据传输的场景,如大规模数据中心
  5. 25Gbps/40Gbps/50Gbps/100Gbps: 这些都是高速以太网标准,适用于超高速数据传输的场景,如大型互联网企业、云计算、高性能计算等

需要注意的是,RDMA 设备的传输速率不仅取决于硬件设备本身,还受到操作系统、驱动程序、网络拓扑结构等多方面因素的影响。因此,在实际使用中,需要根据具体情况综合考虑并进行优化配置,以达到最佳性能。

Mellanox RDMA设备

NVIDIA Mellanox ConnectX-5 Adapters

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_9.png

NVIDIA Mellanox SB7780/7880 InfiniBand Router Switch Series

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_10.png

Intel RDMA设备

Intel x722-da2 Ethernet Network Adapter

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_3.png

Intel True Scale Fabric Edge 12200-18 40G 1U 18-Port Switch Network Infiniband

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_12.png

RDMA

RDMA(Remote Direct Memory Access)和 Socket 都是网络传输技术,但它们有几个重要的区别:

  1. 数据传输方式不同: Socket是一种通过传统网络协议栈传输数据的方法,而RDMA是一种通过直接访问内存中的数据来传输数据的方法
  2. 传输效率不同: 由于RDMA可以直接访问内存中的数据,从而避免了多次数据拷贝和数据转换,因此在传输效率方面要优于Socket
  3. CPU开销不同: 由于RDMA可以避免多次数据拷贝和数据转换,因此可以减轻CPU的负载,从而提高系统的可扩展性和吞吐量
  4. 应用场景不同: RDMA适用于需要高性能、低延迟和高吞吐量的应用场景,例如高性能计算、大数据和云计算等领域;而Socket更适用于一般的网络应用,例如Web服务器、邮件服务器等

Zero Copy/Kernel Bypass/No CPU

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_7.png

RDMA Server/Client

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_6.png

RoCE

一个典型的疑问,如何服务端是 RDMA 网卡,但是客户端只有以太网卡,还能使用到 RDMA 的好处吗。

  1. 数据包格式: RoCEv2使用了与InfiniBand相同的数据包格式,即包含了一个数据头(包括了发送方和接收方的地址信息、数据长度、服务类型等信息)和一个数据体
  2. 数据传输方式: RoCEv2将RDMA操作的传输方式映射到了以太网协议栈上。具体来说,RoCEv2采用了RDMA连接的三元组模型(即QP,Queue Pair),将QP映射到了Ethernet上的VLAN和UDP端口上
  3. 数据包传输: RoCEv2采用了UDP/IP协议栈作为底层传输层,使用标准的以太网协议进行数据包传输。在传输过程中,RoCEv2将RDMA数据包封装在UDP数据包中,然后再将UDP数据包封装在IP数据包中,最终通过以太网进行传输
  4. 数据处理: 在接收方,RoCEv2使用与InfiniBand相同的数据处理方式,即将接收到的数据包直接传输到用户内存中,而不需要经过内核的复制和处理

需要注意的是,RoCEv2 需要使用数据中心网路(DCB)和 PFC(Priority Flow Control)等协议来保证传输的 QoS(Quality of Service)和可靠性。在实际使用中,为了实现最佳的性能和效果,还需要针对具体的应用场景和网络环境进行调整和优化。

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_8.png

iWARP

iWARP 和 RoCEv2 都是用于以太网上运行 RDMA 的协议,它们之间的主要区别如下:

  1. 底层网络技术: iWARP使用TCP/IP协议栈来进行RDMA操作,而RoCEv2使用UDP/IP协议栈。iWARP需要使用特殊的网卡来处理RDMA操作,而RoCEv2可以在标准的以太网卡上运行
  2. 延迟和吞吐量: iWARP的延迟通常比RoCEv2更高,但在高负载情况下,iWARP的吞吐量可能更高。RoCEv2具有更低的延迟,但在高负载情况下可能会出现吞吐量瓶颈
  3. 协议开销: iWARP协议比RoCEv2更为复杂,因此在处理RDMA操作时需要更多的CPU和内存资源。RoCEv2协议更加简单,因此在处理RDMA操作时需要的CPU和内存资源更少
  4. 络兼容性: 由于iWARP使用TCP/IP协议栈,因此它可以很好地与现有的网络基础设施集成。RoCEv2使用UDP/IP协议栈,需要对网络进行一些修改以支持RDMA操作。

其他

价格

Intel X540 AT2双口万兆

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_4.png

Intel X710BM2-F2双口万兆

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_5.png

IB交换机

/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_11.png

技术文档

Mellanox 因为已经被 Nvidia 收购了,所以很多文档都从原来的站点迁移到 Nvidia 的官网,但是 Mellanox 原来的站点还有效,因此有些技术文章,或者部分的问答社区中的内容会同时存在在 Mellanox 和 Nvidia 的官网,如果查看的产品比较新的话,那么一般在 Nvidia 的官网上是能找到的,如果比较旧的话就不一定了。

另外就是从 Nvidia 检索到的 Mellanox 相关的文章内的一些其他链接不一定会正常跳转到,如果无法跳转,可以直接到 Mellanox 的社区里直接搜索。

  1. Nvidia技术社区
  2. Mellanox技术社区

常用工具

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 安装工具
yum install -y iproute libibverbs libibverbs-utils infiniband-diags
yum install -y qperf
# 显示device信息(简略)
ibv_devinfo	               	
# 显示device信息(详细)
ibv_devinfo -v	          
# 输出指定设备的主要信息
ibv_devinfo -d mlx4_0     
# 输出指定设备的详细信息
ibv_devinfo -d mlx4_0 -v  	
# 列出device
ibv_devices
# 显示device和网口的对应关系,属于Mellonx的命令,intel的需要阅读用户说明自己根据他们的脚本编写类似的命令
ibvdev2netdev
# 显示gid列表,属于Mellonx的命令,intel的需要阅读用户说明自己根据他们的脚本编写类似的命令
show_gids
# 查看端口包丢弃情况,属于Mellonx的命令,intel的需要阅读用户说明自己根据他们的脚本编写类似的命令
show_drop
# 查看核更改网卡工作模式Ethernet或infiniband模式
ibstatus
# 监视InfiniBand异步事件
ibv_asyncwatch
# 显示光纤网络中所有链路的链路信息	
iblinkinfo
iblinkinfo.pl
# 用法sminfo –help查询IB SMInfo属性
sminfo
# 查询InfiniBand设备状态或IB地址上的系统状态
ibstat
ibsysstat 
# RDMA网卡自测,查看网卡状态(Mellonx)
hca_self_test.ofed
# Mellanox OFED安装的信息
/etc/infiniband/info
# 看自动加载的模块列表(Mellonx)
cat /etc/infiniband/openib.conf
# 检查Mellanox网卡是否安装和版本
lspci -v | grep -i mellanox
# 查询ice和固件版本
ethtool -i ens21f0
# 查看irdma版本、ice版本
modinfo irdma
modinfo ice
# 查看rdma-core版本
rpm -qa|grep rdma-core
# 验证RDMA内核模块是否已加载
/etc/init.d/openibd status
# 显示GID
show_gids
# 显示当前设备安装的OFED包的信息驱动、工具等
ofed_info

工具实测

在公司的 RDMA 测试机器上进行一些命令的操作,可以发现是异构网卡的情况,同时有 Intel 和 Mellanox 的 IB 设备。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# ibstatus
Infiniband device 'i40iw0' port 1 status:
	default gid:	 0894:eff6:4ec4:0000:0000:0000:0000:0000
	base lid:	 0x1
	sm lid:		 0x0
	state:		 1: DOWN
	phys state:	 3: Disabled
	rate:		 10 Gb/sec (4X SDR)
	link_layer:	 Ethernet

Infiniband device 'i40iw1' port 1 status:
	default gid:	 0894:eff6:4ec3:0000:0000:0000:0000:0000
	base lid:	 0x1
	sm lid:		 0x0
	state:		 1: DOWN
	phys state:	 3: Disabled
	rate:		 10 Gb/sec (4X SDR)
	link_layer:	 Ethernet

Infiniband device 'mlx5_bond_0' port 1 status:
	default gid:	 fe80:0000:0000:0000:bace:f6ff:fe4e:19e4
	base lid:	 0x0
	sm lid:		 0x0
	state:		 4: ACTIVE
	phys state:	 5: LinkUp
	rate:		 25 Gb/sec (1X EDR)
	link_layer:	 Ethernet

qperf测试RDMA网络

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
server: 172.24.166.120
client: 
yum install -y qperf
ping -c5 192.0.2.1
qperf
qperf -t 60 172.24.166.120 tcp_bw tcp_lat
# qperf -t 60 172.24.166.120 tcp_bw tcp_lat 无rdma -> rdma
tcp_bw:
    bw  =  931 MB/sec
tcp_lat:
    latency  =  26.4 us
    
# qperf -t 60 172.24.166.120 tcp_bw tcp_lat rdma -> rdma
/rdma-00-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/img_1.png

公有云

阿里云/腾讯云有提供 eRDMA 的机型。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 阿里云eRDMA
yum update -y
yum install -y gcc-c++ dkms cmake kernel-devel kernel-headers libnl3 libnl3-devel
wget http://mirrors.cloud.aliyuncs.com/erdma/erdma_installer-latest.tar.gz
tar -xvf erdma_installer-latest.tar.gz && cd erdma_installer
sh install.sh --batch
eadm ver
yum install -y qperf
lspci | grep Mellanox
ibv_devinfo
rdma link show
ip link show ib0
yum install -y qperf

参考资料

  1. InfiniBand和RDMA网络
  2. 【RDMA】InfiniBand IB常用命令|历史命令记录
  3. 启用通过RDMA(NFSoRDMA)的NFS
  4. 压测工具-qpefr测试带宽和延时
  5. 阿里云eRDMA简要解读,用云计算推动RDMA通用化和平民化
  6. 性能透明提升50%,详解SMC+ERDMA云上超大规模高性能网络协议栈
  7. 系列解读SMC-R: 透明无感提升云上TCP应用网络性能(一)
  8. rdma镜像
  9. 性能对比
  10. Docker使用OpenvSwitch网桥
  11. 使用OpenvSwitch实现跨主机连接Docker容器
  12. Docker+ovs,原来如此简单
  13. 技术干货|FreeFlow:基于软件的虚拟RDMA容器云网络
  14. K8s使用RDMA进行高速通信
  15. 在Kubernetes上使用RDMA
  16. Kubernetes与HPC: (1)RDMA网络
  17. 从零开始入门 K8s: GPU 管理和 Device Plugin 工作机制
  18. Kubernetes学习(k8s基于InfiniBand实现HPC高性能容器网络组网方案实践二)
  19. Kubernetes学习(k8s基于InfiniBand实现HPC高性能容器网络组网方案实践一)
  20. NVIDIA Mellanox 网卡安装使用手册(中文简易版)
  21. 配置InfiniBand和RDMA网络
  22. How-to: Deploy RDMA accelerated Docker container over InfiniBand fabric.
  23. Passing through RDMA network devices to docker containers
  24. Single Root IO Virtualization - SR-IOV
  25. NVIDIA Firmware Tools (MFT)
  26. RDMA over Converged Ethernet (RoCE)
  27. RDMA Bonding
  28. CentOS系统Bonding+VLAN+Bridge配置
  29. NVMe over RDMA的安装配置
  30. 宿主机监控
  31. K8S-SRIOV及multus CNI安装测试
  32. Docker RoCE MACVLAN Networking with ConnectX4/ConnectX5
  33. linux 查看网卡型号(grep -A 1 用法)
  34. Mellanox (NVIDIA) 网卡型号速查表
  35. 如何使用 KVM(以太网)为 CONNECTX-4/CONNECTX-5/CONNECTX-6 配置 SR-IOV
  36. ConnectX®-4 Lx EN Card
  37. SR-IOV配置方法
  38. ConnectX-4 Lx
  39. 什么是 InfiniBand?InfiniBand 交换机与其他交换机有啥区别?
  40. Mellanox网卡驱动安装指南 Mellanox OFED
  41. Infiniband(Mellanox)+CentOS7的安装
  42. CentOS配置双网卡(Mellanox和传统以太网卡)
  43. Installing the NVIDIA Mellanox InfiniBand Drivers
  44. Mellanox Repo - 4.7 Ethernet Drivers for CentOS 7
  45. linux下82599网卡 iov,CentOS7开启网卡直通模式(SR-IOV)
  46. CentOS7使用SR-IOV创建KVM虚拟机方法
  47. NIC使用sr-iov
  48. 创建vf报错,问题求助
  49. SR-IOV网卡虚拟化使用教程
  50. 大规模RDMA技术实践
  51. 如何使用tcpdump工具(ConnectX-4)dump RDMA流量
警告
本文最后更新于 2023年4月9日,文中内容可能已过时,请谨慎参考。