Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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_devinfoport_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 LID2 で、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 通信が機能しているかどうかを切り離すための簡単なテストが可能になります。