InfiniBand ネットワークおよび RDMA ネットワークの設定
高速ネットワークプロトコルと RDMA ハードウェアの設定と管理
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 InfiniBand および RDMA について
InfiniBand は、次の 2 つの異なるものを指します。
- InfiniBand ネットワーク用の物理リンク層プロトコル
- Remote Direct Memory Access (RDMA) テクノロジーの実装である InfiniBand Verbs API
RDMA は、オペレーティングシステム、キャッシュ、またはストレージを使用せずに、2 台のコンピューターのメインメモリー間のアクセスを提供します。RDMA を使用すると、データは、高スループット、低レイテンシー、低 CPU 使用率で転送されます。
通常の IP データ転送では、あるマシンのアプリケーションが別のマシンのアプリケーションにデータを送信すると、受信側で以下のアクションが起こります。
- カーネルがデータを受信する必要がある。
- カーネルは、データがアプリケーションに属するかどうかを判別する必要がある。
- カーネルは、アプリケーションを起動する。
- カーネルは、アプリケーションがカーネルへのシステムコールを実行するまで待機する。
- アプリケーションは、データをカーネルの内部メモリー領域から、アプリケーションが提供するバッファーにコピーする。
このプロセスでは、ホストアダプターが直接メモリーアクセス (DMA) などを使用する場合には、ほとんどのネットワークトラフィックが、システムのメインメモリーに少なくとも 2 回コピーされます。さらに、コンピューターはいくつかのコンテキストスイッチを実行して、カーネルとアプリケーションを切り替えます。これらのコンテキストスイッチは、他のタスクの速度を低下させる一方で、高いトラフィックレートで高い CPU 負荷を引き起こす可能性があります。
従来の IP 通信とは異なり、RDMA 通信は通信プロセスでのカーネルの介入を回避します。これにより、CPU のオーバーヘッドが軽減されます。RDMA プロトコルは、パケットがネットワークに入った後、どのアプリケーションがそれを受信し、そのアプリケーションのメモリー空間のどこに格納するかをホストアダプターが決定することを可能にします。処理のためにパケットをカーネルに送信してユーザーアプリケーションのメモリーにコピーする代わりに、ホストアダプターは、パケットの内容をアプリケーションバッファーに直接配置します。このプロセスには、別個の API である InfiniBand Verbs API が必要であり、アプリケーションは RDMA を使用するために InfiniBand Verbs API を実装する必要があります。
Red Hat Enterprise Linux は、InfiniBand ハードウェアと InfiniBand Verbs API の両方をサポートしています。さらに、InfiniBand 以外のハードウェアで InfiniBand Verbs API を使用するための次のテクノロジーをサポートしています。
- Internet Wide Area RDMA Protocol (iWARP): IP ネットワーク上で RDMA を実装するネットワークプロトコル
- RDMA over Converged Ethernet (RoCE)、別名 InfiniBand over Ethernet (IBoE): RDMA over Ethernet ネットワークを実装するネットワークプロトコル
関連情報
第2章 RoCE の設定
Remote Direct Memory Access (RDMA) は、直接メモリーアクセス (DMA) のリモート実行を提供します。RDMA over Converged Ethernet (RoCE) は、イーサネットネットワーク上で RDMA を利用するネットワークプロトコルです。RoCE の設定には特定のハードウェアが必要です。ハードウェアベンダーには Mellanox、Broadcom、QLogic などがあります。
2.1. RoCE プロトコルバージョンの概要
RoCE は、イーサネット上で Remote Direct Memory Access (RDMA) を有効にするネットワークプロトコルです。
以下は、RoCE のさまざまなバージョンです。
- RoCE v1
-
RoCE バージョン 1 プロトコルは、イーサタイプ
0x8915
を持つイーサネットリンク層プロトコルです。同じイーサネットブロードキャストドメイン内にある 2 つのホスト間の通信を可能にします。 - RoCE v2
-
RoCE バージョン 2 プロトコルは、UDP over IPv4 または UDP over IPv6 プロトコルの上位に存在します。RoCE v2 の場合、UDP の宛先ポート番号は
4791
です。
RDMA_CM は、データを転送するためにクライアントとサーバーとの間に信頼できる接続を確立します。RDMA_CM は、接続を確立するために RDMA トランスポートに依存しないインターフェイスを提供します。通信は、特定の RDMA デバイスとメッセージベースのデータ転送を使用します。
クライアントで RoCE v2 を使用し、サーバーで RoCE v1 を使用するなど、異なるバージョンの使用はサポートされていません。この場合は、サーバーとクライアントの両方が RoCE v1 で通信するように設定します。
2.2. デフォルトの RoCE バージョンを一時的に変更する
クライアントで RoCE v2 プロトコルを使用し、サーバーで RoCE v1 を使用することはサポートされていません。サーバーのハードウェアが RoCE v1 のみをサポートしている場合は、サーバーと通信できるようにクライアントを RoCE v1 用に設定します。たとえば、RoCE v1 のみをサポートする Mellanox ConnectX-5 InfiniBand デバイス用には、mlx5_0
ドライバーを使用するクライアントを設定できます。
ここで説明する変更は、ホストを再起動するまで有効です。
前提条件
- クライアントが、RoCE v2 プロトコルに対応した InfiniBand デバイスを使用している。
- サーバーが、RoCEv1 のみをサポートする InfiniBand デバイスを使用している。
手順
/sys/kernel/config/rdma_cm/mlx5_0/
ディレクトリーを作成します。# mkdir /sys/kernel/config/rdma_cm/mlx5_0/
デフォルトの RoCE モードを表示します。
# cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode RoCE v2
デフォルトの RoCE モードをバージョン 1 に変更します。
# echo "IB/RoCE v1" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
2.3. Soft-RoCE の設定
Soft-RoCE は、イーサネット経由のリモートダイレクトメモリーアクセス (RDMA) のソフトウェア実装で、RXE とも呼ばれます。RoCE ホストチャンネルアダプター (HCA) のないホストで Soft-RoCE を使用します。
Soft-RoCE 機能はテクノロジープレビューとしてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能では、最新の製品機能をいち早く提供します。これにより、お客様は開発段階で機能をテストし、フィードバックを提供できます。
テクノロジープレビュー機能のサポート範囲については、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
- イーサネットアダプターが搭載されている。
手順
iproute
パッケージ、libibverbs
パッケージ、libibverbs-utils
パッケージ、およびinfiniband-diags
パッケージをインストールします。#
yum
install iproute libibverbs libibverbs-utils infiniband-diagsRDMA リンクを表示します。
# rdma link show
rdma_rxe
カーネルモジュールをロードし、enp0s1
インターフェイスを使用するrxe0
という名前の新しいrxe
デバイスを追加します。# rdma link add rxe0 type rxe netdev enp1s0
検証
すべての RDMA リンクの状態を表示します。
# rdma link show link rxe0/1 state ACTIVE physical_state LINK_UP netdev enp1s0
利用可能な RDMA デバイスをリスト表示します。
# ibv_devices device node GUID ------ ---------------- rxe0 505400fffed5e0fb
ibstat
ユーティリティーを使用して詳細なステータスを表示することができます。# ibstat rxe0 CA 'rxe0' CA type: Number of ports: 1 Firmware version: Hardware version: Node GUID: 0x505400fffed5e0fb System image GUID: 0x0000000000000000 Port 1: State: Active Physical state: LinkUp Rate: 100 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x00890000 Port GUID: 0x505400fffed5e0fb Link layer: Ethernet
第3章 Soft-iWARP の設定
Remote Direct Memory Access (RDMA) は、パフォーマンス向上と補助プログラミングインターフェイスのために、iWARP、Soft-iWARP など、いくつかのライブラリーとプロトコルをイーサネット上で使用します。
3.1. iWARP と Soft-iWARP の概要
Remote Direct Memory Access (RDMA) は、イーサネットを介したインターネットワイドエリア RDMA プロトコル (iWARP) を使用して、TCP 経由で集中型の低レイテンシーのデータ送信を行います。iWARP は、標準のイーサネットスイッチと TCP/IP スタックを使用して、IP サブネット間でトラフィックをルーティングします。これにより、既存のインフラストラクチャーを効率的に使用するための柔軟性が提供されます。Red Hat Enterprise Linux では、複数のプロバイダーがハードウェアネットワークインターフェイスカードに iWARP を実装しています。たとえば、cxgb4
、irdma
、qedr
などです。
Soft-iWARP (siw) は、Linux 用のソフトウェアベースの iWARP カーネルドライバーおよびユーザーライブラリーです。これはソフトウェアベースの RDMA デバイスであり、ネットワークインターフェイスカードに接続すると、RDMA ハードウェアにプログラミングインターフェイスを提供します。Soft-iWARP は、RDMA 環境をテストおよび検証する簡単な方法を提供します。
3.2. Soft-iWARP の設定
Soft-iWARP (siw) は、Linux TCP/IP ネットワークスタックを介して Internet Wide-area RDMA Protocol (iWARP) Remote Direct Memory Access (RDMA) トランスポートを実装します。これにより、標準のイーサネットアダプターを備えたシステムが、iWARP アダプター、または Soft-iWARP ドライバーを実行している別のシステム、または iWARP をサポートするハードウェアを備えたホストと相互運用できるようになります。
Soft-iWARP 機能は、テクノロジープレビューとしてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能では、最新の製品機能をいち早く提供します。これにより、お客様は開発段階で機能をテストし、フィードバックを提供できます。
テクノロジープレビュー機能のサポート範囲については、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
Soft-iWARP を設定する際には、スクリプトで次の手順を使用して、システムの起動時に自動的にスクリプトを実行できます。
前提条件
- イーサネットアダプターが搭載されている。
手順
iproute
パッケージ、libibverbs
パッケージ、libibverbs-utils
パッケージ、およびinfiniband-diags
パッケージをインストールします。#
yum
install iproute libibverbs libibverbs-utils infiniband-diagsRDMA リンクを表示します。
# rdma link show
siw
カーネルモジュールをロードします。# modprobe siw
enp0s1
インターフェイスを使用する、siw0
という名前の新しいsiw
デバイスを追加します。# rdma link add siw0 type siw netdev enp0s1
検証
すべての RDMA リンクの状態を表示します。
# rdma link show link siw0/1 state ACTIVE physical_state LINK_UP netdev enp0s1
利用可能な RDMA デバイスをリスト表示します。
# ibv_devices device node GUID ------ ---------------- siw0 0250b6fffea19d61
ibv_devinfo
ユーティリティーを使用して、詳細なステータスを表示することができます。# ibv_devinfo siw0 hca_id: siw0 transport: iWARP (1) fw_ver: 0.0.0 node_guid: 0250:b6ff:fea1:9d61 sys_image_guid: 0250:b6ff:fea1:9d61 vendor_id: 0x626d74 vendor_part_id: 1 hw_ver: 0x0 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 1024 (3) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet
第4章 コア RDMA サブシステムの設定
rdma
サービス設定は、InfiniBand、iWARP、RoCE などのネットワークプロトコルと通信標準を管理します。
4.1. IPoIB デバイスの名前変更
デフォルトでは、カーネルは Internet Protocol over InfiniBand (IPoIB) デバイスに、ib0
、ib1
などの名前を付けます。競合を回避するために、Red Hat では、udev
デバイスマネージャーでルールを作成し、mlx4_ib0
などの永続的で意味のある名前を作成することを推奨しています。
前提条件
- InfiniBand デバイスがインストールされている。
手順
デバイス
ib0
のハードウェアアドレスを表示します。# ip link show ib0 8: ib0: >BROADCAST,MULTICAST,UP,LOWER_UP< mtu 65520 qdisc pfifo_fast state UP mode DEFAULT qlen 256 link/infiniband 80:00:02:00:fe:80:00:00:00:00:00:00:00:02:c9:03:00:31:78:f2 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
アドレスの最後の 8 バイトは、次のステップで
udev
ルールを作成するために必要です。00:02:c9:03:00:31:78:f2
のハードウェアアドレスを持つデバイスの名前をmlx4_ib0
に変更するルールを設定するには、/etc/udev/rules.d/70-persistent-ipoib.rules
ファイルを編集してACTION
ルールを追加してください。ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="32", ATTR{address}=="?*00:02:c9:03:00:31:78:f2", NAME="mlx4_ib0"
ホストを再起動します。
# reboot
関連情報
-
udev(7)
man ページ - IPoIB ハードウェアアドレスについて
4.2. システムでユーザーがピニング (固定) できるメモリーの量を増やす
Remote Direct Memory Access (RDMA) の操作には、物理メモリーのピニングが必要です。これにより、カーネルがスワップ領域にメモリーを書き込むことができなくなります。ユーザーがメモリーを過剰に固定すると、システムのメモリーが不足し、カーネルがプロセスを終了してより多くのメモリーを解放することがあります。したがって、メモリーのピニングは特権が必要な操作です。
root 以外のユーザーが大規模な RDMA アプリケーションを実行する必要がある場合は、プライマリーメモリー内のページを常にピニングしておくために、メモリーの量を増やす必要があります。
手順
root
ユーザーで、/etc/security/limits.conf
ファイルを以下の内容で作成します。@rdma soft memlock unlimited @rdma hard memlock unlimited
検証
/etc/security/limits.conf
ファイルの編集後、rdma
グループのメンバーとしてログインします。Red Hat Enterprise Linux は、ユーザーのログイン時に、更新された
ulimit
の設定を適用することに注意してください。ulimit -l
コマンドを使用して制限を表示します。$ ulimit -l unlimited
コマンドが
unlimited
を返す場合、ユーザーはメモリーのピニングを無制限に行うことができます。
関連情報
-
limits.conf(5)
man ページ
4.3. rdma サービスの設定
Remote Direct Memory Access (RDMA) プロトコルを使用すると、メインメモリーを使用して、ネットワーク経由で RDMA 対応システム間でデータを転送できます。RDMA プロトコルは、低レイテンシーと高スループットを実現します。サポートされているネットワークプロトコルと通信標準を管理するには、rdma
サービスを設定する必要があります。この設定には、RoCE や iWARP などの高速ネットワークプロトコル、および Soft-RoCE や Soft-iWARP などの通信標準が含まれます。Red Hat Enterprise Linux が、InfiniBand、iWARP、または RoCE デバイスおよびそれらの設定ファイルが /etc/rdma/modules/*
ディレクトリーに存在することを検出すると、udev
デバイスマネージャーが systemd
に rdma
サービスを起動するように指示します。/etc/rdma/modules/rdma.conf
ファイル内のモジュールの設定は、再起動後も保持されます。変更を適用するには、rdma-load-modules@rdma.service
設定サービスを再起動する必要があります。
手順
/etc/rdma/modules/rdma.conf
ファイルを編集し、有効にするモジュールのコメントを解除します。# These modules are loaded by the system if any RDMA devices is installed # iSCSI over RDMA client support ib_iser # iSCSI over RDMA target support ib_isert # SCSI RDMA Protocol target driver ib_srpt # User access to RDMA verbs (supports libibverbs) ib_uverbs # User access to RDMA connection management (supports librdmacm) rdma_ucm # RDS over RDMA support # rds_rdma # NFS over RDMA client support xprtrdma # NFS over RDMA server support svcrdma
サービスを再起動して変更を有効にします。
# systemctl restart <rdma-load-modules@rdma.service>
検証
再起動後、サービスのステータスを確認します。
# systemctl status <rdma-load-modules@rdma.service>
4.4. NFS over RDMA の有効化 (NFSoRDMA)
Red Hat Enterprise Linux 8 では、RDMA 対応ハードウェア上のリモートダイレクトメモリーアクセス (RDMA) サービスは、ネットワーク上での高速ファイル転送のためのネットワークファイルシステム (NFS) プロトコルサポートを提供します。
手順
rdma-core
パッケージをインストールします。# yum install rdma-core
/etc/rdma/modules/rdma.conf
ファイル内でxprtrdma
およびsvcrdma
を含む行がコメントアウトされていないことを確認します。# NFS over RDMA client support xprtrdma # NFS over RDMA server support svcrdma
NFS サーバーで、ディレクトリー
/mnt/nfsordma
を作成し、それを/etc/exports
にエクスポートします。# mkdir /mnt/nfsordma # echo "/mnt/nfsordma *(fsid=0,rw,async,insecure,no_root_squash)" >> /etc/exports
NFS クライアントで、サーバーの IP アドレスを使用して nfs-share をマウントします (例:
172.31.0.186
)。# mount -o rdma,port=20049 172.31.0.186:/mnt/nfs-share /mnt/nfs
nfs-server
サービスを再起動します。# systemctl restart nfs-server
関連情報
第5章 InfiniBand サブネットマネージャーの設定
すべての InfiniBand ネットワークでは、ネットワークが機能するために、サブネットマネージャーが実行されている必要があります。これは、2 台のマシンがスイッチなしで直接接続されている場合にも当てはまります。
複数のサブネットマネージャーを使用することもできます。その場合、1 つのサブネットマネージャーはマスターとして、もう 1 つはスレーブとして機能します。スレーブは、マスターサブネットマネージャーに障害が発生した場合に引き継ぎます。
ほとんどの InfiniBand スイッチには、サブネットマネージャーが組み込まれています。ただし、最新のサブネットマネージャーが必要な場合や、より詳細な制御が必要な場合は、Red Hat Enterprise Linux が提供する OpenSM
サブネットマネージャーを使用してください。
5.1. opensm サブネットマネージャーのインストール
OpenSM
は、InfiniBand 仕様に準拠したサブネットマネージャーおよび管理機能で、少なくとも 1 つの OpenSM
サービスのインスタンスが常に実行される InfiniBand ハードウェアを初期化します。
手順
opensm
パッケージをインストールします。#
yum
install opensmデフォルトのインストールがご使用の環境と一致しない場合に備えて、OpenSM を設定します。
InfiniBand ポートが 1 つしかないため、ホストはカスタムの変更を必要としないマスターサブネットマネージャーとして機能します。デフォルト設定は変更せずに動作します。
opensm
サービスを有効にして開始します。# systemctl enable --now opensm
関連情報
-
opensm(8)
man ページ
5.2. 簡単な方法での OpenSM の設定
OpenSM
は、InfiniBand 仕様ベースのサブネットマネージャーおよび管理機能で、InfiniBand ノードを相互接続するためのネットワークトポロジーである InfiniBand ファブリックを設定します。
前提条件
- 1 つ以上の InfiniBand ポートがサーバーにインストールされている。
手順
ibstat
ユーティリティーを使用して、ポートの GUID を取得します。# ibstat -d mlx4_0 CA 'mlx4_0' CA type: MT4099 Number of ports: 2 Firmware version: 2.42.5000 Hardware version: 1 Node GUID: 0xf4521403007be130 System image GUID: 0xf4521403007be133 Port 1: State: Active Physical state: LinkUp Rate: 56 Base lid: 3 LMC: 0 SM lid: 1 Capability mask: 0x02594868 Port GUID: 0xf4521403007be131 Link layer: InfiniBand Port 2: State: Down Physical state: Disabled Rate: 10 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x04010000 Port GUID: 0xf65214fffe7be132 Link layer: Ethernet
注記一部の InfiniBand アダプターでは、ノード、システム、およびポートに、同じ GUID を使用します。
/etc/sysconfig/opensm
ファイルを編集し、GUIDS
パラメーターで GUID を設定します。GUIDS="GUID_1 GUID_2"
サブネットで複数のサブネットマネージャーが使用可能な場合は、
PRIORITY
パラメーターを設定できます。以下に例を示します。PRIORITY=15
関連情報
-
/etc/sysconfig/opensm
5.3. opensm.conf ファイルを編集して OpenSM の設定
OpenSM
のパフォーマンスは、デバイス上で利用可能な InfiniBand ポートの数によって異なります。/etc/rdma/opensm.conf
ファイルを編集してカスタマイズできます。
前提条件
- サーバーに InfiniBand ポートが 1 つだけインストールされている。
手順
/etc/rdma/opensm.conf
ファイルを編集し、お使いの環境に合わせて設定をカスタマイズします。opensm
パッケージを更新した後、yum
ユーティリティーは/etc/rdma/opensm.conf
をオーバーライドし、新しい OpenSM 設定ファイル/etc/rdma/opensm.conf.rpmnew
であるコピーを作成します。したがって、以前のファイルと新しいファイルを比較して変更を識別し、それらをファイルopensm.conf
に手動で組み込むことができます。opensm
サービスを再起動します。# systemctl restart opensm
5.4. 複数の OpenSM インスタンスの設定
OpenSM
は、InfiniBand に制約されたサブネットマネージャーおよび管理機能です。高いパフォーマンスを提供するために、OpenSM
は、InfiniBand ネットワークノードと相互接続するスイッチドファブリックネットワークトポロジーを使用します。
前提条件
- 1 つ以上の InfiniBand ポートがサーバーにインストールされている。
手順
/etc/rdma/opensm.conf
ファイルを/etc/rdma/opensm.conf.orig
ファイルにコピーします。# cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.orig
更新した
opensm
パッケージをインストールすると、yum
ユーティリティーが/etc/rdma/opensm.conf
をオーバーライドします。この手順で作成したコピーで、以前のファイルと新しいファイルを比較して変更を特定し、インスタンス固有のopensm.conf
ファイルに手動で取り入れることができます。/etc/rdma/opensm.conf
ファイルのコピーを作成します。# cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.1
インスタンスごとに、一意の連続した番号を作成し、設定ファイルのコピーに追加します。
opensm
パッケージを更新した後、yum
ユーティリティーは新しい OpenSM 設定ファイルを/etc/rdma/opensm.conf.rpmnew
として保存します。このファイルを、カスタマイズした/etc/rdma/opensm.conf.\*
ファイルと比較して、手動で変更を加えます。-
前の手順で作成したコピーを編集し、お使いの環境に合わせて、インスタンスの設定をカスタマイズします。たとえば、
guid
パラメーター、subnet_prefix
パラメーター、およびlogdir
パラメーターを設定します。 -
必要に応じて、このサブネット専用の一意の名前で
partitions.conf
ファイルを作成し、opensm.conf
ファイルの対応するコピーのpartition_config_file
パラメーターでそのファイルを参照します。 - 作成するインスタンスごとに、前の手順を繰り返します。
opensm
サービスを開始します。# systemctl start opensm
opensm
サービスは、/etc/rdma/
ディレクトリー内のopensm.conf.*
ファイルごとに一意のインスタンスを自動的に開始します。複数のopensm.conf.*
ファイルが存在する場合、サービスは/etc/sysconfig/opensm
ファイルおよびベースファイル/etc/rdma/opensm.conf
の設定を無視します。
5.5. パーティション設定の作成
パーティションを使用すると、管理者はイーサネット VLAN と同じように、InfiniBand にサブネットを作成できます。
40 Gbps などの特定の速度でパーティションを定義する場合は、このパーティション内のすべてのホストがこの最小速度をサポートする必要があります。ホストが速度要件を満たさない場合は、パーティションに参加できません。したがって、パーティションの速度を、パーティションに参加することが許可されているホストが対応する最低速度に設定します。
前提条件
- 1 つ以上の InfiniBand ポートがサーバーにインストールされている。
手順
/etc/rdma/partitions.conf
ファイルを編集し、以下のようにパーティションを設定します。注記すべてのファブリックには
0x7fff
パーティションが含まれ、すべてのスイッチとすべてのホストがそのファブリックに属する必要があります。次のコンテンツをファイルに追加して、
10
Gbps の低速で0x7fff
のデフォルトパーティションを作成し、40
Gbps の速度でパーティション0x0002
を作成します。# For reference: # IPv4 IANA reserved multicast addresses: # http://www.iana.org/assignments/multicast-addresses/multicast-addresses.txt # IPv6 IANA reserved multicast addresses: # http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xml # # mtu = # 1 = 256 # 2 = 512 # 3 = 1024 # 4 = 2048 # 5 = 4096 # # rate = # 2 = 2.5 GBit/s # 3 = 10 GBit/s # 4 = 30 GBit/s # 5 = 5 GBit/s # 6 = 20 GBit/s # 7 = 40 GBit/s # 8 = 60 GBit/s # 9 = 80 GBit/s # 10 = 120 GBit/s Default=0x7fff, rate=3, mtu=4, scope=2, defmember=full: ALL, ALL_SWITCHES=full; Default=0x7fff, ipoib, rate=3, mtu=4, scope=2: mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address mgid=ff12:401b::1 # IPv4 All Hosts group mgid=ff12:401b::2 # IPv4 All Routers group mgid=ff12:401b::16 # IPv4 IGMP group mgid=ff12:401b::fb # IPv4 mDNS group mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group mgid=ff12:401b::101 # IPv4 NTP group mgid=ff12:401b::202 # IPv4 Sun RPC mgid=ff12:601b::1 # IPv6 All Hosts group mgid=ff12:601b::2 # IPv6 All Routers group mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group mgid=ff12:601b::fb # IPv6 mDNS group mgid=ff12:601b::101 # IPv6 NTP group mgid=ff12:601b::202 # IPv6 Sun RPC group mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group ALL=full, ALL_SWITCHES=full; ib0_2=0x0002, rate=7, mtu=4, scope=2, defmember=full: ALL, ALL_SWITCHES=full; ib0_2=0x0002, ipoib, rate=7, mtu=4, scope=2: mgid=ff12:401b::ffff:ffff # IPv4 Broadcast address mgid=ff12:401b::1 # IPv4 All Hosts group mgid=ff12:401b::2 # IPv4 All Routers group mgid=ff12:401b::16 # IPv4 IGMP group mgid=ff12:401b::fb # IPv4 mDNS group mgid=ff12:401b::fc # IPv4 Multicast Link Local Name Resolution group mgid=ff12:401b::101 # IPv4 NTP group mgid=ff12:401b::202 # IPv4 Sun RPC mgid=ff12:601b::1 # IPv6 All Hosts group mgid=ff12:601b::2 # IPv6 All Routers group mgid=ff12:601b::16 # IPv6 MLDv2-capable Routers group mgid=ff12:601b::fb # IPv6 mDNS group mgid=ff12:601b::101 # IPv6 NTP group mgid=ff12:601b::202 # IPv6 Sun RPC group mgid=ff12:601b::1:3 # IPv6 Multicast Link Local Name Resolution group ALL=full, ALL_SWITCHES=full;
第6章 IPoIB の設定
デフォルトでは、InfiniBand は通信にインターネットプロトコル (IP) を使用しません。ただし、IPoIB (IP over InfiniBand) は、InfiniBand Remote Direct Memory Access (RDMA) ネットワーク上に IP ネットワークエミュレーション層を提供します。これにより、変更を加えていない既存のアプリケーションが InfiniBand ネットワーク経由でデータを送信できるようになりますが、アプリケーションが RDMA をネイティブに使用する場合よりもパフォーマンスが低下します。
RHEL 8 以降の Mellanox デバイス (ConnectX-4 以降) は、デフォルトで Enhanced IPoIB モードを使用します (データグラムのみ)。これらのデバイスでは、Connected モードはサポートされていません。
6.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
モードに設定するか、データグラムサイズのパケットに収まるように、パケットの送信サイズに上限を設けるようにアプリケーションを設定してください。
6.2. IPoIB ハードウェアアドレスについて
IPoIB デバイスには、以下の部分で構成される 20
バイトのハードウェアアドレスがあります。
- 最初の 4 バイトはフラグとキューペアの番号です。
次の 8 バイトはサブネットの接頭辞です。
デフォルトのサブネットの接頭辞は
0xfe:80:00:00:00:00:00:00
です。デバイスがサブネットマネージャーに接続すると、デバイスはこの接頭辞を変更して、設定されたサブネットマネージャーと一致させます。- 最後の 8 バイトは、IPoIB デバイスに接続する InfiniBand ポートのグローバル一意識別子 (GUID) です。
最初の 12 バイトは変更される可能性があるため、udev
デバイスマネージャールールでは使用しないでください。
6.3. nmcli コマンドを使用した IPoIB 接続の設定
nmcli
コマンドラインユーティリティーは、CLI を使用して NetworkManager を制御し、ネットワークステータスを報告します。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- 対応するカーネルモジュールがロードされている。
手順
InfiniBand 接続を作成して、
Connected
トランスポートモードでmlx4_ib0
インターフェイスを使用し、最大 MTU が65520
バイトになるようにします。# nmcli connection add type infiniband con-name mlx4_ib0 ifname mlx4_ib0 transport-mode Connected mtu 65520
また、
mlx4_ib0
接続のP_Key
インターフェイスとして0x8002
を設定することも可能です。# nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002
IPv4 を設定するには、
mlx4_ib0
接続の静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを設定します。# nmcli connection modify mlx4_ib0 ipv4.addresses 192.0.2.1/24 # nmcli connection modify mlx4_ib0 ipv4.gateway 192.0.2.254 # nmcli connection modify mlx4_ib0 ipv4.dns 192.0.2.253 # nmcli connection modify mlx4_ib0 ipv4.method manual
IPv6 を設定するには、
mlx4_ib0
接続の静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを設定します。# nmcli connection modify mlx4_ib0 ipv6.addresses 2001:db8:1::1/32 # nmcli connection modify mlx4_ib0 ipv6.gateway 2001:db8:1::fffe # nmcli connection modify mlx4_ib0 ipv6.dns 2001:db8:1::fffd # nmcli connection modify mlx4_ib0 ipv6.method manual
mlx4_ib0
接続をアクティブ化するには、以下を実行します。# nmcli connection up mlx4_ib0
6.4. ネットワーク RHEL システムロールを使用した IPoIB 接続の設定
network
RHEL システムロールを使用して、IP over InfiniBand (IPoIB) デバイスの NetworkManager 接続プロファイルをリモートで作成できます。たとえば、Ansible Playbook を実行して、次の設定で mlx4_ib0
インターフェイスの InfiniBand 接続をリモートで追加します。
-
IPoIB デバイス -
mlx4_ib0.8002
-
パーティションキー
p_key
-0x8002
-
静的
IPv4
アドレス -192.0.2.1
と/24
サブネットマスク -
静的
IPv6
アドレス -2001:db8:1::1
と/64
サブネットマスク
Ansible コントロールノードで以下の手順を実行します。
前提条件
- コントロールノードと管理対象ノードを準備している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントには、そのノードに対する
sudo
権限がある。 - この Playbook を実行する管理対象ノードまたは管理対象ノードのグループが、Ansible インベントリーファイルにリストされている。
-
mlx4_ib0
という名前の InfiniBand デバイスが管理対象ノードにインストールされている。 - 管理対象ノードが NetworkManager を使用してネットワークを設定している。
手順
~/IPoIB.yml
などの Playbook ファイルを次の内容で作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure IPoIB include_role: name: rhel-system-roles.network vars: network_connections: # InfiniBand connection mlx4_ib0 - name: mlx4_ib0 interface_name: mlx4_ib0 type: infiniband # IPoIB device mlx4_ib0.8002 on top of mlx4_ib0 - name: mlx4_ib0.8002 type: infiniband autoconnect: yes infiniband: p_key: 0x8002 transport_mode: datagram parent: mlx4_ib0 ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 state: up
この例のように
p_key
パラメーターを設定する場合は、IPoIB デバイスでinterface_name
パラメーターを設定しないでください。Playbook の構文を検証します。
# ansible-playbook ~/IPoIB.yml --syntax-check
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
# ansible-playbook ~/IPoIB.yml
検証
managed-node-01.example.com
ホストで、mlx4_ib0.8002
デバイスの IP 設定を表示します。# ip address show mlx4_ib0.8002 ... inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute ib0.8002 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/64 scope link tentative noprefixroute valid_lft forever preferred_lft forever
mlx4_ib0.8002
デバイスのパーティションキー (P_Key) を表示します。# cat /sys/class/net/mlx4_ib0.8002/pkey 0x8002
mlx4_ib0.8002
デバイスのモードを表示します。# cat /sys/class/net/mlx4_ib0.8002/mode datagram
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイル
6.5. nm-connection-editor を使用した IPoIB 接続の設定
nmcli-connection-editor
アプリケーションは、管理コンソールを使用して、NetworkManager によって保存されたネットワーク接続を設定および管理します。
前提条件
- InfiniBand デバイスがサーバーに取り付けられている。
- 対応するカーネルモジュールがロードされている。
-
nm-connection-editor
パッケージがインストールされている。
手順
コマンドを入力します。
$ nm-connection-editor
- + ボタンをクリックして、新しい接続を追加します。
-
InfiniBand
接続タイプを選択し、Create をクリックします。 InfiniBand
タブで以下を行います。- 必要に応じて、接続名を変更します。
- トランスポートモードを選択します。
- デバイスを選択します。
- 必要に応じて MTU を設定します。
-
IPv4 Settings
タブで、IPv4 設定を設定します。たとえば、静的な IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを設定します。 -
IPv6 Settings
タブで、IPv6 設定を設定します。たとえば、静的な IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを設定します。 - Save をクリックして、チーム接続を保存します。
-
nm-connection-editor
を閉じます。 P_Key
インターフェイスを設定することができます。この設定はnm-connection-editor
では利用できないため、コマンドラインでこのパラメーターを設定する必要があります。たとえば、
mlx4_ib0
接続のP_Key
インターフェイスとして0x8002
を設定するには、以下のコマンドを実行します。# nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002
第7章 InfiniBand ネットワークのテスト
7.1. 初期の InfiniBand RDMA 操作のテスト
InfiniBand は、Remote Direct Memory Access (RDMA) に低レイテンシーと高パフォーマンスを提供します。
InfiniBand とは別に、Internet Wide-area Remote Protocol (iWARP)、RDMA over Converged Ethernet (RoCE)、または InfiniBand over Ethernet (IBoE) デバイスなどの IP ベースのデバイスを使用する場合は、次を参照してください。
前提条件
-
rdma
サービスが設定されている。 -
libibverbs-utils
パッケージとinfiniband-diags
パッケージがインストールされている。
手順
利用可能な InfiniBand デバイスのリストを表示します。
# ibv_devices device node GUID ------ ---------------- mlx4_0 0002c903003178f0 mlx4_1 f4521403007bcba0
mlx4_1
デバイスの情報を表示します。# ibv_devinfo -d mlx4_1 hca_id: mlx4_1 transport: InfiniBand (0) fw_ver: 2.30.8000 node_guid: f452:1403:007b:cba0 sys_image_guid: f452:1403:007b:cba3 vendor_id: 0x02c9 vendor_part_id: 4099 hw_ver: 0x0 board_id: MT_1090120019 phys_port_cnt: 2 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 2048 (4) sm_lid: 2 port_lid: 2 port_lmc: 0x01 link_layer: InfiniBand port: 2 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet
mlx4_1
デバイスのステータスを表示します。# ibstat mlx4_1 CA 'mlx4_1' CA type: MT4099 Number of ports: 2 Firmware version: 2.30.8000 Hardware version: 0 Node GUID: 0xf4521403007bcba0 System image GUID: 0xf4521403007bcba3 Port 1: State: Active Physical state: LinkUp Rate: 56 Base lid: 2 LMC: 1 SM lid: 2 Capability mask: 0x0251486a Port GUID: 0xf4521403007bcba1 Link layer: InfiniBand Port 2: State: Active Physical state: LinkUp Rate: 40 Base lid: 0 LMC: 0 SM lid: 0 Capability mask: 0x04010000 Port GUID: 0xf65214fffe7bcba2 Link layer: Ethernet
ibping
ユーティリティーは、InfiniBand アドレスに ping を実行し、クライアント/サーバーとして動作します。ホストでサーバーモードを開始するには、ポート番号
-P
の-S
パラメーターを-C
InfiniBand 認証局 (CA) 名で使用します。# ibping -S -C mlx4_1 -P 1
別のホストでクライアントモードを開始するには、
-C
InfiniBand 認証局 (CA) 名と-L
ローカル識別子 (LID) を使用して、ポート番号-P
でいくつかのパケット-c
を送信します。# ibping -c 50 -C mlx4_0 -P 1 -L 2
関連情報
-
ibping(8)
man ページ
7.2. ping ユーティリティーを使用した IPoIB のテスト
IP over InfiniBand (IPoIB) を設定したら、ping
ユーティリティーを使用して ICMP パケットを送信し、IPoIB 接続をテストします。
前提条件
- 2 台の RDMA ホストが、同じ InfiniBand ファブリックに RDMA ポートで接続されている。
- 両方のホストの IPoIB インターフェイスが、同じサブネット内の IP アドレスで設定されている。
手順
ping
ユーティリティーを使用して、5 つの ICMP パケットをリモートホストの InfiniBand アダプターに送信します。# ping -c5 192.0.2.1
7.3. IPoIB の設定後に qperf を使用した RDMA ネットワークのテスト
qperf
ユーティリティーは、2 つのノード間の RDMA と IP のパフォーマンスを、帯域幅、レイテンシー、CPU 使用率の観点から測定します。
前提条件
-
両方のホストに
qperf
パッケージがインストールされている。 - IPoIB が両方のホストに設定されている。
手順
サーバーとして機能するオプションを指定せずに、いずれかのホストで
qperf
を起動します。# qperf
クライアントで以下のコマンドを使用します。コマンドは、クライアントの
mlx4_0
ホストチャネルアダプターのポート1
を使用して、サーバーの InfiniBand アダプターに割り当てられた IP アドレス192.0.2.1
に接続します。ホストチャネルアダプターの設定を表示します。
# qperf -v -i mlx4_0:1 192.0.2.1 conf conf: loc_node = rdma-dev-01.lab.bos.redhat.com loc_cpu = 12 Cores: Mixed CPUs loc_os = Linux 4.18.0-187.el8.x86_64 loc_qperf = 0.4.11 rem_node = rdma-dev-00.lab.bos.redhat.com rem_cpu = 12 Cores: Mixed CPUs rem_os = Linux 4.18.0-187.el8.x86_64 rem_qperf = 0.4.11
Reliable Connection (RC) ストリーミングの双方向帯域幅を表示します。
# qperf -v -i mlx4_0:1 192.0.2.1 rc_bi_bw rc_bi_bw: bw = 10.7 GB/sec msg_rate = 163 K/sec loc_id = mlx4_0 rem_id = mlx4_0:1 loc_cpus_used = 65 % cpus rem_cpus_used = 62 % cpus
RC ストリーミングの一方向帯域幅を表示します。
# qperf -v -i mlx4_0:1 192.0.2.1 rc_bw rc_bw: bw = 6.19 GB/sec msg_rate = 94.4 K/sec loc_id = mlx4_0 rem_id = mlx4_0:1 send_cost = 63.5 ms/GB recv_cost = 63 ms/GB send_cpus_used = 39.5 % cpus recv_cpus_used = 39 % cpus
関連情報
-
qperf(1)
man ページ