全部產品
Search
文件中心

Elastic Compute Service:在容器(Docker)中配置eRDMA

更新時間:Jun 19, 2024

eRDMA(Elastic Remote Direct Memory Access)是一種高效能網路通訊技術,將eRDMA功能引入容器(Docker)環境可以實現容器應用程式繞過作業系統核心直接存取主機的物理eRDMA裝置,從而提供更快的資料轉送和通訊效率,適用於在容器中需要大規模資料轉送和高效能網路通訊的應用情境。本文主要介紹如何在容器(Docker)中配置eRDMA。

實現原理

在容器環境中使用eRDMA功能時,使用Docker的--device選項將/dev/infiniband/rdma_cm/dev/infiniband/uverbsX兩個字元裝置映射到容器中,這樣容器內的使用者態程式就可以繞過作業系統核心直接存取eRDMA裝置進行資料的收發。其中:

  • /dev/infiniband/rdma_cm:用於eRDMA串連管理的字元裝置。使用者態程式可以通過對這個字元裝置的操作,與eRDMA裝置進行串連的建立、銷毀和管理,包括建立和銷毀串連、發送和接收串連事件等操作。

  • /dev/infiniband/uverbsX:用於使用者空間eRDMA操作的字元裝置。使用者態程式可以通過對這個字元裝置的操作,與eRDMA裝置進行通訊,包括開啟裝置、建立和銷毀eRDMA通訊端點、註冊和登出記憶體緩衝區等操作。

    說明

    /dev/infiniband/uverbsX中的X是裝置的索引號,可能會因系統和配置而異,您可以運行ls /dev/infiniband | grep uverbs命令查看字元裝置名稱。

使用限制

目前僅支援在以下Docker鏡像中使用eRDMA功能。

  • Alibaba Cloud Linux 3/Ubuntu 22.04的鏡像源(ARM和x86執行個體均支援)

  • Alibaba Cloud Linux 2/CentOS 7/CentOS 8/Ubuntu 18.04/Ubuntu 20.04的鏡像源(僅x86執行個體支援)

說明

暫不支援Anolis OS的鏡像源。

步驟一:部署並配置Docker

  1. 確認您的執行個體已添加ERI網卡、部署驅動程式,同時eRDMA裝置工作正常。

    依據您實際的應用情境,具體部署流程可參考在企業級執行個體上配置eRDMA

  2. 在執行個體中安裝Docker並下載對應的Docker鏡像。具體操作,請參見:

  3. 運行以下命令,將eRDMA對應的字元裝置暴露到容器中。

    sudo docker run --net=host --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i <IMAGE ID> /bin/bash

    其中:

    • --net=host:配置容器的通訊模式為host。容器內的應用程式可以直接使用主機的網路介面和網路設定,從而實現與主機相同的網路通訊能力。

    • --device=/dev/infiniband/uverbs0--device=/dev/infiniband/rdma_cm:將eRDMA對應的使用者態字元裝置暴露到容器中。

    • --ulimit memlock=-1:將maxlockedmemory設定為unlimited表示不限制非root使用者鎖定記憶體的數量。這可以確保eRDMA應用程式在非root使用者下能夠鎖定所需的記憶體量,從而有效地使用eRDMA功能。

    • <IMAGE ID>:請根據實際環境填寫Docker鏡像的鏡像ID,可以通過sudo docker images命令查看。

步驟二:在Docker內安裝eRDMA驅動程式套件

在容器內使用eRDMA還需要部署eRDMA的使用者態驅動程式套件。阿里雲提供了yum、apt源,用於便捷部署相應的程式包。

重要

以下操作樣本中,http://mirrors.cloud.aliyuncs.com表示內網源地址,如果您需要公網訪問,需要將http://mirrors.cloud.aliyuncs.com替換為http://mirrors.aliyun.com使用公網會產生公網流量,進而可能產生額外費用。有關公網的計費規則,請參見公網頻寬計費

CentOS 7/CentOS 8

  1. 在容器中運行以下命令,在/etc/yum.repos.d目錄中建立一個erdma.repo源檔案。

    sudo vim /etc/yum.repos.d/erdma.repo
  2. erdma.repo檔案中添加如下內容,然後儲存退出。

    [erdma]
    name = ERDMA Repository
    baseurl = http://mirrors.cloud.aliyuncs.com/erdma/yum/redhat/$releasever/erdma/$basearch/
    gpgcheck = 1
    enabled = 1
    gpgkey = http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY
  3. 運行以下命令,更新yum源緩衝。

    sudo yum makecache
  4. 運行以下命令,安裝使用者態驅動包。

    sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y 

Alibaba Cloud Linux

  1. 在容器中運行以下命令,添加repo倉庫。

    sudo yum-config-manager \
     --add-repo \
     http://mirrors.cloud.aliyuncs.com/erdma/yum/alinux/erdma.repo
    說明

    如果您的容器中沒有安裝yum-config-manager命令,請先運行sudo yum install -y yum-utils命令安裝yum-utils包。yum-config-manager是yum-utils包的一部分,用於管理yum配置。

  2. 運行以下命令,更新yum源緩衝。

    sudo yum makecache
  3. 運行以下命令,安裝使用者態驅動包。

    sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
  4. (可選)運行以下命令,安裝NetACC。

    NetACC(Network Accelerator)是一個使用者態網路加速庫,它利用eRDMA的低時延、高吞吐、核心旁路、協議棧卸載等優勢,通過相容socket介面,實現對現有TCP應用的加速效果。更多資訊,請參見NetACC使用說明

    sudo yum install netacc -y

Ubuntu 18.04/Ubuntu 20.04/Ubuntu 22.04

  1. 在容器中運行以下命令,添加PGP簽名。

    • Ubuntu 18.04/Ubuntu 20.04

      wget -qO - http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY | sudo apt-key add -
    • Ubuntu 22.04

      wget -qO - http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/erdma.gpg
  2. 運行以下命令,添加apt源。

    • Ubuntu 20.04

    echo "deb [ arch=amd64 ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu focal/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
    • Ubuntu 18.04

    echo "deb [ arch=amd64 ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu bionic/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
    • Ubuntu 22.04

    echo "deb [ ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu jammy/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
  3. 運行以下命令,更新apt源。

    sudo apt update
  4. 運行以下命令,安裝使用者態驅動。

    sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1