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/uverbsX
のX
は、デバイスのインデックス番号を指定します。 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のデプロイと設定
eRDMAインターフェイス (ERI) がデプロイされ、インスタンスで期待どおりに機能するかどうか、および必要なドライバーがインスタンスにインストールされているかどうかを確認します。
デプロイプロセスの詳細については、「エンタープライズレベルのインスタンスでのeRDMAの設定」をご参照ください。.
インスタンスにDockerをインストールし、Dockerイメージをダウンロードします。 インストールとダウンロードの操作は、イメージの種類によって異なります。
DockerイメージがAlibaba Cloud LinuxまたはCentOSイメージの場合、Dockerをインストールしてイメージをダウンロードする方法については、「ECSインスタンスにDockerをデプロイして使用する」をご参照ください。
DockerイメージがUbuntuイメージの場合、Dockerをインストールしてイメージをダウンロードする方法については、「UbuntuにDockerエンジンをインストールする」をご参照ください。
次のコマンドを実行して、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.comをhttp://mirrors.aliyun.comに置き換えてパブリックURLを取得します。 インターネット経由でリポジトリにアクセスすると、インターネットとの間でデータが転送されます。 データ転送料金が請求される場合があります。 インターネットとの間でのデータ転送の課金方法については、「パブリック帯域幅」をご参照ください。
CentOS 7またはCentOS 8
コンテナで次のコマンドを実行し、
/etc/yum.repos.d
ディレクトリにerdma.repo
ファイルを作成します。sudo vim /etc/yum.repos.d/erdma.repo
次の内容を
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
次のコマンドを実行して、YUMキャッシュを更新します。
sudo yum makecache
次のコマンドを実行して、ユーザースペースドライバーパッケージをインストールします。
sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
Alibaba Cloud Linux
コンテナで次のコマンドを実行して、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設定の管理に使用されます。次のコマンドを実行して、YUMキャッシュを更新します。
sudo yum makecache
次のコマンドを実行して、ユーザースペースドライバーパッケージをインストールします。
sudo yum install libibverbs rdma-core librdmacm libibverbs-utils -y
(オプション) 次のコマンドを実行してNetwork Accelerator (NetACC) をインストールします。
NetACCは、低レイテンシ、高スループット、カーネルバイパス、プロトコルスタックオフロードなどのeRDMAの利点を活用して、ソケットインターフェイスと互換性を持ち、既存のTCPアプリケーションを高速化するユーザー空間ネットワーク高速化ライブラリです。 詳細については、「NetACC」をご参照ください。
sudo yum install netacc -y
Ubuntu 18.04、Ubuntu 20.04、またはUbuntu 22.04
オペレーティングシステムのバージョンに基づいてコンテナーで次のいずれかのコマンドを実行し、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
オペレーティングシステムのバージョンに基づいて次のいずれかのコマンドを実行し、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
次のコマンドを実行して、APTリポジトリを更新します。
sudo apt update
次のコマンドを実行して、ユーザースペースドライバーをインストールします。
sudo apt install libibverbs1 ibverbs-providers ibverbs-utils librdmacm1