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_devinfoibstat 命令输出信息稍有不同(比如端口 MTU 信息是在 ibv_devinfo 而不是 ibstat 输出中显示,而端口 PUID 信息是在 ibstat 而不是 ibv_devinfo 输出中显示。同时有些信息的命名方式也不同,例如:ibstat 输出中的基础本地标识符LID)与 ibv_devinfo 输出中的 port_lid 是相同的信息。
可使用简单的 ping 程序,比如 infiniband-diags 软件包中的 ibping 测试 RDMA 连接性。ibping 程序采用客户端/服务器模式。必须首先在一台机器中启动 ibping 服务器,然后再另一台机器中将 ibping 作为客户端运行,并让它与 ibping 服务器相连。因为我们是要测试基础 RDMA 功能,因此需要用于 RDMA 的地址解析方法,而不是使用 IP 地址指定服务器。
在服务器机器中,用户可使用 ibv_devinfoibstat 命令输出 port_lid(或基础 lid)以及所要测试端口的端口 GUID(假设是上述接口的端口 1,则 port_lid/基础 LID2,而端口 GUID 是 0xf4521403007bcba1)。然后使用所需选项启动 ibping 捆绑至要测试的网卡和端口,同时还要指定 ibping 以服务器模式运行。使用 -? 或者 --help 选项即可查看 ibping 的所有可用选项,但在这个实例中可使用 -S--Server 选项,同时在绑定到具体网卡和端口时可使用 -C 或者 --Ca 以及 -P 或者 --Port 选项。注:这个实例中的端口不会指示端口号,但会在使用多端口网卡时指示物理端口号。要测试所使用 RDMA 结构的连接性,比如多端口网卡的第二端口,则需要让 ibping 捆绑至网卡的端口 2。使用单一端口网卡时不需要这个选项。例如:
~]$ ibping -S -C mlx4_1 -P 1
然后切换至客户端机器并运行 ibping。记录 ibping 程序所绑定端口的端口 GUID 或者 ibping 程序所绑定服务器端口的 本地标识符LID)。另外,还需要记录客户端机器中与服务器为所捆绑网卡和端口连接网络相同的网卡和端口。例如:如果服务器中第一网卡的第二端口所捆绑的网络是辅 RDMA 结构,那么就需要在客户端中指定一个也连接到第二结构的网卡和端口。完成配置后,请作为客户端运行 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
这个出错信息表示未安装所需用户空间库。管理员需要安装一个在 第 9.2 节 “与 InfiniBand 及 RDMA 相关的软件包” 小节中列出的用户空间库(根据其硬件要求)。这种情况极少发生,可能是因为用户为驱动程序或 libibverbs 安装了错误的架构类型。例如:如果 libibverbs 使用架构 x86_64,且安装了 libmlx4 而不是 i686 类型,则会得到出错信息。

注意

很多简单应用程序喜欢使用主机名或地址而不是 LID 打开服务器与客户端之间的通讯。在那些应用程序中需要在尝试测试端到端 RDMA 通讯前设置 IPoIB。ibping 应用程序通常不属于此列,它可以接受简单 LID 作为寻址方式,同时也使其成为解决 IPoIB 寻址测试可能出现问题的最简单测试方法,因此让我们能够从更独立的角度确定简单 RDMA 通讯是否可行。