13.8. IPoIB の設定
13.8.1. IPoIB の役割について
IP
ネットワークですが、InfiniBand は違います。IPoIB の役割は、InfiniBand RDMA ネットワークの上に IP
ネットワークエミュレーション層を提供することです。これにより、既存のアプリケーションが InfiniBand ネットワークで修正することなく実行できるようになります。しかし、これらのアプリケーションのパフォーマンスは、RDMA 通信をネイティブで使用するように作成されたアプリケーションの場合よりもかなり低いものになります。ほとんどのネットワークには最大級のパフォーマンスを必要とするアプリケーションと、低パフォーマンスを受け入れられるアプリケーションの 2 種類があります。後者は通常、RDMA 通信のような新しい通信方法を使用するように更新されないため、IPoIB はこれらのアプリケーション用に引き続き利用可能となっています。
IP
リンク層の上に RDMA 層のある IP
ネットワークなので、IPoIB の必要はありません。このため、カーネルは iWARP や RoCE/IBoE RDMA デバイスの上に IPoIB デバイスを作成することは拒否します。
13.8.2. IPoIB 通信モードについて
IP
パケットに 4 バイトの IPoIB ヘッダーを追加します。このため、IPoIB MTU は InfiniBand リンク層の MTU より 4 バイト小さいものである必要があります。InfiniBand リンク層の MTU は通常 2048 バイトなので、datagram モードでの一般的な IPoIB デバイス MTU は 2044 バイトになります。
IP
パケットには 16 ビットのサイズのフィールドしかないことから、最大バイト数は 65535
に制限されます。現実には、このサイズに適合しなくてはならない様々な TCP/IP ヘッダーも勘案する必要があるので、実際に許可される MTU はこれよりも小さくなります。このため、必要となる TCP
ヘッダーすべてに十分なスペースを確保するために、connected モードでの IPoIB MTU は最大 65520
となります。
13.8.3. 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
のどちらかである必要があります(エントリーは大文字と小文字を区別しますが、スクリプトはこれらの特定の表記を受け入れます)。
13.8.4. InfiniBand P_Key サブネットについて
P_Key
サブネットを使うことで仮想サブネットに論理的にセグメント化できます。これは、イーサネットインターフェース上で VLAN を使用することに非常に似ています。すべてのスイッチとホストはデフォルトの P_Key
サブネットのメンバーである必要がありますが、管理者は新たなサブネットを作成して、これらサブネットのメンバーをファブリック内のホストまたはスイッチのサブネットに限定できます。P_Key
サブネットは、ホストがこれを使用する前にサブネットマネジャーで定義される必要があります。opensm サブネットマネジャーを使って P_Key
サブネットを定義する方法については、「P_Key 定義の作成」を参照してください。IPoIB インターフェースの場合は、P_Key
サブネットが作成されると、それらの P_Key
サブネットのみを対象とした IPoIB 設定ファイルを追加で作成できます。各 IPoIB インターフェースはイーサネットデバイス上の VLAN インターフェースのように、同一リンクを共有するものの異なる P_Key
の値を持つ 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
テキスト形式のインターフェースが表示されます。無効なコマンドの場合は、使用法に関するメッセージが出力されます。

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

図13.2 NetworkManager テキスト形式ユーザーインターフェースで InfiniBand 接続を設定するメニュー
13.8.6. コマンドラインツール nmcli での IPoIB の設定
ib_ipoib
カーネルモジュールを一旦削除してリロードすると、再起動せずに IPoIB インターフェースの名前変更ができます。
~]$rmmod ib_ipoib
~]$modprobe ib_ipoib
例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 インターフェースが作成され、connected モードを使用するように設定されました。MTU は connected モードの最大値で、IPv4
および IPv6
に DHCP
が使われます。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 の設定
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
の場合は connected モードが使用され、no
の場合は datagram モードが使用されます (「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
メンバーシップビットを追加したもの有りまたはなし) に設定する必要があります。ただし、デバイス名は、PKEY_ID
を 4 桁の 16 進数で表したものに論理和を使用して 0x8000
メンバーシップビットを合わせたものにします。以下のようになります。NAME=${PHYSDEV}.$((0x8000 | $PKEY_ID))
PKEY_ID
は 10 進数として扱われ、16 進数に変換された後、論理和を用いて 0x8000
と合わされてデバイス用の適切な名前にします。ただしユーザーは、数字に標準 0x
接頭辞を追加して PKEY_ID
を 16 進数で指定することもできます。
13.8.8. IPoIB 設定後の RDMA ネットワークテスト
IP
アドレスを使用して RDMA デバイスの指定ができます。IP
アドレスとホスト名を使用してマシンを指定することが一般的であるため、ほとんどの RDMA アプリケーションでは、接続するリモートマシンまたはローカルデバイスの指定にこの方法が優先されます。場合によっては、この方法が唯一の指定方法になります。
IP
ネットワークテストツールを使って IPoIB デバイスの IP
アドレスを提供できます。たとえば、IPoIB デバイスの IP
アドレスの間で ping コマンドが機能させることができます。
IP
アドレスまたは IPoIB デバイスのホスト名を使用して指定されますが、テストアプリケーションは実際には異なる RDMA インターフェースを使って接続することが可能です。これは、ホスト名または IP
アドレスを RDMA アドレスに変更するプロセスで、使用されるマシン 2 台の間で有効な RDMA アドレスのペアが許可されるためです。クライアントが複数の方法でサーバーに接続できる場合、プログラムは指定したパスに問題があれば、別のパスを選択することができます。たとえば、同じ InfiniBand サブネットに接続されているマシンにそれぞれ 2 つのポートがあり、各マシンの 2 つ目のポートに IP
アドレスが提供された場合、プログラムは各マシンの 1 つ目のポートを有効な接続方法と判断し、それらを使用することになります。この場合、「初期の InfiniBand RDMA 操作のテスト」の ibping で実行したように、どの perftest プログラムでもコマンドラインオプションを使ってどのカードとポートをバインドするかを指示することで、テストが必要な特定のポートで確実にテストを実行できます。qperf では、ポートへのバインディング方法は多少異なります。qperf プログラムは 1 台のマシン上でサーバーとして機能し、すべてのデバイス (RDMA 以外のデバイスを含む) をリッスンします。クライアントは、サーバーの有効な IP
アドレスまたはホスト名を使って qperf に接続できます。qperf はまず、データ接続の開封を試み、クライアントのコマンドラインで提供された IP
アドレスもしくはホスト名で要求されたテストを実行しますが、このアドレスに問題がある場合は、qperf はクライアントとサーバー間にあるいずれかの有効なパスでのテスト実行を試みます。このため、qperf が特定のリンク上でテストするには、qperf クライアントに -loc_id
および -rem_id
オプションを使用して特定リンク上でのテストを強制します。
13.8.9. GUI を使った IPoIB の設定
手順13.4 nm-connection-editor を使用して新規 InfiniBand 接続を追加する
- ターミナルで nm-connection-editor と入力します。
~]$ nm-connection-editor
- 追加 ボタンをクリックします。接続の種類の選択 ウィンドウが表示されます。InfiniBand を選択して 作成 をクリックします。InfiniBand 接続 1 の編集 ウィンドウが表示されます。
- InfiniBand タブで、InfiniBand 接続に使用するトランスポートモードをドロップダウンリストから選びます。
- InfiniBand MAC アドレスを入力します。
- 設定を確認してから 保存 ボタンをクリックします。
- 「InfiniBand タブの設定」を参照して、InfiniBand 固有のセッティングを編集します。
手順13.5 既存の InfiniBand 接続を編集する
- ターミナルで nm-connection-editor と入力します。
~]$ nm-connection-editor
- 編集する接続を選択して、編集 ボタンをクリックします。
- 全般 タブを選択します。
- 接続名、自動接続の動作、および可用性のセッティングを設定します。編集 ダイアログの 全般 タブにある 5 つの設定は、すべての接続の種類で共通のものです。
- Connection name - ネットワーク接続の分かりやすい名前をします。この名前は、Network ウィンドウメニューの接続名一覧に表示されます。
- Automatically connect to this network when it is available - このチェックボックスを選択すると、NetworkManager が利用可能なときにこの接続に自動接続します。詳細は「control-center を使用した既存の接続の編集」を参照してください。
- All users may connect to this network - このチェックボックスを選択すると、システムですべてのユーザーが利用できる接続が作成されます。この設定を変更するには root 権限が必要になる場合があります。詳細は「GUI を使用したシステム全体およびプライベート接続プロファイルの管理」を参照してください。
- この接続を使用したときは自動的に VPN に接続する - このボックスを選択すると、この接続が利用可能な時に NetworkManager が自動で選択した VPN に接続します。ドロップダウンメニューから VPN を選択します。
- ファイアウォールゾーン - ドロップダウンメニューからファイアウォールゾーンを選択します。ファイアウォールゾーンに関する詳細情報は、『Red Hat Enterprise Linux 7 セキュリティーガイド』を参照してください。
- 「InfiniBand タブの設定」を参照して、InfiniBand 固有のセッティングを編集します。
新規 (または修正した) 接続を保存して他の設定を行う
- または
13.8.9.1. InfiniBand タブの設定
- トランスポートモード
- ドロップダウンリストから、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 の参照先も含まれています。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。