InfiniBand ネットワークおよび RDMA ネットワークの設定
高速ネットワークプロトコルと RDMA ハードウェアの設定と管理
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat は質の高いドキュメントを提供することに尽力しており、皆様からのフィードバックを大切にしています。改善にご協力いただくため、Red Hat Jira トラッキングシステムを通じてご提案やエラー報告をお寄せください。
手順
Jira の Web サイトにログインします。
アカウントがない場合、アカウント作成オプションを選択します。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 InfiniBand と RDMA の概要 リンクのコピーリンクがクリップボードにコピーされました!
InfiniBand は、InfiniBand ネットワークの物理リンク層プロトコルと、Remote Direct Memory Access (RDMA) テクノロジーの実装である InfiniBand Verbs API という 2 つの異なるコンポーネントを指します。
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 を使用するための次のテクノロジーをサポートしています。
- iWARP: IP ネットワーク上で RDMA を実装するネットワークプロトコル
- RDMA over Converged Ethernet (RoCE)、別名 InfiniBand over Ethernet (IBoE): RDMA over Ethernet ネットワークを実装するネットワークプロトコル
第2章 コア RDMA サブシステムの設定 リンクのコピーリンクがクリップボードにコピーされました!
rdma サービス設定は、InfiniBand、iWARP、RoCE などのネットワークプロトコルと通信標準を管理します。
手順
rdma-coreパッケージおよび fcoe パッケージをインストールします。# dnf install rdma-core opensmbashrc サービスを
有効にします。# systemctl enable opensmopensmサービスを開始します。# systemctl start opensm
検証
libibverbs-utilsおよびinfiniband-diagsパッケージをインストールします。# dnf install libibverbs-utils infiniband-diags利用可能な InfiniBand デバイスのリストを表示します。
# ibv_devices device node GUID ------ ---------------- mlx4_0 0002c903003178f0 mlx4_1 f4521403007bcba0mlx4_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: Ethernetmlx4_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: Ethernetibpingユーティリティーは、パラメーターを設定することで InfiniBand アドレスに ping を実行し、クライアント/サーバーとして動作します。ホスト上で InfiniBand チャネルアダプター (CA) 名
-Cを指定し、ポート番号-Pでサーバーモード-Sを開始します。# ibping -S -C mlx4_1 -P 1ホスト上でローカル識別子 (LID)
-Lおよび InfiniBand チャネルアダプター (CA) 名-Cを指定し、ポート番号-Pでクライアントモードを開始して、パケット-cをいくつか送信します。# ibping -c 50 -C mlx4_0 -P 1 -L 2
第3章 IPoIB の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、InfiniBand は通信にインターネットプロトコル (IP) を使用しません。ただし、IPoIB (IP over InfiniBand) は、InfiniBand Remote Direct Memory Access (RDMA) ネットワーク上に IP ネットワークエミュレーション層を提供します。
IPoIB を使用すると、既存の未変更アプリケーションでも InfiniBand ネットワーク経由でデータを送信できますが、アプリケーションがネイティブに RDMA を使用する場合よりもパフォーマンスは低下します。
RHEL 8 以降の Mellanox デバイス (ConnectX-4 以降) は、デフォルトで Enhanced IPoIB モードを使用します (データグラムのみ)。これらのデバイスでは、Connected モードはサポートされていません。
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 モードに設定するか、データグラムサイズのパケットに収まるように、パケットの送信サイズに上限を設けるようにアプリケーションを設定します。
3.2. IPoIB ハードウェアアドレスについて リンクのコピーリンクがクリップボードにコピーされました!
InfiniBand ハードウェアアドレスは、しばしばグローバル一意識別子 (GUID) とも呼ばれ、ホストチャネルアダプター (HCA) などの各 InfiniBand デバイスに割り当てられる一意の識別子です。このアドレスは、ルーティング、デバイス識別、ネットワーク管理に不可欠です。
IPoIB デバイスには、以下の部分で構成される 20 バイトのハードウェアアドレスがあります。
- 最初の 4 バイトはフラグとキューペアの番号です。
次の 8 バイトはサブネットの接頭辞です。
デフォルトのサブネットの接頭辞は
0xfe:80:00:00:00:00:00:00です。デバイスがサブネットマネージャーに接続すると、デバイスはこの接頭辞を変更して、設定されたサブネットマネージャーと一致させます。- 最後の 8 バイトは、IPoIB デバイスに接続する InfiniBand ポートのグローバル一意識別子 (GUID) です。
最初の 12 バイトは変更される可能性があるため、udev デバイスマネージャールールでは使用しないでください。
3.3. systemd リンクファイルを使用した IPoIB デバイスの名前の変更 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、カーネルは Internet Protocol over InfiniBand (IPoIB) デバイスに、ib0、ib1 などの名前を付けます。競合を回避するには、systemd リンクファイルを作成して、mlx4_ib0 など、永続的でわかりやすい名前を作成します。
前提条件
- InfiniBand デバイスがインストールされている。
手順
デバイス
ib0のハードウェアアドレスを表示します。# ip addr show ib0 7: ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256 link/infiniband 80:00:0a:28:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:e1:b1 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp7s0 altname ibs2 inet 172.31.0.181/24 brd 172.31.0.255 scope global dynamic noprefixroute ib0 valid_lft 2899sec preferred_lft 2899sec inet6 fe80::f652:1403:7b:e1b1/64 scope link noprefixroute valid_lft forever preferred_lft forever80:00:0a:28:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:e1:b1という MAC アドレスを持つインターフェイスにmlx4_ib0という名前を付けるには、/etc/systemd/network/70-custom-ifnames.linkファイルを次の内容で作成します。[Match] MACAddress=80:00:0a:28:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:e1:b1 [Link] Name=mlx4_ib0このリンクファイルによって MAC アドレスが照合され、ネットワークインターフェイスの名前が
Nameパラメーターに設定された名前に変更されます。
検証
ホストを再起動します。
# rebootリンクファイルで指定した MAC アドレスを持つデバイスが
mlx4_ib0に割り当てられていることを確認します。# ip addr show mlx4_ib0 7: mlx4_ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256 link/infiniband 80:00:0a:28:fe:80:00:00:00:00:00:00:f4:52:14:03:00:7b:e1:b1 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp7s0 altname ibs2 inet 172.31.0.181/24 brd 172.31.0.255 scope global dynamic noprefixroute mlx4_ib0 valid_lft 2899sec preferred_lft 2899sec inet6 fe80::f652:1403:7b:e1b1/64 scope link noprefixroute valid_lft forever preferred_lft forever
3.4. nmcli を使用した IPoIB 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
nmcli ユーティリティーを使用して、コマンドラインで IP over InfiniBand 接続を作成できます。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- 対応するカーネルモジュールがロードされている。
手順
InfiniBand 接続を作成して、
Connectedトランスポートモードでmlx4_ib0インターフェイスを使用し、最大 MTU が65520バイトになるようにします。# nmcli connection add type infiniband con-name mlx4_ib0 ifname mlx4_ib0 transport-mode Connected mtu 65520P_Keyを設定します。次に例を示します。# nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002IPv4 を設定します。
DHCP を使用するには、次のように実行します。
# nmcli connection modify mlx4_ib0 ipv4.method autoipv4.methodがすでにauto(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
# nmcli connection modify mlx4_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
IPv6 設定を行います。
ステートレスアドレス自動設定 (SLAAC) を使用するには、次のように実行します。
# nmcli connection modify mlx4_ib0 ipv6.method autoipv6.methodがすでにauto(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
# nmcli connection modify mlx4_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 mlx4_ib0 <setting> <value>値はスペースまたはセミコロンで引用符で囲みます。
プロファイルをアクティブ化します。
# nmcli connection up mlx4_ib0
検証
pingユーティリティーを使用して、ICMP パケットをリモートホストの InfiniBand アダプターに送信します。次に例を示します。# ping -c5 192.0.2.2
3.5. network RHEL システムロールを使用した IPoIB 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
IP over InfiniBand (IPoIB) を設定するには、NetworkManager 接続プロファイルを作成します。network RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義したホスト上の接続プロファイルをリモートで設定できます。
network RHEL システムロールを使用して IPoIB を設定できます。InfiniBand の親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 -
mlx4_ib0という名前の InfiniBand デバイスが管理対象ノードにインストールされている。 - 管理対象ノードが NetworkManager を使用してネットワークを設定している。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: IPoIB connection profile with static IP address settings ansible.builtin.include_role: name: redhat.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サンプル 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このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
mlx4_ib0.8002デバイスの IP 設定を表示します。# ansible managed-node-01.example.com -m command -a 'ip address show mlx4_ib0.8002' managed-node-01.example.com | CHANGED | rc=0 >> ... 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 forevermlx4_ib0.8002デバイスのパーティションキー (P_Key) を表示します。# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx4_ib0.8002/pkey' managed-node-01.example.com | CHANGED | rc=0 >> 0x8002mlx4_ib0.8002デバイスのモードを表示します。# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx4_ib0.8002/mode' managed-node-01.example.com | CHANGED | rc=0 >> datagram
3.6. nmstatectl を使用して IPoIB 接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
宣言型の Nmstate API を使用して、IP over InfiniBand (IPoIB) を設定できます。Nmstate を使用すると、結果が必ず設定ファイルと一致したものになります。一致しない場合は、変更がロールバックされます。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- InfiniBand デバイスのカーネルモジュールがロードされている。
手順
次の内容を含む YAML ファイル (例:
~/create-IPoIB-profile.yml) を作成します。interfaces: - name: mlx4_ib0.8002 type: infiniband state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false infiniband: base-iface: "mlx4_ib0" mode: datagram pkey: "0x8002" routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: mlx4_ib0.8002 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: mlx4_ib0.8002IPoIB 接続に以下が設定されました。
-
IPOIB デバイス名:
mlx4_ib0.8002 -
基本インターフェイス (親):
mlx4_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
検証
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 forevermlx4_ib0.8002デバイスのパーティションキー (P_Key) を表示します。# cat /sys/class/net/mlx4_ib0.8002/pkey 0x8002mlx4_ib0.8002デバイスのモードを表示します。# cat /sys/class/net/mlx4_ib0.8002/mode datagram
3.7. nm-connection-editor を使用した IPoIB 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
nmcli-connection-editor アプリケーションは、管理コンソールを使用して、NetworkManager によって保存されたネットワーク接続を設定および管理します。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- 対応するカーネルモジュールがロードされている。
-
nm-connection-editorパッケージがインストールされている。
手順
コマンドを入力します。
$ nm-connection-editor- + ボタンをクリックして、新しい接続を追加します。
-
InfiniBand接続タイプを選択し、 をクリックします。 InfiniBandタブで以下を行います。- 必要に応じて、接続名を変更します。
- トランスポートモードを選択します。
- デバイスを選択します。
- 必要に応じて MTU を設定します。
-
IPv4 Settingsタブで、IPv4 設定を設定します。たとえば、静的な IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを設定します。
-
IPv6 Settingsタブで、IPv6 設定を設定します。たとえば、静的な IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを設定します。
- をクリックして、チーム接続を保存します。
-
nm-connection-editorを閉じます。 P_Keyインターフェイスを設定することができます。この設定はnm-connection-editorでは利用できないため、コマンドラインでこのパラメーターを設定する必要があります。たとえば、
mlx4_ib0接続のP_Keyインターフェイスとして0x8002を設定するには、以下のコマンドを実行します。# nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002
3.8. IPoIB の設定後に iperf3 を使用して RDMA ネットワークをテストする リンクのコピーリンクがクリップボードにコピーされました!
次の例では、大きなバッファーサイズを使用して、60 秒のテストを実行し、最大スループットを測定します。iperf3 ユーティリティーを使用して 2 つのホスト間の帯域幅とレイテンシーを十分に使用します。
前提条件
- 両方のホストで IPoIB を設定している。
手順
iperf3をシステム上のサーバーとして実行するには、時間の間隔を定義して、定期的な帯域幅の更新-iを指定し、クライアント接続の応答を待機するサーバー-sとしてリッスンします。# iperf3 -i 5 -siperf3を別のシステムでクライアントとして実行するには、時間の間隔を定義して、定期的な帯域幅の更新-iを指定し、-t秒使用して IP アドレス192.168.2.2のリスニングサーバー-cに接続します。# iperf3 -i 5 -t 60 -c 192.168.2.2以下のコマンドを使用します。
サーバーとして動作するシステムでテスト結果を表示します。
# iperf3 -i 10 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.2.3, port 22216 [5] local 192.168.2.2 port 5201 connected to 192.168.2.3 port 22218 [ID] Interval Transfer Bandwidth [5] 0.00-10.00 sec 17.5 GBytes 15.0 Gbits/sec [5] 10.00-20.00 sec 17.6 GBytes 15.2 Gbits/sec [5] 20.00-30.00 sec 18.4 GBytes 15.8 Gbits/sec [5] 30.00-40.00 sec 18.0 GBytes 15.5 Gbits/sec [5] 40.00-50.00 sec 17.5 GBytes 15.1 Gbits/sec [5] 50.00-60.00 sec 18.1 GBytes 15.5 Gbits/sec [5] 60.00-60.04 sec 82.2 MBytes 17.3 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ID] Interval Transfer Bandwidth [5] 0.00-60.04 sec 0.00 Bytes 0.00 bits/sec sender [5] 0.00-60.04 sec 107 GBytes 15.3 Gbits/sec receiverクライアントとして動作するシステムでテスト結果を表示します。
# iperf3 -i 1 -t 60 -c 192.168.2.2 Connecting to host 192.168.2.2, port 5201 [4] local 192.168.2.3 port 22218 connected to 192.168.2.2 port 5201 [ID] Interval Transfer Bandwidth Retr Cwnd [4] 0.00-10.00 sec 17.6 GBytes 15.1 Gbits/sec 0 6.01 MBytes [4] 10.00-20.00 sec 17.6 GBytes 15.1 Gbits/sec 0 6.01 MBytes [4] 20.00-30.00 sec 18.4 GBytes 15.8 Gbits/sec 0 6.01 MBytes [4] 30.00-40.00 sec 18.0 GBytes 15.5 Gbits/sec 0 6.01 MBytes [4] 40.00-50.00 sec 17.5 GBytes 15.1 Gbits/sec 0 6.01 MBytes [4] 50.00-60.00 sec 18.1 GBytes 15.5 Gbits/sec 0 6.01 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ID] Interval Transfer Bandwidth Retr [4] 0.00-60.00 sec 107 GBytes 15.4 Gbits/sec 0 sender [4] 0.00-60.00 sec 107 GBytes 15.4 Gbits/sec receiver
第4章 RoCE の設定 リンクのコピーリンクがクリップボードにコピーされました!
Remote Direct Memory Access (RDMA) over Converged Ethernet (RoCE) は、イーサネットネットワーク上で RDMA を利用するネットワークプロトコルです。RoCE の設定には特定のハードウェアが必要です。ハードウェアベンダーには Mellanox、Broadcom、QLogic などがあります。
4.1. RoCE プロトコルバージョンの概要 リンクのコピーリンクがクリップボードにコピーされました!
効率的でスケーラブルなネットワークインフラストラクチャーを設計するには、さまざまな RoCE バージョン間の違いを理解することが重要です。
以下は、RoCE のさまざまなバージョンです。
- RoCE v1
-
RoCE バージョン 1 プロトコルは、Ethertype
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 で通信するように設定してください。
RoCE v1 はデータリンク層 (Layer 2) で動作し、同じネットワーク内の 2 台のマシンの通信のみをサポートします。デフォルトでは、RoCE v2 を使用できます。これは、ネットワーク層 (Layer 3) で機能します。RoCE v2 は、複数のイーサネットとの接続を提供するパケットルーティングをサポートしています。
4.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
4.3. Soft-RoCE の設定 リンクのコピーリンクがクリップボードにコピーされました!
Soft-RoCE は、イーサネット経由のリモートダイレクトメモリーアクセス (RDMA) のソフトウェア実装で、RXE とも呼ばれます。RoCE ホストチャンネルアダプター (HCA) のないホストで Soft-RoCE を使用します。
Soft-RoCE 機能は非推奨であり、RHEL 10 で削除されます。
Soft-RoCE はテクノロジープレビューとしてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能では、最新の製品機能をいち早く提供します。これにより、お客様は開発段階で機能をテストし、フィードバックを提供できます。
テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
- イーサネットアダプターが搭載されている。
手順
iprouteパッケージ、libibverbsパッケージ、libibverbs-utilsパッケージ、およびinfiniband-diagsパッケージをインストールします。# dnf install iproute libibverbs libibverbs-utils infiniband-diagsRDMA リンクを表示します。
# rdma link showenp0s1インターフェイスを使用する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 505400fffed5e0fbibstatユーティリティーを使用して詳細なステータスを表示することができます。# 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
第5章 システムでユーザーがピニング (固定) できるメモリーの量を増やす リンクのコピーリンクがクリップボードにコピーされました!
Remote Direct Memory Access (RDMA) の操作には、物理メモリーのピニングが必要です。これにより、カーネルがスワップ領域にメモリーを書き込むことができなくなります。ユーザーがメモリーを過剰に固定すると、システムのメモリーが不足し、カーネルがプロセスを終了してより多くのメモリーを解放することがあります。したがって、メモリーのピニングは特権が必要な操作です。
root 以外のユーザーが大規模な RDMA アプリケーションを実行する必要がある場合は、プライマリーメモリー内のページを常にピニングしておくために、メモリーの量を増やす必要があります。
手順
rootユーザーで、/etc/security/limits.confファイルを以下の内容で作成します。@rdma soft memlock unlimited @rdma hard memlock unlimited詳細は、システム上の
limits.conf(5)man ページを参照してください。
検証
/etc/security/limits.confファイルの編集後、rdmaグループのメンバーとしてログインします。Red Hat Enterprise Linux は、ユーザーのログイン時に、更新された
ulimitの設定を適用することに注意してください。ulimit -lコマンドを使用して制限を表示します。$ ulimit -l unlimitedコマンドが
unlimitedを返す場合、ユーザーはメモリーのピニングを無制限に行うことができます。
第6章 NFS サーバーで NFS over RDMA を有効にする リンクのコピーリンクがクリップボードにコピーされました!
NFS サーバーとクライアントの両方が RDMA 経由で接続されている場合、クライアントは NFS over Remote Direct Memory Access (NFSoRDMA) を使用してエクスポートされたディレクトリーをマウントできます。
RDMA は、クライアントシステムがストレージサーバーのメモリーから自身のメモリーへデータを直接転送することを可能にするプロトコルです。これにより、ストレージのスループットが向上し、サーバーとクライアント間のデータ転送の遅延が減少し、両側の CPU 負荷が軽減されます。
前提条件
- NFS サービスが実行および設定されている。
- InfiniBand または RDMA over Converged Ethernet (RoCE) デバイスがサーバーにインストールされている。
- サーバーに IP over InfiniBand (IPoIB) が設定され、InfiniBand デバイスに IP アドレスが割り当てられている。
手順
rdma-coreパッケージをインストールします。# dnf install rdma-coreパッケージがすでにインストールされている場合は、
/etc/rdma/modules/rdma.confファイル内のxprtrdmaおよびsvcrdmaモジュールのコメントが解除されていることを確認します。# NFS over RDMA client support xprtrdma # NFS over RDMA server support svcrdmaオプション: デフォルトでは、NFS over RDMA はポート 20049 を使用します。別のポートを使用する場合は、
/etc/nfs.confファイルの[nfsd]セクションでrdma-port設定を指定します。rdma-port=<port>firewalldで NFSoRDMA ポートを開きます。# firewall-cmd --permanent --add-port={20049/tcp,20049/udp} # firewall-cmd --reload20049 以外のポートを設定する場合は、ポート番号を変更します。
nfs-serverサービスを再起動します。# systemctl restart nfs-server
検証
InfiniBand ハードウェアを搭載したクライアントで、次の手順を実行します。
以下のパッケージをインストールします。
# dnf install nfs-utils rdma-coreエクスポートされた NFS 共有を RDMA 経由でマウントします。
# mount -o rdma server.example.com:/nfs/projects/ /mnt/デフォルト (20049) 以外のポート番号を設定する場合は、コマンドに
port=<port_number>を渡します。# mount -o rdma,port=<port_number> server.example.com:/nfs/projects/ /mnt/rdmaオプションを使用して共有がマウントされたことを確認します。# mount | grep "/mnt" server.example.com:/nfs/projects/ on /mnt type nfs (...,proto=rdma,...)
第7章 Soft-iWARP の設定 リンクのコピーリンクがクリップボードにコピーされました!
Remote Direct Memory Access (RDMA) は、パフォーマンス向上と補助プログラミングインターフェイスのために、iWARP、Soft-iWARP など、いくつかのライブラリーとプロトコルをイーサネット上で使用します。
Soft-iWARP 機能は非推奨であり、RHEL 10 で削除されます。
Soft-iWARP はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat では、実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
7.1. iWARP と Soft-iWARP の概要 リンクのコピーリンクがクリップボードにコピーされました!
Remote Direct Memory Access (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 環境をテストおよび検証する簡単な方法を提供します。
7.2. Soft-iWARP の設定 リンクのコピーリンクがクリップボードにコピーされました!
Soft-iWARP (siw) は、Linux TCP/IP ネットワークスタックを介して iWARP Remote Direct Memory Access (RDMA) トランスポートを実装します。これにより、標準のイーサネットアダプターを備えたシステムが、iWARP アダプター、または Soft-iWARP ドライバーを実行している別のシステム、または iWARP をサポートするハードウェアを備えたホストと相互運用できるようになります。
Soft-iWARP 機能は非推奨であり、RHEL 10 で削除されます。
Soft-iWARP 機能は、テクノロジープレビューとしてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能では、最新の製品機能をいち早く提供します。これにより、お客様は開発段階で機能をテストし、フィードバックを提供できます。
テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
Soft-iWARP を設定する際には、スクリプトで次の手順を使用して、システムの起動時に自動的にスクリプトを実行できます。
前提条件
- イーサネットアダプターが搭載されている。
手順
iprouteパッケージ、libibverbsパッケージ、libibverbs-utilsパッケージ、およびinfiniband-diagsパッケージをインストールします。# dnf install iproute libibverbs libibverbs-utils infiniband-diagsRDMA リンクを表示します。
# rdma link showsiwカーネルモジュールをロードします。# modprobe siwenp0s1インターフェイスを使用する、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 0250b6fffea19d61ibv_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
第8章 InfiniBand サブネットマネージャー リンクのコピーリンクがクリップボードにコピーされました!
すべての InfiniBand ネットワークでは、ネットワークが機能するために、サブネットマネージャーが実行されている必要があります。これは、2 台のマシンがスイッチなしで直接接続されている場合にも当てはまります。
複数のサブネットマネージャーを使用することもできます。その場合、1 つのサブネットマネージャーはマスターとして、もう 1 つはスレーブとして機能します。スレーブは、マスターサブネットマネージャーに障害が発生した場合に引き継ぎます。
Red Hat Enterprise Linux は、InfiniBand サブネットマネージャーの実装である OpenSM を提供します。ただし、OpenSM は機能が限られており、アップストリームの開発が活発に行われていません。通常、InfiniBand スイッチに組み込まれているサブネットマネージャーのほうが、より多くの機能を備えており、最新の InfiniBand ハードウェアをサポートしています。詳細は、Installing and configuring the OpenSM InfiniBand subnet manager を参照してください。