弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA)是阿里云提供的低延迟、大吞吐、高弹性的高性能RDMA网络服务。通过eRDMA来加速应用间的网络通信,可降低应用间的延迟,减少网络产生的CPU开销。通过Terway的eRDMA的虚拟化能力,节点上有数十个Pod(取决于节点的规格)可以同时利用eRDMA的加速能力。
前提条件
集群使用Terway网络插件。
Terway版本升级到 v1.9.6及以上版本。具体操作,请参见管理组件。
集群添加8代及以上的机型并使用AliyunLinux3的操作系统。
不支持等保加固的节点,请参见 ACK等保加固使用说明。
操作步骤
节点配置
安装支持容器的eRDMA驱动。
在每个8代及以上机型的节点上执行如下命令安装支持容器的eRDMA驱动。
curl -OL 'https://elastic-rdma.oss-cn-hangzhou.aliyuncs.com/wip/archive/erdma_installer_202311071611.tar.gz' && tar -xzvf erdma_installer_202311071611.tar.gz && cd erdma_installer && yum install -y gcc-c++ dkms cmake && ./install.sh --batch
启用Terway eRDMA功能
执行如下命令,修改Terway的configmap配置。
kubectl edit cm eni-config -n kube-system
在eni_conf中增加如下内容。
"enable_erdma": true,
执行以下命令,重建Terway Pod使eRDMA配置生效。
kubectl delete pod -n kube-system -l app=terway-eniip
应用镜像安装eRDMA驱动
在Dockerfile中增加eRDMA库安装,并重新构建应用容器镜像,以便镜像中的应用能够使用eRDMA,您可以使用如下命令进行操作。
# Debian或者Ubuntu: 注意sources.list中的OS名和版本与实际使用的版本设置为一致。
wget -qO - https://mirrors.aliyun.com/erdma/GPGKEY | apt-key add - && echo "deb [ arch=amd64 ] https://mirrors.aliyun.com/erdma/apt/{OS|ubuntu} {Version|focal}/erdma main" | tee /etc/apt/sources.list.d/erdma.list && apt update && apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
# Alibaba Cloud Linux或者rhel:按照OS找到对应的repo目录,配置到yum.repos.d目录中。
cat > /etc/yum.repos.d/erdma.repo <<EOF
[erdma]
name = ERDMA Repository
baseurl = http://mirrors.aliyun.com/erdma/yum/redhat/7/erdma/x86_64/
gpgcheck = 0
enabled = 1
EOF
yum install --disablerepo=* --enablerepo erdma -y libibverbs ibverbs-providers ibverbs-utils librdmacm
应用申请和使用eRDMA资源
在Pod的资源中增加
aliyun/erdma: 1
的资源需求,以便为Pod分配eRDMA的网络资源在Pod的
SecurityContext
中配置SYS_RESOURCE
的capability
,以便能使用充足的LockMemory
来做RDMA通信
您可以在Pod的配置中使用如下配置。
resources:
limits:
aliyun/erdma: "1"
securityContext:
capabilities:
add:
- SYS_RESOURCE
验证
创建两个eRDMA的Pod。
记录两个Pod的IP地址,分别在两个Pod中执行ib延迟测试的命令,例如:
# 一个Pod启动ib_send_lat的Server ~ ulimit -l unlimited && ib_send_lat -R # 另外一个Pod中启动ib_send_lat的Client ~ ulimit -l unlimited && ib_send_lat -R <Server的Pod的IP地址>
验证Pod间可以通过RDMA通信并输出延迟信息,预期输出:
~ ib_send_lat -R 192.168.10.12 --------------------------------------------------------------------------------------- Send Latency Test Dual-port : OFF Device : erdma_0 Number of qps : 1 Transport type : IW Connection type : RC Using SRQ : OFF TX depth : 1 Mtu : 1024[B] Link type : Ethernet GID index : 0 Max inline data : 0[B] rdma_cm QPs : ON Data ex. method : rdma_cm --------------------------------------------------------------------------------------- local address: LID 0000 QPN 0x0017 PSN 0xbafb4b GID: 00:22:62:21:117:142:00:00:00:00:00:00:00:00:00:00 remote address: LID 0000 QPN 0x000a PSN 0xbafb4b GID: 00:22:62:35:49:136:00:00:00:00:00:00:00:00:00:00 --------------------------------------------------------------------------------------- #bytes #iterations t_min[usec] t_max[usec] t_typical[usec] t_avg[usec] t_stdev[usec] 99% percentile[usec] 99.9% percentile[usec] 2 1000 13.14 19.25 13.50 13.65 0.58 16.55 19.25 ---------------------------------------------------------------------------------------