文档

配置Terway集群开启高密度eRDMA能力

更新时间:

弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA)是阿里云提供的低延迟、大吞吐、高弹性的高性能RDMA网络服务。通过eRDMA来加速应用间的网络通信,可降低应用间的延迟,减少网络产生的CPU开销。通过Terway的eRDMA的虚拟化能力,节点上有数十个Pod(取决于节点的规格)可以同时利用eRDMA的加速能力。

前提条件

  • 集群使用Terway网络插件,并且需配置 Terway IPvlan模式

    IPvlan功能仅支持在创建集群时配置。集群一旦创建成功,将不支持开启或关闭IPvlan功能。

  • Terway版本升级到 v1.7.0及以上版本。具体操作,请参见管理组件

  • 集群添加8代及以上的机型并使用AliyunLinux3的操作系统。

操作步骤

节点配置

  1. 安装支持容器的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
  2. 修改Containerd配置允许RDMA更大的LockMemory限制。

    sed -i '/LimitCORE=/a LimitMEMLOCK=infinity' /etc/systemd/system/containerd.service && systemctl daemon-reload && systemctl restart containerd

启用Terway eRDMA功能

  1. 执行如下命令,修改Terway的configmap配置。

    kubectl edit cm eni-config -n kube-system
  2. 在eni_conf中增加如下内容。

    "enable_erdma": true,
  3. 执行以下命令,重建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的配置中使用如下配置。

resources:
  limits:
    aliyun/erdma: "1"

验证

  1. 创建两个eRDMA的Pod。

  2. 记录两个Pod的IP地址,分别在两个Pod中执行ib延迟测试的命令,例如:

    # 一个Pod启动ib_send_lat的Server
    ~ ib_send_lat -R
    
    # 另外一个Pod中启动ib_send_lat的Client
    ~ ib_send_lat -R <Server的Pod的IP地址>
  3. 验证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
    ---------------------------------------------------------------------------------------

  • 本页导读 (1)