すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:DockerでのeRDMAの設定

最終更新日:Aug 26, 2024

Elastic Remote Direct Memory Access (eRDMA) は、Docker環境で使用できる高性能ネットワークテクノロジーで、コンテナーアプリケーションがカーネルをバイパスしてホスト上の物理eRDMAデバイスに直接アクセスできるようにします。 eRDMAは、データ転送速度と通信効率の向上に役立ち、大規模なデータ転送と高性能ネットワーク通信をコンテナで実行する必要があるシナリオに適しています。 このトピックでは、DockerでeRDMAを設定する方法について説明します。

eRDMAの仕組み

Docker環境でeRDMAを使用する場合は、Dockerで -- deviceオプションを設定して、/dev/rdma_cmおよび /dev/uverbsXの文字デバイスをコンテナーにマッピングします。 これにより、コンテナ内のユーザ空間プログラムは、カーネルの介入を必要とせずに、データ転送のためにeRDMAデバイスに直接アクセスすることができる。 上記のコマンドの次のパラメーターに注意してください。

  • /dev/rdma_cm: eRDMA接続の管理に使用されます。 ユーザ空間プログラムは、このキャラクタデバイスを使用して、eRDMAデバイスへの接続を確立、破壊、および管理し、接続イベントを送信または受信することができる。

  • /dev/uverbsX: ユーザースペースeRDMA操作に使用されます。 ユーザ空間プログラムは、このキャラクタデバイスを使用してeRDMAデバイスと通信することができる。 ユーザ空間プログラムがキャラクタデバイスを使用することによって実行することができる動作は、eRDMAデバイスの開始、eRDMA通信エンドポイントの作成および破棄、ならびにメモリバッファの登録および登録解除を含む。

    説明

    /dev/uverbsXXは、デバイスのインデックス番号を指定します。 Xの値は、オペレーティングシステムおよび構成に基づいて変化し得る。 ls /dev/ | grep uverbsコマンドを実行して、文字デバイスの名前を照会できます。

制限

eRDMAは、次のDockerイメージでのみ使用できます。

  • Armベースおよびx86-basedインスタンスでサポートされるAlibaba Cloud Linux 3およびUbuntu 22.04イメージ

  • Alibaba Cloud Linux 2、CentOS 7、CentOS 8、Ubuntu 18.04、およびUbuntu 20.04イメージ (x86-basedインスタンスでのみサポート)

説明

Anolis OSイメージはサポートされていません。

手順1: Dockerのデプロイと設定

  1. eRDMAインターフェイス (ERI) がデプロイされ、インスタンスで期待どおりに機能するかどうか、および必要なドライバーがインスタンスにインストールされているかどうかを確認します。

    デプロイプロセスの詳細については、「エンタープライズレベルのインスタンスでの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: コンテナーをホストネットワークモードにします。 ホスト・ネットワーク・モードで動作するコンテナ内のアプリケーション・プログラムは、ホストのネットワーク・インターフェースおよびネットワーク構成への直接アクセスを有し、ホストと同じネットワーク通信能力を提供する。

    • -- device=/dev/infiniband/uverbs0および -- device=/dev/infiniband/rdma_cm: eRDMAに使用されるユーザースペース文字デバイスをコンテナーに公開します。

    • -- ulimit memlock=-1: memlock (max locked-in-memory address space) をunlimitedに設定します。これは、非ルートユーザーがロックできるメモリの最大量を無制限に指定します。 これにより、ルート以外のユーザーは、eRDMAアプリケーションがeRDMA機能を実装するために必要なメモリ量をロックできます。

    • <IMAGE ID>: DockerイメージのIDを指定します。 実際の環境に基づいてこのパラメーターを設定します。 sudo docker imagesコマンドを実行して、DockerイメージのIDを照会できます。

手順2: eRDMAドライバーパッケージのDockerへのインストール

eRDMAを使用する前に、コンテナーにeRDMAユーザースペースドライバーパッケージをインストールします。 Alibaba Cloudは、必要なパッケージのデプロイに役立つYellowdog Updater Modified (YUM) およびAPTリポジトリを提供しています。

重要

次の例では、http://mirrors.cloud.aliyuncs.comで始まるURLはリポジトリの内部URLです。 インターネット経由でリポジトリにアクセスする場合は、http://mirrors.cloud.aliyuncs.comhttp://mirrors.aliyun.comに置き換えてパブリックURLを取得します。 インターネット経由でリポジトリにアクセスすると、インターネットとの間でデータが転送されます。 データ転送料金が請求される場合があります。 インターネットとの間でのデータ転送の課金方法については、「パブリック帯域幅」をご参照ください。

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. コンテナで次のコマンドを実行して、YUMリポジトリを追加します。

    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. (オプション) 次のコマンドを実行してNetwork Accelerator (NetACC) をインストールします。

    NetACCは、低レイテンシ、高スループット、カーネルバイパス、プロトコルスタックオフロードなどのeRDMAの利点を活用して、ソケットインターフェイスと互換性を持ち、既存のTCPアプリケーションを高速化するユーザー空間ネットワーク高速化ライブラリです。 詳細については、「NetACC」をご参照ください。

    sudo yum install netacc -y

Ubuntu 18.04、Ubuntu 20.04、またはUbuntu 22.04

  1. オペレーティングシステムのバージョンに基づいてコンテナーで次のいずれかのコマンドを実行し、GNU Privacy Guard (GPG) キーを追加します。

    • 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