12.2. RoCE を使用したデータ転送

RoCE (RDMA over Converged Ethernet) は、イーサネットネットワークでリモートダイレクトメモリーアクセス (RDMA) を有効にするネットワークプロトコルです。RoCE には 2 つのバージョン (RoCE v1 および RoCE v2) があり、使用されるネットワークアダプターにより異なります。

RoCE v1
RoCE v1 プロトコルは、同じイーサネットブロードキャストドメインにある 2 つのホスト間の通信を可能にするイーサー型 0x8915 を持つイーサネットリンク層プロトコルになります。RoCE v1 は、ConnectX-3 ネットワークアダプターを使用する場合の RDMA Connection Manager (RDMA_CM) のデフォルトバージョンです。
RoCE v2
RoCE v2 プロトコルは、UDP over IPv4 または UDP over IPv6 プロトコルに存在します。UDP 宛先ポート番号の 4791 は、RoCE v2 に予約されています。Red Hat Enterprise Linux 7.5 以降、RoCE v2 は、ネットワークアダプター ConnectX-3 Pro、ConnectX-4、ConnectX-4 Lx、および ConnectX-5 を使用する場合は、RDMA_CM のデフォルトバージョンです。ハードウェアは、RoCE v1 および RoCE v2 をサポートします。
RDMA Connection Manager (RDMA_CM) は、データを転送するために、クライアントとサーバーとの間の信頼できる接続を設定するために使用されます。RDMA_CM は、接続を確立するために、RDMA トランスポートニュートラルインターフェースを提供します。通信は、特定の RDMA デバイスで行われ、データ転送はメッセージベースとなります。

前提条件

RDMA_CM セッションには、以下のいずれかが必要です。
  • クライアントおよびサーバーで、同じ RoCE モードをサポートします。
  • クライアントは RoCE v1 をサポートし、サーバーは RoCE v2 をサポートします。
クライアントが接続のモードを決定するため、次のような状況が考えられます。
成功した接続:
クライアントが、使用されるネットワークカードおよびドライバーに従って、RoCE v1 モードまたは RoCE v2 モードにある場合、対応するサーバーは同じバージョンを使用して接続を作成する必要があります。また、接続は、クライアントが RoCE v1 モードで、サーバーが RoCE v2 モードの場合に限り成功します。
失敗した接続:
クライアントが RoCE v2 にあり、対応するサーバーが RoCE v1 の場合は、接続は確立されません。この場合は、対応するサーバーのドライバーまたはネットワークアダプターを更新します。「RoCE を使用したデータ転送」を参照してください。

表12.1 RDMA_CM を使用する RoCE バージョンのデフォルト

クライアントサーバーデフォルト設定
RoCE v1RoCE v1接続
RoCE v1RoCE v2接続
RoCE v2RoCE v2接続
RoCE v2RoCE v1接続なし
クライアントの RoCE v2 と、サーバーの RoCE v1 は互換性がありません。この問題を解決するには、サーバーとクライアントで、RoCE v1 で通信することを強制します。これは、RoCE v2 がサポートするハードウェアが RoCE v1 を使用するように強制することを意味します。

手順12.1 ハードウェアがすでに Roce v2 で実行している場合にデフォルトの RoCE モードへの変更

  1. RoCE モードに設定するために、/sys/kernel/config/rdma_cm ディレクトリーに変更します。
    ~]# cd /sys/kernel/config/rdma_cm
  2. イーサネットネットワークデバイスで ibstat コマンドを実行すると、ステータスが表示されます。たとえば、mlx5_0 の場合は以下のようになります。
    ~]$ ibstat mlx5_0
        CA 'mlx5_0'
            CA type: MT4115
            Number of ports: 1
            Firmware version: 12.17.1010
            Hardware version: 0
            Node GUID: 0x248a0703004bf0a4
            System image GUID: 0x248a0703004bf0a4
            Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 40
                Base lid: 0
                LMC: 0
                SM lid: 0
                Capability mask: 0x04010000
                Port GUID: 0x268a07fffe4bf0a4
                Link layer: Ethernet
  3. mlx5_0 デバイスにディレクトリーを作成します。
    ~]# mkdir mlx5_0
  4. ツリー形式で、default_roce_mode ファイルの RoCE モードを表示します。
    ~]# cd mlx5_0
    ~]$ tree
    └── ports
        └── 1
            ├── default_roce_mode
            └── default_roce_tos
    ~]$ cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
        RoCE v2
  5. デフォルトの RoCE モードを変更します。
    ~]# echo "RoCE v1" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
  6. 変更を表示します。
    ~]$ cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
        RoCE v1