26.3. IPoIB の設定
デフォルトでは、InfiniBand は通信にインターネットプロトコル (IP) を使用しません。ただし、IPoIB (IP over InfiniBand) は、InfiniBand Remote Direct Memory Access (RDMA) ネットワーク上に IP ネットワークエミュレーション層を提供します。これにより、変更を加えていない既存のアプリケーションが InfiniBand ネットワーク経由でデータを送信できるようになりますが、アプリケーションが RDMA をネイティブに使用する場合よりもパフォーマンスが低下します。
RHEL 8 以降の Mellanox デバイス (ConnectX-4 以降) は、デフォルトで Enhanced IPoIB モードを使用します (データグラムのみ)。これらのデバイスでは、Connected モードはサポートされていません。
26.3.1. IPoIB の通信モード リンクのコピーリンクがクリップボードにコピーされました!
IPoIB デバイスは、Datagram
モードまたは Connected
モードのいずれかで設定可能です。違いは、通信の反対側で IPoIB 層がマシンで開こうとするキューペアのタイプです。
Datagram
モードでは、システムは信頼できない非接続のキューペアを開きます。このモードは、InfiniBand リンク層の Maximum Transmission Unit (MTU) を超えるパッケージには対応していません。IPoIB 層は、データ転送時に IP パケットに 4 バイトの IPoIB ヘッダーを追加します。その結果、IPoIB MTU は InfiniBand リンク層 MTU より 4 バイト少なくなります。一般的な InfiniBand リンク層 MTU は
2048
であるため、Datagram
モードの一般的な IPoIB デバイス MTU は2044
になります。Connected
モードでは、システムは信頼できる接続されたキューペアを開きます。このモードでは、InfiniBand のリンク層の MTU より大きなメッセージを許可します。ホストアダプターがパケットのセグメンテーションと再構築を処理します。その結果、
Connected
モードでは、Infiniband アダプターから送信されるメッセージのサイズに制限がありません。しかし、data
フィールドと TCP/IPheader
フィールドにより、IP パケットには制限があります。このため、Connected
モードの IPoIB MTU は65520
バイトです。Connected
モードではパフォーマンスが向上しますが、より多くのカーネルメモリーを消費します。
システムが Connected
モードを使用するように設定されていても、InfiniBand スイッチとファブリックは Connected
モードでマルチキャストトラフィックを渡すことができないため、システムは引き続き Datagram
モードを使用してマルチキャストトラフィックを送信します。また、ホストが Connected
モードを使用するように設定されていない場合、システムは Datagram
モードにフォールバックします。
インターフェイス上で MTU までのマルチキャストデータを送信するアプリケーションを実行しながら、インターフェイスを Datagram
モードに設定するか、データグラムサイズのパケットに収まるように、パケットの送信サイズに上限を設けるようにアプリケーションを設定します。
26.3.2. IPoIB ハードウェアアドレスについて リンクのコピーリンクがクリップボードにコピーされました!
IPoIB デバイスには、以下の部分で構成される 20
バイトのハードウェアアドレスがあります。
- 最初の 4 バイトはフラグとキューペアの番号です。
次の 8 バイトはサブネットの接頭辞です。
デフォルトのサブネットの接頭辞は
0xfe:80:00:00:00:00:00:00
です。デバイスがサブネットマネージャーに接続すると、デバイスはこの接頭辞を変更して、設定されたサブネットマネージャーと一致させます。- 最後の 8 バイトは、IPoIB デバイスに接続する InfiniBand ポートのグローバル一意識別子 (GUID) です。
最初の 12 バイトは変更される可能性があるため、udev
デバイスマネージャールールでは使用しないでください。
26.3.3. systemd リンクファイルを使用した IPoIB デバイスの名前の変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、カーネルは Internet Protocol over InfiniBand (IPoIB) デバイスに、ib0
、ib1
などの名前を付けます。競合を回避するには、systemd
リンクファイルを作成して、mlx5_ib0
など、永続的でわかりやすい名前を作成します。
前提条件
- InfiniBand デバイスがインストールされている。
手順
デバイス
ib0
のハードウェアアドレスを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow MAC アドレス
00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02
を持つインターフェイスにmlx5_ib0
という名前を付けるには、次の内容の/etc/systemd/network/70-custom-ifnames.link
ファイルを作成します。[Match] MACAddress=00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 [Link] Name=_mlx5_ib0
[Match] MACAddress=00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 [Link] Name=_mlx5_ib0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このリンクファイルによって MAC アドレスが照合され、ネットワークインターフェイスの名前が
Name
パラメーターに設定された名前に変更されます。
検証
ホストを再起動します。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リンクファイルで指定した MAC アドレスを持つデバイスが
mlx5_ib0
に割り当てられていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.3.4. nmcli を使用した IPoIB 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
nmcli
ユーティリティーを使用して、コマンドラインで IP over InfiniBand 接続を作成できます。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- 対応するカーネルモジュールがロードされている。
手順
InfiniBand 接続を作成して、
Connected
トランスポートモードでmlx5_ib0
インターフェイスを使用し、最大 MTU が65520
バイトになるようにします。nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
# nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
Copy to Clipboard Copied! Toggle word wrap Toggle overflow P_Key
を設定します。次に例を示します。nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
# nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 を設定します。
DHCP を使用するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv4.method auto
# nmcli connection modify mlx5_ib0 ipv4.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipv4.method
がすでにauto
(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
# nmcli connection modify mlx5_ib0 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IPv6 設定を行います。
ステートレスアドレス自動設定 (SLAAC) を使用するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv6.method auto
# nmcli connection modify mlx5_ib0 ipv6.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipv6.method
がすでにauto
(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
# nmcli connection modify mlx5_ib0 ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
プロファイルの他の設定をカスタマイズするには、次のコマンドを使用します。
nmcli connection modify mlx5_ib0 <setting> <value>
# nmcli connection modify mlx5_ib0 <setting> <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 値はスペースまたはセミコロンで引用符で囲みます。
プロファイルをアクティブ化します。
nmcli connection up mlx5_ib0
# nmcli connection up mlx5_ib0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ping
ユーティリティーを使用して、ICMP パケットをリモートホストの InfiniBand アダプターに送信します。次に例を示します。ping -c5 192.0.2.2
# ping -c5 192.0.2.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.3.5. network RHEL システムロールを使用した IPoIB 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
IP over InfiniBand (IPoIB) を使用すると、InfiniBand インターフェイス経由で IP パケットを送信できます。IPoIB を設定するには、NetworkManager 接続プロファイルを作成します。Ansible と network
システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用して IPoIB を設定できます。InfiniBand の親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
mlx5_ib0
という名前の InfiniBand デバイスが管理対象ノードにインストールされている。 - 管理対象ノードが NetworkManager を使用してネットワークを設定している。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
type: <profile_type>
- 作成するプロファイルのタイプを設定します。このサンプル Playbook では、2 つの接続プロファイルを作成します。1 つは InfiniBand 接続用、もう 1 つは IPoIB デバイス用です。
parent: <parent_device>
- IPoIB 接続プロファイルの親デバイスを設定します。
p_key: <value>
-
InfiniBand パーティションキーを設定します。この変数を設定する場合は、IPoIB デバイスに
interface_name
を設定しないでください。 transport_mode: <mode>
-
IPoIB 接続の動作モードを設定します。この変数は、
datagram
(デフォルト) またはconnected
に設定できます。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
mlx5_ib0.8002
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mlx5_ib0.8002
デバイスのパーティションキー (P_Key) を表示します。ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/pkey' managed-node-01.example.com | CHANGED | rc=0 >> 0x8002
# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/pkey' managed-node-01.example.com | CHANGED | rc=0 >> 0x8002
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mlx5_ib0.8002
デバイスのモードを表示します。ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/mode' managed-node-01.example.com | CHANGED | rc=0 >> datagram
# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/mode' managed-node-01.example.com | CHANGED | rc=0 >> datagram
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.3.6. nmstatectl を使用して IPoIB 接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介して IP over InfiniBand (IPoIB) 接続を設定できます。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- InfiniBand デバイスのカーネルモジュールがロードされている。
手順
次の内容を含む YAML ファイル (例:
~/create-IPoIB-profile.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPoIB 接続に以下が設定されました。
-
IPOIB デバイス名:
mlx5_ib0.8002
-
基本インターフェイス (親):
mlx5_ib0
-
InfiniBand パーティションキー:
0x8002
-
トランスポートモード:
datagram
-
静的 IPv4 アドレス:
192.0.2.1
(サブネットマスクが/24
) -
静的 IPv6 アドレス:
2001:db8:1::1
(サブネットマスクが/64
) -
IPv4 デフォルトゲートウェイ:
192.0.2.254
-
IPv6 デフォルトゲートウェイ:
2001:db8:1::fffe
-
IPOIB デバイス名:
設定をシステムに適用します。
nmstatectl apply ~/create-IPoIB-profile.yml
# nmstatectl apply ~/create-IPoIB-profile.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
mlx5_ib0.8002
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mlx5_ib0.8002
デバイスのパーティションキー (P_Key) を表示します。cat /sys/class/net/mlx5_ib0.8002/pkey 0x8002
# cat /sys/class/net/mlx5_ib0.8002/pkey 0x8002
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mlx5_ib0.8002
デバイスのモードを表示します。cat /sys/class/net/mlx5_ib0.8002/mode datagram
# cat /sys/class/net/mlx5_ib0.8002/mode datagram
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.3.7. IPoIB の設定後に iperf3 を使用して RDMA ネットワークをテストする リンクのコピーリンクがクリップボードにコピーされました!
次の例では、大きなバッファーサイズを使用して、60 秒のテストを実行し、最大スループットを測定します。iperf3
ユーティリティーを使用して 2 つのホスト間の帯域幅とレイテンシーを十分に使用します。
前提条件
- 両方のホストで IPoIB を設定している。
手順
iperf3
をシステム上のサーバーとして実行するには、時間の間隔を定義して、定期的な帯域幅の更新-i
を指定し、クライアント接続の応答を待機するサーバー-s
としてリッスンします。iperf3 -i 5 -s
# iperf3 -i 5 -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow iperf3
を別のシステムでクライアントとして実行するには、時間の間隔を定義して、定期的な帯域幅の更新-i
を指定し、-t
秒使用して IP アドレス192.168.2.2
のリスニングサーバー-c
に接続します。iperf3 -i 5 -t 60 -c 192.168.2.2
# iperf3 -i 5 -t 60 -c 192.168.2.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを使用します。
サーバーとして動作するシステムでテスト結果を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアントとして動作するシステムでテスト結果を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow