1. RDMA介绍
1.1 什么是RDMA
RDMA(Remote Direct Memory Access),全称远端内存直接访问技术,可以在使用极少CPU资源的情况下,将数据从一台服务器传输至另一台服务器。
在数据中心内部,大型分布式计算存储资源之间,如果使用传统的TCP/IP进行网络互连,将占用系统大量的计算资源,造成IO瓶颈,无法满足更高吞吐,更低时延的网络需求。
RDMA是一种高带宽、低延迟、低CPU消耗的网络互联技术,克服了传统TCP/IP网络的许多困难。
1.2 目前RDMA的技术实现有哪些
目前RDMA协议的实现主要有Infiniband(IB),internet Wide Area RDMA Protocol(iWARP)和RDMA over Converged Ethernet(RoCE)三种。
三种技术比较如下,其中IB性能最好,但需要专门的IB交换机。成本较高,iWARP未被市场广泛采用。相较之下,RoCE性能优秀,只需要支持RoCE协议的网卡,不需要专门的交换机设备,成本较为亲民,也是本次内容的主角。
RoCE是基于 Ethernet的RDMA,RoCEv1版本基于网络链路层,无法跨网段,基本无应用。RoCEv2基于UDP,可以跨网段具有良好的扩展性,而且吞吐,时延性能相对较好,所以是被大规模采用的方案。
2. ofed驱动安装
检查网卡型号,本次测试使用Mellanox的MT27800网卡,该网卡支持IB和RoCE v2技术
lspci |grep -i net
使用RoCE v2之前需要安装相关驱动,也就是ofed软件栈。OFED (OpenFabrics Enterprise Distribution) 是一个开源的软件栈,用于在高性能计算 (HPC) 和数据中心环境中实现高性能网络通信。它是一组用于 InfiniBand 和以太网 RDMA (Remote Direct Memory Access) 技术的软件包和驱动程序的集合。
2.1 驱动下载
https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/
选择合适的驱动版本进行下载
2.2 安装驱动
tar xf MLNX_OFED_LINUX-5.8-4.1.5.0-ubuntu20.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-4.1.5.0-ubuntu20.04-x86_64/
./mlnxofedinstall
执行脚本后会有提示,在安装ofed的同时会卸载所有其他版本的ofed相关包同时移除有冲突包。
确认并继续
安装时可能会遇到包冲突、少包或其他问题。安装脚本会尝试自动处理,如果安装脚本无法处理,会退出。需要根据提示进行处理再继续执行安装脚本
安装完成
重载驱动,HCA (Host Channel Adapter) 即RDMA网卡的别称
/etc/init.d/openibd restart
2.3 安装后检查
ofed_info -s ##检查当前安装的ofed版本
ofed_info -l ##查看当前环境安装了哪些ofed的组件包
检查加载了哪些模块,其中mlx5_core为Roce协议相关的模块
lsmod |grep mlx
也可以直接通过openibd服务检查哪些模块已安装
/etc/init.d/openibd status
2.4 常用命令
3. 功能测试
3.1 可用性测试
验证网卡Roce协议是否能正常使用。网卡上配置好ip地址,且为了保证网络质量,交换机侧应配置好流控。
RDMA设备自检
hca_self_test.ofed
我们平常使用的ping操作是基于ICMP协议,而Roce V2使用的是UDP协议。所以为了确认Roce V2协议是否能正常使用。我们需要使用专用的测试工具ibv_rc_pingpong。同时需要查看RDMA设备的GID索引信息,用于寻址。
查看RDMA设备的GID索引信息有三种方式Mellanox提供了show_gids命令,另外使用ibv_devinfo -v或使用以下的命令也可以查看到。
/sys/class/infiniband/mlx5_0/ports/1/gid_attrs/types/0 ##index和Roce协议之间的对应关系
/sys/class/infiniband/mlx5_0/ports/1/gids/1 ##index和gid之间的对应关系
查看接收端的GID索引信息,可以看到
show_gids mlx5_0
- port1 index 0/1是默认生成的两个GID
- port1 index 2/3基于ipv4地址10.251.30.207生成
- VER 代表Roce协议的V1和V2版本
接收端启动监听,-d指定RDMA设备,-g指定port index
ibv_rc_pingpong -d mlx5_0 -g 3
发送端执行发送指令。发送端需要指定接收端的ip地址
ibv_rc_pingpong -d mlx5_1 -g 3 10.251.30.207
从下图可以看到指令执行成功。测试带宽为4283.96M每秒
3.2 性能测试
perftest是ofed性能测试工具集。专门用于测试RDMA的性能
该工具提供了如下命令
带宽测试
服务端
ib_send_bw -d mlx5_0
客户端
ib_send_bw -d mlx5_1 10.251.30.207
4 参考资料
- [1] https://www.rdmamojo.com/
- [2] https://docs.nvidia.com/networking/display/mlnxofedv583070lts/rdma+over+converged+ethernet+(roce)
- [3] https://www.afs.enea.it/asantoro/V1r1_2_1.Release_12062007.pdf
关注公众号 singless,获取更多有价值的文章