9.5. 初期の 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 出力にはなし、など) 名前も異なるものがいくつかあります (たとえば、ibstat 出力の Base local identifier (LID) は、ibv_devinfoport_lid と同じもの)。
infiniband-diags パッケージからの ibping など、簡単な ping プログラムを使うと、RDMA の接続性をテストすることができます。ibping プログラムでは、クライアント-サーバーモデルが用いられます。1 つのマシン上で ibping サーバーを起動してから別のマシン上で ibping をクライアントとして稼働し、このクライアントに対して ibping サーバーに接続するよう命令します。ベースの RDMA 機能をテストするので、サーバーの指定には、IP アドレスではなく RDMA 固有のアドレス解決方法を使用する必要があります。
サーバーマシン上では、ユーザーは ibv_devinfo および ibstat のコマンドを使うと、テスト対象となるポートの port_lid (または Base lid) および Port GUID をプリントアウトできます (上記インターフェースの port 1 で port_lid/Base LID2、Port GUID が 0xf4521403007bcba1 と仮定する)。次に必要なオプションをつけて ibping を起動し、テスト対象のカードとポートをバインドするとともに、サーバーモードで ibping の指定を実行します。-? または --help オプションを ibping に渡すと、利用可能なオプションが表示されますが、このインスタンスでは -S または --Server オプションが必要です。特定のカードとポートをバインドするには、-C--Ca-P--Port が必要です。このインスタンスのポートはネットワークポート番号を表示せず、マルチポートカードを使用する際のカード上の物理的ポート番号を表示します。たとえば、マルチポートカードの 2 番目のポートを使用して RDMA への接続性をテストするには、ibping にカード上の port 2 にバインドするよう指示する必要があります。単一ポートカードを使用している場合、もしくはカード上の最初のポートをテストする場合は、このオプションは不要です。例を示します。
~]$ ibping -S -C mlx4_1 -P 1
それからクライアントマシンに切り替え、ibping を実行します。サーバーの ibping プログラムがバインドされているポートの port GUID、またはサーバーの ibping プログラムがバインドされているポートの ローカル識別子 (LID) をメモします。また、サーバーでバインドされているカードとポートと同じネットワークに、クライアントマシンのどのカードとポートが物理的に接続されているかをメモします。たとえば、サーバー上の最初のカードの 2 番目のポートにバインドされていて、そのポートが 2 番目の RDMA ファブリックに接続されている場合、クライアント上でその 2 番目のファブリックに接続する必要のあるカードとポートを指定します。これらが明らかになったら、クライアントとして ibping プログラムを実行し、サーバー上で収集された port 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 のアーキテクチャーが x86_64 でインストールされた libmlx4 のタイプが i686 であった場合、このエラーが発生します。

注記

多くのサンプルアプリケーションでは、サーバーとクライアント間の通信を開く際に、LID ではなくホスト名もしくはアドレスの使用が好まれます。これらのアプリケーションでは、エンドツーエンドの RDMA 通信をテストする前に IPoIB をセットアップする必要があります。ibping アプリケーションは、アドレス指定形式として LID を受け付けるという点で、独特のものです。これにより、テストのシナリオから IPoIB アドレス指定の問題の可能性を排除して簡単なテストにすることができ、単純な RDMA 通信が機能しているかどうかという切り分けられた結果が得られます。