Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

13.8. IPoIB の設定

13.8.1. IPoIB のロールについて

「IP ネットワークと非 IP ネットワークの比較」 で説明したように、ほとんどのネットワークは IP ネットワークです。InfiniBand は違います。IPoIB のロールは、InfiniBand RDMA ネットワークの上に IP ネットワークエミュレーション層を提供することです。これにより、既存のアプリケーションが変更無しで InfiniBand ネットワーク上で実行できるようになります。しかし、これらのアプリケーションのパフォーマンスは、RDMA 通信をネイティブで使用するように作成されたアプリケーションの場合よりもかなり低いものになります。ほとんどのネットワークには最大級のパフォーマンスを必要とするアプリケーションと、低パフォーマンスを受け入れられるアプリケーションの 2 種類があります。後者は通常、RDMA 通信のような新しい通信方法を使用するように更新されないため、IPoIB はこれらのアプリケーション用に引き続き利用可能となっています。
iWARP ネットワークと RoCE/IBoE ネットワークはいずれも実際には IP リンク層の上に RDMA を階層化した IP ネットワークであるため、IPoIB は必要ありません。このため、カーネルは iWARP や RoCE/IBoE RDMA デバイスの上に IPoIB デバイスを作成することは拒否します。

13.8.2. IPoIB 通信モードについて

IPoIB デバイスは、datagram または connected のモードで実行するよう設定できます。違いは、通信先のマシンで IPoIB 層が開こうとする queue pair のタイプです。datagram モードでは、信頼できない未接続の queue pair が開かれます。connected モードでは、信頼性のある接続済みの queue pair が開かれます。
datagram モードの使用時には、信頼性のない未接続の queue pair タイプが InfiniBand リンク層の MTU よりも大きいパケットを許可しません。IPoIB レイヤーは、送信中の IP パケット上に 4 バイトの IPoIB ヘッダーを追加します。これにより、IPoIB MTU は InfiniBand リンク層の MTU よりも 4 バイト小さくなければなりません。InfiniBand リンク層の MTU は通常 2048 バイトなので、datagram モードでの一般的な IPoIB デバイス MTU は 2044 バイトになります。
connected モード使用時には、信頼性のある接続済み queue pair タイプが InfiniBand リンク層 MTU よりも大きいメッセージを許可し、ホストアダプターが各末端でパケットのセグメント化と再構築を処理します。このため、connected モード時に InfiniBand アダプターが送信する IPoIB メッセージにはサイズ制限が課せられません。ただし、IP パケットには 16 ビットサイズフィールドしかないため、最大バイト数として 65535 に制限されます。現実には、このサイズに適合しなくてはならない様々な TCP/IP ヘッダーも勘案する必要があるので、実際に許可される MTU はこれよりも小さくなります。その結果、必要なすべての TCP ヘッダーに十分なスペースを確保するために、Connected モードの IPoIB MTU は 65520 に制限されます。
connected モードオプションでのパフォーマンスは通常高いものとなりますが、消費するカーネルメモリーも多くなります。ほとんどのシステムでは、メモリー消費量よりもパフォーマンスの方が重視されるため、より一般的に使用されるのは connected モードになります。
しかしシステムが connected モードで設定されていても、マルチキャストトラフィックは依然として datagram モードで送信する必要があり (InfiniBand スイッチとファブリックは connected モードではマルチキャストトラフィックを通過させることができません)、さらに connected モードで設定されていないホストとの通信時には datagram モードにフォールバックする必要があります。マルチキャストデータを送信するプログラムを実行する際は、これらのプログラムがインターフェイス上で最大 MTU でマルチキャストデータの送信を試みるため、インターフェイスを datagram 操作用に設定するか、マルチキャストアプリケーションが送信パケットサイズを datagram のパケットサイズに収まるように制限する必要があります。

13.8.3. IPoIB ハードウェアアドレスについて

IPoIB デバイスには、20 バイトのハードウェアアドレスがあります。非推奨のユーティリティー ifconfig はすべての 20 バイトを読み取りできず、IPoIB デバイスの正しいハードウェアアドレスを見つけるために使用しないでください。iproute パッケージの ip ユーティリティーが適切に機能します。
IPoIB ハードウェアアドレスの最初の 4 バイトは、フラグと queue pair 番号です。次の 8 バイトはサブネットの接頭辞です。IPoIB デバイスが最初に作成されると、デフォルトのサブネット接頭辞は 0xfe:80:00:00:00:00:00:00 になり ます。このデバイスはサブネットマネージャーと連絡するまで、このデフォルトのサブネット接頭辞 (0xfe80000000000000) を使用し、その時点でサブネット接頭辞をサブネットマネージャーが設定したものに再設定します。最後の 8 バイトは、IPoIB デバイスの接続先となる InfiniBand ポートの GUID アドレスです。最初の 4 バイトと次の 8 バイトは時々変化するため、IPoIB インターフェイスのハードウェアアドレスを指定する際には、これを使ったり適合対象としたりすることはありません。セクション 「70-persistent-ipoib.rules の使用」 では、デバイスマッチングを確実に行えるように、udev ルールファイルの ATTR{address} フィールドの最初の 12 バイトを除外してアドレスを取得する方法を説明します。IPoIB インターフェイスを設定する際、設定ファイルの HWADDR フィールドには、すべての 20 バイトを含めることができます。ただし、最後の 8 バイトは通常、設定ファイルによって指定されたハードウェアにマッチしてこれを見つけるのに使用されます。ただし、TYPE=InfiniBand エントリーがデバイス設定ファイルで正しくスペルされず、ifup-ib が IPoIB インターフェイスを開くために使用される実際のスクリプトではない場合、設定で指定されたハードウェアを検出できないシステムに関するエラーが発生します。IPoIB インターフェイスの場合、設定ファイルの TYPE= フィールドは InfiniBand または infiniband のいずれかである必要があります(エントリーは大文字と小文字を区別しますが、スクリプトはこれらの 2 つの特定のスペルを受け入れます)。

13.8.4. InfiniBand P_Key サブネットについて

InfiniBand ファブリックは、異なる P_Key サブネットを使用することで、仮想サブネットに論理的にセグメント化できます。これは、イーサネットインターフェイス上で VLAN を使用することに非常に似ています。すべてのスイッチとホストはデフォルトの P_Key サブネットのメンバーである必要がありますが、管理者は追加のサブネットを作成し、それらのサブネットのメンバーをファブリック内のホストまたはスイッチのサブセットに制限できます。P_Key サブネットは、ホストがこれを使用する前にサブネットマネージャーが定義する必要があります。opensm サブネットマネージャーを使用して P_Key サブネットを定義する方法については、「P_Key 定義の作成」 セクションを参照してください。IPoIB インターフェイスの場合は、P_Key サブネットが作成されると、それらの P_Key サブネット専用の IPoIB 設定ファイルを追加で作成できます。イーサネットデバイスで VLAN インターフェイスと同様に、各 IPoIB インターフェイスは同じリンクを共有し、P_Key 値が異なる他の IPoIB インターフェイスと完全に異なるファブリックにあるかのように動作します。
IPoIB P_Key インターフェイスには特別な要件があります。すべての IPoIB P_Keyの範囲は 0x0000 から 0x7fff で、高いビット 0x8000 は、P_Key のメンバーシップが部分的なメンバーシップではなく完全なメンバーシップであることを示します。Linux カーネルの IPoIB ドライバーは、P_Key サブネットの完全なメンバーシップしかサポートしないため、Linux が接続可能なサブネットでは、P_Key 番号が高いビットが常に設定されます。つまり、Linux コンピューターが P_Key 0x0002 に参加すると、そのコンピューターの実際の P_Key 番号は 0x8002 になり、P_Key 0x0002 のメンバーであることが示唆されます。このため、セクション 「P_Key 定義の作成」 にあるように opensm partitions.conf ファイルに P_Key 定義を作成する場合は、0x8000 なしで P_Key 値を指定する必要がありますが、Linux クライアントで P_Key IPoIB インターフェイスを定義する場合は、ベースの P_Key 値に 0x8000 の値を追加します。

13.8.5. テキスト形式のユーザーインターフェイス nmtui による InfiniBand の設定

テキスト形式のユーザーインターフェイスツール nmtui を使用すると、ターミナルのウィンドウで InfiniBand を設定できます。このツールを起動するには、以下のコマンドを実行します。
~]$ nmtui
テキストユーザーインターフェイスが表示されます。無効なコマンドがあると、使用方法に関するメッセージが表示されます。
移動するには、矢印キーを使用するか、Tab を押して順方向に進み、Shift+Tab を押してオプションを再度実行します。Enter を押してオプションを選択します。Space バーは、チェックボックスのステータスを切り替えます。
メニューから 接続の編集 を選択します。Add を選択すると、New Connection 画面が開きます。

図13.1 NetworkManager テキスト形式のユーザーインターフェイスの InfiniBand 接続追加メニュー

NetworkManager テキスト形式のユーザーインターフェイスの InfiniBand 接続追加メニュー
InfiniBand を選択すると、接続の編集 画面が開きます。画面のプロンプトに従って設定を完了します。

図13.2 NetworkManager テキスト形式ユーザーインターフェイスで InfiniBand 接続を設定するメニュー

NetworkManager テキスト形式ユーザーインターフェイスで InfiniBand 接続を設定するメニュー
InfiniBand 用語の定義については、「InfiniBand タブの設定」を参照してください。
nmtui のインストール方法は、「nmtui を使用した IP ネットワークの設定」 を参照してください。

13.8.6. コマンドラインツール nmcli での IPoIB の設定

まず、デフォルトの IPoIB デバイスの名前変更が必要かどうかを決定し、その場合は、「70-persistent-ipoib.rules の使用」 セクションの手順に従って、udev の名前ルールを使用してデバイスの名前を変更します。以下のように ib_ipoib カーネルモジュールを削除してからリロードすることで、再起動せずに IPoIB インターフェイスの名前を強制的に変更できます。
~]$ rmmod ib_ipoib
~]$ modprobe ib_ipoib
デバイスに必要な名前が付けられたら、nmcli ツールを使用して IPoIB インターフェイスを作成します。以下に 2 とおりの方法を示します。

例13.3 2 つの別々のコマンドによる IPoIB の作成および修正

~]$ nmcli con add type infiniband con-name mlx4_ib0 ifname mlx4_ib0 transport-mode connected mtu 65520
Connection 'mlx4_ib0' (8029a0d7-8b05-49ff-a826-2a6d722025cc) successfully added.
~]$ nmcli con edit mlx4_ib0

===| nmcli interactive connection editor |===

Editing existing 'infiniband' connection: 'mlx4_ib0'

Type 'help' or '?' for available commands.
Type 'describe [>setting<.>prop<]' for detailed property description.

You may edit the following settings: connection, infiniband, ipv4, ipv6
nmcli> set infiniband.mac-address 80:00:02:00:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:cb:a3
nmcli> save
Connection 'mlx4_ib3' (8029a0d7-8b05-49ff-a826-2a6d722025cc) successfully updated.
nmcli> quit
または、以下のように nmcli c add および nmcli c modify を 1 つのコマンドで実行することができます。

例13.4 1 つのコマンドによる IPoIB の作成および修正

nmcli con add type infiniband con-name mlx4_ib0 ifname mlx4_ib0 transport-mode connected mtu 65520  infiniband.mac-address 80:00:02:00:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:cb:a3
この時点で、mlx4_ib0 という名前の IPoIB インターフェイスが作成され、Connect モードを使用するように設定され、最大接続モード MTU、IPv4 および IPv6DHCP を使用するように設定されています。IPoIB インターフェイスをクラスタートラフィックに使用し、イーサネットインターフェイスをクラスター以外の通信に使用する場合は、デフォルトルートと IPoIB インターフェイス上のデフォルトネームサーバーの無効化が必要になる可能性があります。これは、以下のように実行できます。
~]$ nmcli con edit mlx4_ib0

===| nmcli interactive connection editor |===

Editing existing 'infiniband' connection: 'mlx4_ib0'

Type 'help' or '?' for available commands.
Type 'describe [>setting<.>prop<]' for detailed property description.

You may edit the following settings: connection, infiniband, ipv4, ipv6
nmcli> set ipv4.ignore-auto-dns yes
nmcli> set ipv4.ignore-auto-routes yes
nmcli> set ipv4.never-default true
nmcli> set ipv6.ignore-auto-dns yes
nmcli> set ipv6.ignore-auto-routes yes
nmcli> set ipv6.never-default true
nmcli> save
Connection 'mlx4_ib0' (8029a0d7-8b05-49ff-a826-2a6d722025cc) successfully updated.
nmcli> quit
P_Key インターフェイスが必要な場合は、以下のように nmcli を使用して作成します。
~]$ nmcli con add type infiniband con-name mlx4_ib0.8002 ifname mlx4_ib0.8002 parent mlx4_ib0 p-key 0x8002
Connection 'mlx4_ib0.8002' (4a9f5509-7bd9-4e89-87e9-77751a1c54b4) successfully added.
~]$ nmcli con modify mlx4_ib0.8002 infiniband.mtu 65520 infiniband.transport-mode connected ipv4.ignore-auto-dns yes ipv4.ignore-auto-routes yes ipv4.never-default true ipv6.ignore-auto-dns yes ipv6.ignore-auto-routes yes ipv6.never-default true

13.8.7. コマンドラインを使用した IPoIB の設定

まず、デフォルトの IPoIB デバイスの名前変更が必要かどうかを決定し、その場合は、「70-persistent-ipoib.rules の使用」 セクションの手順に従って、udev の名前ルールを使用してデバイスの名前を変更します。以下のように ib_ipoib カーネルモジュールを削除してからリロードすることで、再起動せずに IPoIB インターフェイスの名前を強制的に変更できます。
~]$ rmmod ib_ipoib
~]$ modprobe ib_ipoib
デバイスに必要な名前が付けられたら、管理者は希望するエディターで ifcfg ファイルを作成し、デバイスを制御できます。静的 IPv4 アドレス指定を使用する通常の IPoIB 設定ファイルは以下のようになります。
~]$ more ifcfg-mlx4_ib0
DEVICE=mlx4_ib0
TYPE=InfiniBand
ONBOOT=yes
HWADDR=80:00:00:4c:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:cb:a1
BOOTPROTO=none
IPADDR=172.31.0.254
PREFIX=24
NETWORK=172.31.0.0
BROADCAST=172.31.0.255
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
MTU=65520
CONNECTED_MODE=yes
NAME=mlx4_ib0
DEVICE フィールドは、udev の名前ルールで作成したカスタム名と一致している必要があります。NAME エントリーはデバイス名に合致する必要はありません。GUI 接続エディターが起動していれば、NAME フィールドは現在使用している接続に使用されている名前になります。InfiniBand オプションが正常に処理されるには、TYPE フィールドは InfiniBand である必要があります。CONNECTED_MODE は yes または no です。yes は接続モードを使用し、通信にデータグラムモードを使用します(セクション 「IPoIB 通信モードについて」を参照)。
P_Key インターフェイスの場合、これは一般的な設定ファイルです。
~]$ more ifcfg-mlx4_ib0.8002
DEVICE=mlx4_ib0.8002
PHYSDEV=mlx4_ib0
PKEY=yes
PKEY_ID=2
TYPE=InfiniBand
ONBOOT=yes
HWADDR=80:00:00:4c:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:cb:a1
BOOTPROTO=none
IPADDR=172.31.2.254
PREFIX=24
NETWORK=172.31.2.0
BROADCAST=172.31.2.255
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
MTU=65520
CONNECTED_MODE=yes
NAME=mlx4_ib0.8002
すべての P_Key インターフェイスファイルでは、PHYSDEV ディレクティブが必要で、親デバイス名である必要があります。PKEY ディレクティブは yes に設定し、PKEY_ID はインターフェイスの数( 0x8000 メンバーシップビットの追加の有無なし)に設定する必要があります。ただし、デバイス名は、以下のように論理 OR 演算子を使用して、0x8000 メンバーシップビットと組み合わせた PKEY_ID の 4 桁の 16 進数表記である必要があります。
NAME=${PHYSDEV}.$((0x8000 | $PKEY_ID))
デフォルトでは、ファイルの PKEY_ID は 10 進数として処理され、16 進数に変換され、論理 OR 演算子 0x8000 を使用してデバイスに適した名前に到達しますが、ユーザーは数字に標準の 0x 接頭辞を追加して PKEY_ID を 16 進数で指定できます。

13.8.8. IPoIB 設定後の RDMA ネットワークテスト

IPoIB を設定したら、IP アドレスを使用して RDMA デバイスを指定できます。IP アドレスとホスト名を使用してマシンを指定することが一般的であるため、ほとんどの RDMA アプリケーションはこれを優先的または場合によっては、接続するリモートマシンまたはローカルデバイスを指定する方法になります。
IPoIB 層の機能をテストするには、標準の IP ネットワークテストツールを使用して IPoIB デバイスの IP アドレスを提供できます。たとえば、IPoIB デバイスの IP アドレス間の ping コマンドが機能するようになりました。
Red Hat Enterprise Linux には qperf および perftest という、2 つの異なる RDMA パフォーマンステストパッケージが含まれています。これらのうちのどちらかを使って RDMA ネットワークをさらにテストできます。
ただし、perftest パッケージの一部であるアプリケーション、または qperf アプリケーションを使用する場合は、アドレス解決に特別な注意があります。リモートホストは IPoIB デバイスの IP アドレスまたはホスト名を使用して指定されますが、テストアプリケーションは実際に別の RDMA インターフェイスを介して接続できます。これは、ホスト名または IP アドレスを RDMA アドレスに変換するプロセスにより、2 つのマシン間の有効な RDMA アドレスペアを許可するためです。クライアントが複数の方法でサーバーに接続できる場合、プログラムは指定したパスに問題があれば、別のパスを選択することができます。たとえば、同じ InfiniBand サブネットに接続された各マシンに 2 つのポートがあり、各マシンの 2 番目のポートの IP アドレスが指定されている場合は、プログラムは各マシンの最初のポートが有効な接続方法であり、代わりにそれらを使用する可能性があります。この場合、「初期の InfiniBand RDMA 操作のテスト」ibping で行ったように、どの perftest プログラムでもコマンドラインオプションを使ってどのカードやポートをバインドするかを指示することで、テストが必要な特定のポートで確実にテストが行われるようになります。qperf では、ポートへのバインディング方法は若干異なります。qperf プログラムは 1 台のマシンでサーバーとして機能し、すべてのデバイス(RDMA 以外のデバイスを含む)をリッスンします。クライアントは、サーバーの有効な IP アドレスまたはホスト名を使用して qperf に接続できます。qperf は、最初にデータ接続を開き、クライアントのコマンドラインで指定された IP アドレスまたはホスト名で要求されたテストを実行しますが、そのアドレスに問題がある場合、qperf はクライアントとサーバー間の任意の有効なパスでテストの実行を試みます。このため、特定のリンクで qperf を強制的にテストするには、qperf クライアントに対して -loc_id オプションおよび -rem_id オプションを使用して、テストを特定のリンクで強制的に実行します。

13.8.9. GUI を使った IPoIB の設定

グラフィカルツールを使用して InfiniBand 接続を設定するには、nm-connection-editorを使用します。

手順13.4 nm-connection-editor を使用して新規 InfiniBand 接続を追加する

  1. 端末に nm-connection-editor と入力します。
    ~]$ nm-connection-editor
  2. Add ボタンをクリックします。Choose a Connection Type ウィンドウが表示されます。InfiniBand を選択し、Create クリックします。InfiniBand 接続 1の編集 ウィンドウが表示されます。
  3. InfiniBand タブで、InfiniBand 接続に使用するトランスポートモードをドロップダウンリストから選択します。
  4. InfiniBand MAC アドレスを入力します。
  5. 設定を確認してから Save ボタンをクリックします。
  6. 「InfiniBand タブの設定」を参照して、InfiniBand 固有のセッティングを編集します。

手順13.5 既存の InfiniBand 接続を編集する

既存の InfiniBand 接続を編集するには以下の手順に従います。
  1. 端末に nm-connection-editor と入力します。
    ~]$ nm-connection-editor
  2. 編集する接続を選択し、Edit ボタンをクリックします。
  3. General タブを選択します。
  4. 接続名、自動接続の動作、および可用性のセッティングを設定します。
    編集 ダイアログの 5 つの設定は、すべての接続の種類に共通です。全般 タブ:
    • 接続名: ネットワーク接続のわかりやすい名前を入力します。この名前は、Network ウィンドウのメニューでこの接続を一覧表示するために使用されます。
    • Automatically connect to this network when it is available - このボックスを選択すると、NetworkManager が利用可能なときにこの接続に自動接続します。詳細は、「control-center を使用した既存の接続の編集」を参照してください。
    • All users can connect to this network - このボックスを選択すると、システム上のすべてのユーザーが 利用できる接続が作成されます。この設定を変更するには、root 権限が必要になる場合があります。詳細は、「GUI を使用したシステム全体およびプライベート接続プロファイルの管理」を参照してください。
    • Automatically connect to VPN when using this connection - このボックスを選択すると、NetworkManager が利用可能なときに VPN 接続に自動接続します。ドロップダウンメニューから VPN を選択します。
    • ファイアウォールゾーン - ドロップダウンメニューからファイアウォールゾーンを選択します。ファイアウォールゾーンに関する詳細情報は、『Red Hat Enterprise Linux 7 セキュリティーガイド』を参照してください。
  5. 「InfiniBand タブの設定」を参照して、InfiniBand 固有のセッティングを編集します。

新規 (または修正した) 接続を保存して他の設定を行う

InfiniBand 接続の編集が終わったら、保存 ボタンをクリックしてカスタマイズした設定を保存します。
そして、以下のいずれかの設定をします。

13.8.9.1. InfiniBand タブの設定

新しい InfiniBand 接続をすでに追加している場合( 手順13.4「nm-connection-editor を使用して新規 InfiniBand 接続を追加する」 を参照)、InfiniBand タブを編集して親インターフェイスと InfiniBand ID を設定できます。
トランスポートモード
ドロップダウンリストから、Datagram または Connected モードを選択できます。他の IPoIB ネットワークで使用しているモードと同じものを選びます。
Device MAC アドレス
InfiniBand ネットワークのトラフィックで使用される InfiniBand 対応デバイスの MAC アドレスです。InfiniBand ハードウェアがインストールされていれば、このハードウェアのアドレスフィールドは事前に記入されます。
MTU
InfiniBand 接続で送信されるパケットに使用する最大転送単位 (MTU) のサイズをオプションで設定します。

13.8.10. 関連情報

インストールされているドキュメント

  • /usr/share/doc/initscripts-version/sysconfig.txt: 設定ファイルとそのディレクティブについて説明しています。

オンラインドキュメント

https://www.kernel.org/doc/Documentation/infiniband/ipoib.txt
IPoIB ドライバーの説明。関連する RFC への参照が含まれます。