RDMA 可扩展性测量实验 BASED ON Design Guidelines for High Performance RDMA Systems

背景

当我们使用Socket编程来利用软件TCP/IP进行数据传输时,随着连接数量的上升,吞吐量将逐渐上升并最终保持在某个上限水平。这个上限通常是网口的速度上限(在CPU能够支持的情况下)。

RDMA(Remote Direct Memory Access,远程内存直接访问)近年来由于其高吞吐、低延迟的性能优势被广泛应用在数据中心内部。然而RDMA网卡具有一定的可扩展性限制,具体体现在当并发连接数上升时,网卡的吞吐量并不像TCP/IP软件协议栈那样先上升并最终保持在上限水平。如果每个连接发起的数据传输的规模不大,那么当连接数量超过某一个阈值时,吞吐量将大幅下跌[1]。

[1] Design Guidelines for High Performance RDMA Systems. Anuj Kalia, Michael Kaminsky, David G. Andersen.

实验目的:

随着网卡的更新换代,决定网卡吞吐量峰顶的连接数量的阈值也逐渐增加,即网卡的可扩展性逐渐提升,但仍存在上限。我想借助上述的Guideline这篇论文的开源代码来测试现有最新商用RDMA网卡Mellanox CX-6的阈值所在。

实验环境的安装:
Guideline开源代码,这是作者代码的Github地址。下载代码并在Unix环境下运行。关于具体的环境安装,作者已经在网页上写明。下面我列出我的环境下进行安装的命令清单,我的实验环境为Ubuntu 18.04:

安装高版本的GCC等必要软件:

sudo apt install build-essential

安装Cmake:
Ubuntu 18.04以上版本可以直接用如下命令安装,Ubuntu 16.04需手动下载高版本cmake

sudo apt install cmake

安装memcached、libmemcached-dev、libnuma-dev、numactl:

sudo apt install memcached
sudo apt install libmemcached-dev
sudo apt install libnuma-dev
sudo apt install numactl

安装gflags:

sudo su
git clone https://github.com/gflags/gflags
cd gflags
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DINSTALL_HEADERS=ON -DINSTALL_SHARED_LIBS=ON -DINSTALL_STATIC_LIBS=ON ..
make -j4 
make install 

安装Mellanox网卡驱动:

tar  zxvf MLNX_OFED_LINUX-5.2-2.2.0.0-ubuntu18.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.2-2.2.0.0-ubuntu18.04-x86_64
sudo ./mlnxofedinstall --without-dkms --add-kernel-support --kernel <kernel version in chroot>(通过uname -r 查看) --without-fw-update --force
sudo /etc/init.d/openibd restart

在这里插入图片描述

修改源码
此处为本篇博客的重中之重。由于作者是对CX-3网卡(早年的网卡)进行实验,作者使用的驱动版本中包含着相应的一些实验性质的API(官网称为exp_API)。我的实验想对CX-6进行测量,而配套的驱动中不再包含这部分API,所以需要对作者代码中的这部分exp_API进行修改。所有需要修改的文件皆位于\rdma_bench-master\libhrd_cpp。

下面我以一对API为例来说明修改的方法。我会将修改后的可用代码的github地址放在文末,不关心修改过程的读者可直接跳至文末。

ibv_exp_create_qp vs ibv_create_qp
作者使用的API:ibv_exp_create_qp,从INVIDA(Mellanox)官网搜到它的描述如下:
ibv_exp_create_qp描述,详情请见Mellanox官网
该函数需要两个参数,分别是:ibv_context类型的环境变量 和 ibv_exp_qp_init_attr类型的protected domain pd变量。其中ibv_exp_qp_init_attr类型在高版本驱动中已经弃用,故将这个函数改为通用的ibv_create_qp时需要将这个参数修改为ibv_qp_init_attr
ibv_exp_create_qp描述,详情请见Mellanox官网
值得庆幸的是,对比上面两幅图片可以看到,实验性的API和参数(xxx_exp_xxx)均是在通用版上添加了一些内容,故只需要删除多余的信息创建一个更简易的(通用的)参数来调用接口即可。

代码地址:
修改后的代码的Github地址:https://github.com/wxzisk/RDMA-General

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值