近期准备开始学习RDMA技术的相关知识,想用Github上的示例代码跑一次,选用了rdma-example,链接GitHub - animeshtrivedi/rdma-example: RDMA exmaple
首先将代码克隆到本地
mkdir workspace
cd workspace
git clone https://github.com/animeshtrivedi/rdma-example.git
cd rdma-example
根据代码README的提示进行cmake,在cmake之前需要检查虚拟机的cmake版本,使用以下命令可以查看cmake的版本信息
cmake --version
查看rdma-example的CMakeLists.txt文件中,对cmake版本的最低要求是2.6,如果不满足需要对cmake的版本进行更新
sudo apt update
sudo apt install cmake
在确定了cmake版本满足要求之后执行以下命令
cmake .
然后我在执行的时候就遇到了下面的问题
根据报错提示判断是缺少了库文件,下面进行库文件的安装
apt install librdmacm1 librdmacm-dev
apt install libibverbs1 libibverbs-dev
安装完成后依然报错,于是寻找手动安装的方法,分别在github上找到了librdmacm和libibverbs的库,仍然没有用。最后解决的方案是在github上找到了rdma-core代码中包含的一些头文件,然后对/usr/include/infiniband/下的源文件进行一顿魔改,将报错提示中出现的头文件在rdma-core中找到,然后复制到/usr/include/infiniband/路径下和rdma-example的源码路径下,可以通过以下代码尝试性进行魔改,在修改之前建议备份。
find -name ib_user_ioctl_verbs.h
cp /rdma-core/kernel-headers/rdma/ib_user_ioctl_verbs.h /usr/include/infiniband/
最终在三台虚拟机上成功调试了环境。
另外,本人将添加了部分头文件之后的rdma-example源码程序上传到了国内仓库,有需要的同学可以自行取用,希望可以帮助到你。