rdma初体验
写在前面
松鼠哥的ceph专业课程上线啦!
面向新手同学,从0实战,全面入门ceph安装部署与运维,有需要的同学赶紧扫码订购吧:
最近准备上一个大规模的冷存储集群,准备尝试上rdma,此前没有做过太多调研,因此最近开始鼓捣这块
早前有读者朋友问是否搞过ceph over dpdk,个人认为,跟rdma相比,dpdk对ceph的帮助没有那么大,dpdk是主要做用户态的数据转发为主,如果是针对网络设备的数据转发,用dpdk确实可以得到非常高的性能,但是ceph节点通常都是内部局域网流量更大,路由转发场景少一些,所以个人觉得研究rdma的价值会更大一些
本篇主要介绍rdma的基本概念及centos7的rdma配置,ceph相关的配置测试安排在下篇,敬请期待
dma与rdma
dma(直接内存访问)想必大家都很熟悉,它允许直连主板的设备将数据搬运到内存中而期间无需cpu过问,cpu只在其数据传输的开头和结束时才参与,从而提高了效率
rdma(远程直接内存访问)则将这个概念进一步延伸到跨节点之间,从一台设备的某个进程的内存空间,向另外一个节点的某个进程的内存空间传输数据,其只在开始和结束时需要cpu参与,其余时间cpu完全不需要参与,而且,这部分数据走的是用户态<–>用户态之间的通道,其实现的协议封装在网卡之中硬件实现,使得这个过程避开了内核的参与,也避开了协议栈的参与,从而提高了效率
rdma的三种具体实现
InfiniBand
IB,从设计之初就支持rdma,定位高端,需要专用的IB卡和IB交换机,主要特点是带宽高(最大可以支持100G甚至更高)、延时低、可靠性极强(卡和交换机可以连续使用数年甚至数十年都不坏),最大的缺点就是贵,IB交换机妥妥的都要上百万一台,二手的也不便宜,不过可靠性好,有意愿上IB的可以搞点二手的看看(以前玩过二手的,体验极佳)
RoCE(RDMA over Ethernet)
相比IB,性能依旧非常强悍,但是在成本上下降很多,需要专用的网卡,但是整体设备下来没那么贵,性价比很不错
另外,RoCE有一种内核实现的Soft-RoCE,它允许内核在没有硬件支持的情况下使用RoCE,说实话如果是为了学习rdma倒是可以尝试搞一下,如果是上生产真没必要,还不如光口做bond来得省事,软件实现个人感觉很鸡肋
iWARP(RDMA over TCP)
允许标准以太网设备跑rdma,网卡支不支持iWARP都能跑,支持的话就网卡分担一些计算,不支持的话就纯内核跑,个人感觉更鸡肋,实验环境玩玩就算了,上生产估计没人这么搞
总结一下,要跑rdma上生产,最起码也要买点mellanox的网卡, ConnectX-3或者ConnectX-4这些,RoCE性价比真的可以,也不是很贵,用纯软件实现的话跑跑实验环境,学习一下rdma程序开发还行,千万不要拿到生产上用,为了省点成本搞这些复杂的玩意儿真没必要
开始
有了基础知识以后,我们开始准备系统环境
首先我们要确定一下机器上插入了哪些rdma的NIC
1 | [twj@rdma-test1 ~]$ lspci|grep Mellanox |
2张ConnectX-4的卡,4个口,事实上我们是准备要做bo,根据具体的信息,我们要去官网下载对应版本的驱动,MLNX驱动下载,根据平台选择对应驱动,我们这下载的是这个
1 | MLNX_OFED_LINUX-5.4-3.0.3.0-rhel7.6-x86_64.iso |
ok,接下来把驱动装上,过程挺简单的
1 | [root@rdma-test1 twj]# mount -o ro,loop MLNX_OFED_LINUX-5.4-3.0.3.0-rhel7.6-x86_64.iso /mnt |
查看一下基本状态,看到这样的输出,表示驱动没有问题了
1 | [root@rdma-test1 twj]# hca_self_test.ofed |
测试
驱动装完了,要验证一下rdma的功能是否正常
测试一下带宽,客户端
1 | [root@rdma-test2 twj]# ib_send_bw -a -c UD -d mlx5_bond_0 -i 1 10.94.48.59 |
服务端
1 | [root@rdma-test1 twj]# ib_send_bw -a -c UD -d mlx5_bond_0 -i 1 |
看起来挺正常的,25G跑满问题不大
一个大坑
在实际安装测试过程中,我们遇到了一个挺大的坑,那就是多个物理的ConnectX4网卡的网口不能做到同一个bond中,否则会有问题
1 | RoCE LAG is a feature meant for mimicking Ethernet bonding for IB devices and is available for dual port cards only. |
我们机器基本都是插了2物理卡,每张卡2个口也就是一共4个口,4个口绑一起不管怎么搞都有问题,折腾了一下午发现bond只能用同一个物理卡的口-.-
当bond同一个物理卡之后,会出现一个mlx5_bond_0
1 | [root@rdma-test1 twj]# ibstatus |
用这个口进行通信就行了
总结
系统方面,rdma准备就绪,除了遇到的那个多物理卡的坑之外,其他的倒是没有什么困难
随着集群规模的增大,传统的TCP/IP架构是会有一点问题,虽说单个pool的规模一般来说不建议搞太大,但是某些场景下我们是需要搞大的单pool的,比如冷存储场景,单个pool很大的话,EC的k+m可以调得很大从而能够提高存储利用率,降低成本,所以这种情况下上rdma是势在必行了
参考资料
RDMA over Converged Ethernet (RoCE)
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2022/07/06/ceph-over-rdma-上/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!