Easy RoCE:在SONiC交换机上一键启用无损以太网
RDMA(远程直接内存访问)技术是一种绕过 CPU 或操作系统,在计算机之间直接传输内存数据的技术。它释放了内存带宽和 CPU,使节点之间的通信具有更低的延迟和更高的吞吐量。目前,RDMA 技术已广泛应用于高性能计算、人工智能工作负载、存储和许多其他场景。
1、RoCEv2对网络的需求和挑战
RoCEv1 基于以太网链路层实现,通过交换机上的流量控制技术确保物理层的可靠传输。RoCEv2 在 UDP 层之上实现,弥补了 InfiniBand 的一些局限性,支持更广泛的 RDMA 应用。
与 TCP 协议相比,UDP 速度更快,消耗的资源更少,但没有TCP的滑动窗口和确认响应等机制来确保可靠传输。在 RoCEv2 网络中,如果出现数据包丢失,网卡将丢弃所有收到的数据包,而发送方需要重新传输所有后续数据包,导致网络传输性能大幅下降。因此,我们通常使用 PFC(优先级流量控制)和 ECN(显式拥塞通知)等功能来保证可靠性。
在以太网交换机上配置上述功能需要熟悉 QoS 机制、配置逻辑和相关命令行。对于长期为客户配置 RoCEv2 网络的工程师来说,这可能并不困难。但对于大部分从事高性能计算和存储领域的技术人员,他们通常专注于服务器侧的相关技术,这种相对复杂的,但又必须调通的网络配置给他们带来了很多麻烦,甚至以往运维过IB网络的工程师也需要花时间学习相关知识。
2、在SONiC交换机上用常规步骤配置无损以太网
现在让我们快速回顾一下如何在SONiC交换机上按常规方法配置 RoCEv2 无损以太网。这里使用的是星融元CX-N系列超低时延交换机,搭载SONiC企业级发行版AsterNOS3.1 R0405P01版本,但没有使用其上的 EasyRoCE 功能。
在部署 RoCEv2 网络时,务必首先确认网络硬件条件:低延迟网络交换机需要能支持 PFC 和 ECN 等功能,服务器侧的网卡也需要支持 RoCEv2 。常规步骤下:
- 启用和取消需要分别配置 PFC 和 ECN。
- 故障排除或状态检查通常需要进入不同的命令行视图并多次执行 “show “命令,以确定当前队列映射、缓冲区、启用的队列、阈值、队列吞吐量、暂停和 CNP 触发器。
第一步,确保服务器网卡工作在 RoCEv2 模式下,为业务流量配置 PCP 或 DSCP,并启用 ECN。
#设置网卡RDMA CM的工作模式
[root@server ~]# cma_roce_mode -d mlx5_0 -p 1 -m
#设置网卡的优先级类型为DSCP
[root@server ~]# mlnx_qos -i enp1s0f0 –trust=dscp
DCBX mode: OS controlled
Priority trust state: dscp
#在队列3上开启PFC
[root@server ~]# mlnx_qos -i enp1s0f0 -f 0,0,0,1,0,0,0,0
#在队列3上开启DCQCN
[root@server ~]# echo 1 > /sys/class/net/enp1s0f0/ecn/roce_np/enable/3
[root@server ~]# echo 1 > /sys/class/net/enp1s0f0/ecn/roce_rp/enable/3
#设置CNP DSCP
[root@server ~]# echo 48 >
然后,在交换机端口配置以启用 PFC 和 ECN 功能并指定队列。您需要在以太网交换机的指定队列(需与服务器上的队列匹配)上启用 PFC 和 ECN,并调整缓冲区和阈值。
# 设置PFC门限值
sonic(config)# buffer-profile pg_lossless_100000_100m_profile
sonic(config-buffer-profile-pg_lossless_100000_100m_profile)# mode lossless dynamic -2 size 1518 xon 0 xoff 46496 xon-offset 13440
sonic(config-buffer-profile-pg_lossless_100000_100m_profile)# exit
# 在3、4队列开启PFC功能(AsterNOS的PFC功能默认使能3、4队列,无需配置)
sonic(config)# priority-flow-control enable 3
sonic(config)# priority-flow-control enable 4
sonic(config)# exit
# 设置ECN门限值
sonic(config)# wred roce-ecn
sonic(config-wred-roce-ecn)# mode ecn gmin 15360 gmax 750000 gprobability 10
sonic(config-wred-roce-ecn)# exit
# 配置Diffserv map
sonic(config)# diffserv-map type ip-dscp roce-dmap
sonic(config-diffservmap-roce-dmap)# ip-dscp 48 cos 6
# 配置Class map
sonic(config)# class-map roce-cmap
sonic(config-cmap-roce-cmap)# match cos 3 4
sonic(config-cmap-roce-cmap)# exit
# 配置Policy map
sonic(config)# policy-map roce-pmap
sonic(config-pmap-roce-pmap )# class roce-cmap
sonic(config-pmap-c)# wred roce-ecn
sonic(config-pmap-c)# priority-group-buffer pg_lossless_100000_100m_profile
sonic(config-pmap-c)# exit
sonic(config-pmap-roce-pmap )# set cos dscp diffserv roce-dmap
sonic(config-pmap-roce-pmap )# exit
# 进入以太网接口视图,绑定策略,将RoCE网络配置在接口上使能
sonic(config)# interface ethernet 0/0
sonic(config-if-0/120)# service-policy roce-pmap
3、使用AsterNOS上的Easy RoCE快捷配置无损以太网
星融元在 AsterNOS 上推出了 “EasyRoCE” 功能,该功能将无损以太网相关的配置命令行进行了封装和模板化,大大简化了RoCEv2网络配置和部署流程。请注意,以下命令行仅简单展示交换机上与该功能相关的部分关键配置,完整的验证演示流程请参考文末视频。
一键启用无损以太网
故障排除或状态检查
AsterNOS 的 Easy RoCE 功能支持 show roce 命令行,用于一站式查看全局或接口视图的RoCE 配置和计数,以及清除所有配置和计数。
# 检查RoCE配置
sonic# show qos roce
# 查看特定接口的计数
sonic# show counters qos roce interface 0/0 queue 3
# 清除全部计数
sonic# clear counters qos roce
自动化配置和网络可见性
上述命令可帮助您快速配置无损以太网,如果您需要微调参数,Easy RoCE也支持自定义更改设备提供的默认模板,该模板也可通过上层管理平台向设备下发。
基于 AsterNOS 的开放式架构,我们还开发了一个容器化部署的 roce_exporter,用于提取设备 RoCE 相关信息,并与 Prometheus 无缝对接以提高网络可见性。