13.7. 初期の InfiniBand RDMA 操作のテスト
注記
このセクションは、InfiniBand デバイスにのみ適用されます。iWARP および RoCE/IBoE デバイスは
IP
ベースのデバイスであるため、IPoIB が設定され、デバイスに IP
アドレスが設定されると、ユーザーは RDMA 操作のテストのセクションに進んでください。
rdma
サービスが有効になり、(必要な場合) opensm サービスが有効になり、特定のハードウェアに適切なユーザー空間ライブラリーがインストールされると、ユーザー空間の rdma
操作が可能になります。libibverbs-utils パッケージの簡単なテストプログラムが、RDMA が適切に機能しているかどうかの判断に役立ちます。ibv_devices プログラムは、システムに存在するデバイスを示し、ibv_devinfo コマンドは各デバイスに関する詳細情報を提供します。以下に例を示します。
~]$ ibv_devices device node GUID ------ ---------------- mlx4_0 0002c903003178f0 mlx4_1 f4521403007bcba0 ~]$ 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 ~]$ 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
ibv_devinfo および ibstat コマンドは、若干異なる情報を出力します(たとえば、ポート MTU は ibv_devinfo にあり、ibstat 出力には存在せず、ポート GUID は ibstat 出力に存在しますが ibv_devinfo 出力には存在しません)、いくつかの名前が異なります(Base など)。 ibstat 出力の ローカル識別子 (LID)は、ibv_devinfoの
port_lid
出力と同じです)
infiniband-diags パッケージからの ibping などの単純な ping プログラムを使用して、RDMA の接続性をテストできます。ibping プログラムはクライアントサーバーモデルを使用します。まず、あるマシンで ibping サーバーを起動し、次に別のマシンでクライアントとして ibping を実行し、ibping サーバーに接続するように指示する必要があります。ベースの RDMA 機能をテストするため、サーバーの指定には、
IP
アドレスの代わりに RDMA 固有のアドレス解決方法を使用する必要があります。
サーバーマシンでは、ユーザーは ibv_devinfo および ibstat コマンドを使用して、テストするポートの
port_lid
(または Base lid)およびポート GUID を出力できます(上記のインターフェイスのポート 1 と仮定し、port_lid
/Base LID
が 2
で、Port GUID が 0xf4521403007bcba1
であると仮定します)。次に、必要なオプションで ibping を開始して、特にテストするカードとポートにバインドし、ibping をサーバーモードで実行する必要があります。-?
または --help
を渡すと、ibping に利用可能なオプションが表示されますが、-S
オプションまたは --Server
オプションのいずれかが必要になります。また、特定のカードとポートにバインドするには、-C
または --Ca
および -P
または --Port
のいずれかが必要です。このインスタンスのポートはネットワークポート番号を表示せず、マルチポートカードを使用する際のカード上の物理的ポート番号を表示します。たとえば、マルチポートカードの 2 番目のポートを使用して RDMA ファブリックへの接続をテストするには、ibping にカード上のポート 2
にバインドするように指示する必要があります。単一ポートカードを使用している場合、もしくはカード上の最初のポートをテストする場合は、このオプションは不要です。以下に例を示します。
~]$ ibping -S -C mlx4_1 -P 1
次に、クライアントマシンに切り替え、ibping を実行します。サーバー ibping プログラムがバインドされているポートのポート GUID、またはサーバーの ibping プログラムがバインドされているポートの ローカル識別子 (LID)をメモします。また、サーバーでバインドされているカードとポートと同じネットワークに、クライアントマシンのどのカードとポートが物理的に接続されているかをメモします。たとえば、サーバー上の最初のカードの 2 番目のポートにバインドされていて、そのポートが 2 番目の RDMA ファブリックに接続されている場合、クライアント上でその 2 番目のファブリックに接続する必要のあるカードとポートを指定します。これらがわかったら、ibping プログラムをクライアントとして実行し、サーバー上で収集されたポート LID または GUID を接続先のアドレスとして使用してサーバーに接続します。以下に例を示します。
~]$ ibping -c 10000 -f -C mlx4_0 -P 1 -L 2
--- rdma-host.example.com.(none) (Lid 2) ibping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 816 ms
rtt min/avg/max = 0.032/0.081/0.446 ms
または
~]$ ibping -c 10000 -f -C mlx4_0 -P 1 -G 0xf4521403007bcba1 \
--- rdma-host.example.com.(none) (Lid 2) ibping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 769 ms
rtt min/avg/max = 0.027/0.076/0.278 ms
この出力は、エンドツーエンドの RDMA 通信がユーザースペースのアプリケーションで機能していることを証明しています。
以下のエラーが表示される場合もあります。
~]$ ibv_devinfo
libibverbs: Warning: no userspace device-specific driver found for /sys/class/infiniband_verbs/uverbs0
No IB devices found
このエラーは、必要なユーザースペースのライブラリーがインストールされていないことを示しています。管理者は「InfiniBand および RDMA に関連するソフトウェアパッケージ」に掲載されているユーザースペースのライブラリー (該当ハードウェアに適したもの) のいずれかをインストールする必要があります。まれに、ユーザーがドライバーまたは libibverbs に間違ったアーキテクチャータイプをインストールすると、これが発生する可能性があります。たとえば、libibverbs が arch x86_64
で、libmlx4 がインストールされているが i686
タイプの場合は、このエラーが生じる可能性があります。
注記
多くのサンプルアプリケーションでは、サーバーとクライアント間の通信を開く際に、LID ではなくホスト名もしくはアドレスの使用が好まれます。これらのアプリケーションでは、エンドツーエンドの RDMA 通信をテストする前に IPoIB をセットアップする必要があります。ibping アプリケーションは、アドレス指定形式として単純な LID を受け入れるという点で非意味です。これにより、テストシナリオから IPoIB アドレス指定の問題の可能性をなくし、単純な RDMA 通信が機能しているかどうかを切り離すための簡単なテストが可能になります。