1. 从零开始:为什么要在虚拟机里折腾Soft-RoCE?
如果你对高性能计算、分布式存储或者AI训练集群稍有了解,那你肯定听说过RDMA这个“黑科技”。它能让网络中的一台机器直接读写另一台机器的内存,完全绕开操作系统内核和CPU,延迟极低,带宽极高。听起来很美好,对吧?但问题来了,真正的RDMA需要专门的硬件网卡支持,比如Mellanox的ConnectX系列,一张卡动辄几千甚至上万,对于个人开发者、学生或者只是想尝鲜的团队来说,这门槛实在有点高。
这时候,Soft-RoCE(也叫RXE)就派上用场了。你可以把它理解成RDMA的“软件模拟器”。它用纯软件的方式,在普通的以太网卡上实现了RoCEv2协议栈。也就是说,你不需要花一分钱买硬件,在普通的虚拟机里就能搭建一套RDMA环境,用来学习、开发、测试RDMA应用。
我刚开始接触RDMA的时候,就是被昂贵的硬件卡劝退的。后来发现了Soft-RoCE,简直像发现了新大陆。在虚拟机里鼓捣了几天,虽然性能比不上真卡,但整个RDMA的编程模型、通信流程都能跑通,对于理解原理和调试程序来说,完全够用。今天,我就把自己在虚拟机环境下搭建、调优和测试Soft-RoCE的全过程,以及踩过的那些坑,毫无保留地分享给你。
那么,Soft-RoCE到底能做什么呢?简单来说,它让你可以在任何支持以太网的Linux机器(包括虚拟机)上,运行那些原本为RDMA硬件编写的程序。无论是用perftest测试性能,还是用libibverbs编写自己的RDMA程序,甚至是运行MPI(消息传递接口)这种高性能计算框架,Soft-RoCE都能胜任。它的目标用户非常明确:RDMA初学者、软件开发者、测试工程师,以及任何想在低成本环境下验证RDMA方案可行性的朋友。
2. 实战第一步:搭建你的Soft-RoCE实验环境
理论说再多,不如动手做一遍。搭建环境是第一步,也是最容易出问题的一步。别担心,我会把每个步骤都掰开揉碎了讲清楚。
2.1 系统与软件准备
首先,你需要两台Linux虚拟机。我强烈推荐使用Ubuntu 20.04 LTS或22.04 LTS。为什么?因为这两个版本的内核默认就编译了Soft-RoCE(RXE)所需的内核模块,省去了你自己编译内核的麻烦。我用的是VMware Workstation,你也可以用VirtualBox,原理都一样。
确保两台虚拟机处于同一个网络(比如都用“仅主机模式”或同一个NAT网络),并且能互相ping通。记下它们的IP地址,比如192.168.217.101和192.168.217.102。
接下来,在两台虚拟机上,安装必需的软件包。打开终端,执行以下命令:
sudo apt update
sudo apt install -y rdma-core ibverbs-utils infiniband-diags iproute2 perftest
简单解释一下这几个包:
rdma-core: RDMA用户态的核心库和工具,是基石。ibverbs-utils: 提供ibv_devices、ibv_devinfo等诊断工具。infiniband-diags: 包含ibstat等更多诊断工具。iproute2: 我们主要用它里面的rdma命令来管理RXE设备。perftest: RDMA性能测试工具套件,后面压测就靠它了。
安装完成后,可以跑一下ibv_devices看看。正常情况下,这时候应该什么设备都看不到,因为还没创建虚拟RDMA设备呢。
2.2 创建并配置RXE虚拟设备
现在,我们要把普通的以太网卡“变成”一个RDMA设备。首先,加载内核模块:
sudo modprobe rdma_rxe
然后用lsmod | grep rxe确认一下模块是否加载成功。接下来,找到你要绑定的物理网卡名字。通常就是ens33、ens160或者eth0,用ip addr命令就能看到。
假设我的网卡是ens33,现在创建RXE设备:
sudo rdma link add rxe_0 type rxe netdev ens33
这里的rxe_0是你给这个虚拟RDMA设备取的名字,可以随意,比如叫my_soft_roce也行。ens33就是你的物理网卡名。
创建成功后,用rdma link show命令检查:
$ rdma link show
link rxe_0/1 state ACTIVE physical_state LINK_


1418

被折叠的 条评论
为什么被折叠?



