RoCE 协议介绍

发布时间: 更新时间: 总字数:1201 阅读时间:3m 作者: IP上海 分享 网址

RoCE(RDMA over Converged Ethernet) 是一种网络协议,可实现通过以太网的远程直接访问(RDMA)

介绍

  • RoCE v1 协议 是一个以太网链路层协议,带有 ethertype 0x8915,它允许同一以太网广播域中的任何两个主机间的通信
  • RoCE v2 协议IPv4IPv6 协议的 UDP 上存在
    • 对于 RoCE v2,通过 UDP 报文头的 Destination Port Number(目的端口号)判断该协议,RoCE v2 固定是 4791
    • RoCE v2 的基本特性
      • IPv4 和 IPv6 支持
      • 多队列支持
      • 硬件无关性
      • 网络层优化
      • 硬件加速
  • 优缺点
    • RoCE 相比于 Infiniband,主要还是省钱
    • RoCE 性能上相比 Infiniband 有损失
    • iWARP 相比于 RoCE 协议栈更复杂,使用较少

RoCE v2 交换机配置要求

  • 选择 RoCE v2 兼容的交换机:确保网络交换机支持 RoCE v2
  • 启用 PFC(Priority Flow Control): RoCE v2 依赖于 PFC 以确保流的有序传输
  • RoCE 的拥塞管理依赖需要配置 DCB(Data Center Bridging,数据中心桥接),实现将传统的以太网变成无损以太网的技术:阿里云自研 HPCC 流控算法
    • 配置 DCB 以确保 RoCE v2 流量得到适当的带宽和优先级
    • 确保为 RoCE v2 流配置足够的带宽,以满足性能需求
  • 启用 ECN(Explicit Congestion Notification):在网络拥塞时进行流量控制

查看 RoCE 支持的版本

show_gids 显示 GID,RoCEv2 对应的 INDEX 编号为 3

$ show_gids
DEV     PORT    INDEX   GID                                     IPv4            VER     DEV
---     ----    -----   ---                                     ------------    ---     ---
...
mlx5_2  1       0       fe80:0000:0000:0000:2817:20ff:fe98:c781                 v1      ens10f1v0
mlx5_2  1       1       fe80:0000:0000:0000:2817:20ff:fe98:c781                 v2      ens10f1v0
mlx5_2  1       2       0000:0000:0000:0000:0000:ffff:c0a8:0204 192.168.2.4     v1      ens10f1v0
mlx5_2  1       3       0000:0000:0000:0000:0000:ffff:c0a8:0204 192.168.2.4     v2      ens10f1v0
...

切换协议

  • 安装 mlnx-tools 工具
apt install mlnx-tools
  • 查看版本
$ cma_roce_mode -d mlx5_0
RoCE v2
  • 切换
# -m 1 表示 RoCE v1;-m 2 表示 RoCE v2
$ cma_roce_mode -d mlx5_0 -m 1
IB/RoCE v1

Soft-RoCE

  • Soft-RoCE(RDMA over Ethernet, RXE) 由 IBM 和 Mellanox 牵头的 IBTA RoCE 工作组实现
    • 目的:降低 RoCE 部署成本、便于开发和测试 RDMA 程序(基于 Verbs API 编写的程序)
    • Soft-RoCE 将卸载到硬件的封包和解析在软件层实现
    • RDMA 技术通过 硬件卸载 把本来软件(CPU)做的事情放到硬件中实现,来达到加速的目的
  • 配置 Soft-RoCE

是否支持 RXE

使用如下命令,确认当前内核是否支持 RXE

cat /boot/config-$(uname -r) | grep RXE

若果 CONFIG_RDMA_RXE 的值为 y 或者 m,表示当前操作系统支持使用 RXE,否则就需要重新编译内核。

安装 RXE 工具

  • 安装工具包
sudo apt-get install libibverbs1 ibverbs-utils librdmacm1 libibumad3 ibverbs-providers rdma-core infiniband-diags

说明:

  • libibverbs1 ibverbs 动态链接库
  • ibverbs-utils ibverbs 示例程序
  • librdmacm1 rdmacm 动态链接库
  • libibumad3 ibumad 动态链接库
  • ibverbs-providers ibverbs 各厂商用户态驱动(包括 RXE)
  • rdma-core 文档及用户态配置文件
  • infiniband-diags ib 相关命令工具
  • PS: dpkg -L libibverbs1 可以查看包的具体文件

使用 ibv_devices 命令查看是否安装成功:

$ ibv_devices
    device          	   node GUID
    ------          	----------------

配置 RXE 网卡

  • 加载驱动 rdma_rxe(可以加入到开机启动中)
$ modprobe rdma_rxe
$ lsmod | grep rdma_rxe
rdma_rxe              192512  0
ib_uverbs             188416  1 rdma_rxe
ip6_udp_tunnel         16384  1 rdma_rxe
udp_tunnel             32768  1 rdma_rxe
ib_core               524288  2 rdma_rxe,ib_uverbs
  • 用户态网卡配置
    • rxe_0 是新配置的 RDMA 的设备名,可任意取名
    • ens33 为 Soft-RoCE 设备所绑定的网络设备名,需要是实际存在的网卡名
rdma link add rxe_0 type rxe netdev ens33
  • 查看 rdma link 信息
$ rdma link
link rxe_0/1 state ACTIVE physical_state LINK_UP netdev ens33
  • 查看设备信息
$ ibv_devices
    device          	   node GUID
    ------          	----------------
    rxe_0           	025056fffe3f1136
$ ibv_devinfo -d rxe_0
hca_id:	rxe_0
	transport:			InfiniBand (0)
	fw_ver:				0.0.0
	node_guid:			0250:56ff:fe3f:1136
	sys_image_guid:			0250:56ff:fe3f:1136
	vendor_id:			0xffffff
	vendor_part_id:			0
	hw_ver:				0x0
	phys_port_cnt:			1
		port:	1
			state:			PORT_ACTIVE (4)
			max_mtu:		4096 (5)
			active_mtu:		1024 (3)
			sm_lid:			0
			port_lid:		0
			port_lmc:		0x00
			link_layer:		Ethernet

$ ibstat
CA 'rxe_0'
	CA type:
	Number of ports: 1
	Firmware version:
	Hardware version:
	Node GUID: 0x025056fffe3f1136
	System image GUID: 0x025056fffe3f1136
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 2.5
		Base lid: 0
		LMC: 0
		SM lid: 0
		Capability mask: 0x00010000
		Port GUID: 0x025056fffe3f1136
		Link layer: Ethernet

iproute2 检查工具:rdma

  • rdmaiproute2 包提供
$ dpkg -S `which rdma`
iproute2: /usr/bin/rdma
  • 查询 RDMA 设备的统计信息
$ rdma -p stat
link rxe_0/1
    sent_pkts 0
    rcvd_pkts 0
    duplicate_request 0
    out_of_seq_request 0
    rcvd_rnr_err 0
    send_rnr_err 0
    rcvd_seq_err 0
    ack_deferred 0
    retry_exceeded_err 0
    retry_rnr_exceeded_err 0
    completer_retry_err 0
    send_err 0
    link_downed 0
    rdma_sends 0
    rdma_recvs 0
  • 查询 RDMA 设备当前的资源使用情况
$ rdma res
0: rxe_0: pd 1 cq 1 qp 1 cm_id 0 mr 0 ctx 0 srq 0

RoCE 抓包

使用 docker 镜像 mellanox/tcpdump-rdma

docker run -it -v /dev/infiniband:/dev/infiniband -v /tmp/traces:/tmp/traces --net=host --privileged mellanox/tcpdump-rdma:latest bash
tcpdump -i mlx5_0 -s 0 -w /tmp/traces/capture1.pcap

参考

  1. https://github.com/linux-rdma/rdma-core/blob/master/Documentation/rxe.md
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics