[TOC]

基本概念

RDMA

Remote Direct Memory Access: 为了解决网络传输中服务器端数据处理的延迟而产生,通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,不需要用到多少计算机的处理功能。

IB

infiniband,是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连,以及存储系统之间的互连,它用到了RDMA技术。

IPoIB

Internet Protocol over InfiniBand,利用物理IB网络通过IP协议进行连接,并进行数据传输。性能稍低于rdma,但是比普通的千兆网要快很多。目前在集群nfs上测试,可以10Gb/s

安装infiniband

安装包

infiniband驱动模块是需要在所有infiniband节点安装。

驱动模块,以下软件包之一:

以下软件包之一:infinipath-psm
、libcxgb3、libcxgb4、libehca、libipathverbs、libmthca、libmlx4、libmlx5、libnes 及 libocrdma

libibverbs 提供InfiniBand Verbs API

yum install libibverbs
yum install rdma  #RDMA栈内核初始化
systemctl start rdma

opensm

opensm可以搭建管理子网络。

yum install opensm

测试工具

infiniband-diags 或 ibutils 为 InfiniBand 结构管理提供大量有用的调试工具。这些工具只 为 iWARP 或 RoCE 提供有限功能,因为大多数工具可在 InfiniBank 链接层工作,但无法在 Verbs API 层 使用。

qperf和perftest 用于各种 RDMA 通讯类型的性能测试应用程序。

------------------------------------
查看所有node的配置信息
------------------------------------
    iblinkinfo 
        CA: node5 mlx5_0:
              0x248a07030058f544      1    1[  ] ==( 4X      25.78125 Gbps Active/  LinkUp)==>      11   34[  ] "MF0;switch-ab29a6:MSB7700/U1" ( )
        CA: node6 mlx5_0:
              0x248a07030058f650      8    1[  ] ==( 4X      25.78125 Gbps Active/  LinkUp)==>      11   32[  ] "MF0;switch-ab29a6:MSB7700/U1" ( )
                  11   32[  ] ==( 4X      25.78125 Gbps Active/  LinkUp)==>       8    1[  ] "node6 mlx5_0" ( )
                  11   34[  ] ==( 4X      25.78125 Gbps Active/  LinkUp)==>       1    1[  ] "node5 mlx5_0" ( )

------------------------------------
ibping test RDMA
------------------------------------
    首先启动opensm服务
    然后查看每个node节点的infiniband信息 ibv_devinfo 或者 ibstat都行
    [root@master rdma]#ibv_devinfo && ibstat
        hca_id: mlx5_0
            transport:          InfiniBand (0)
            fw_ver:             12.17.1010
            node_guid:          248a:0703:0058:f504
            sys_image_guid:         248a:0703:0058:f504
            vendor_id:          0x02c9
            vendor_part_id:         4115
            hw_ver:             0x0
            board_id:           MT_2180110032
            phys_port_cnt:          1
                port:   1
                    state:          PORT_ACTIVE (4)
                    max_mtu:        4096 (5)
                    active_mtu:     4096 (5)
                    sm_lid:         2
                    port_lid:       2
                    port_lmc:       0x00
                    link_layer:     InfiniBand

        CA 'mlx5_0'
            CA type: MT4115
            Number of ports: 1
            Firmware version: 12.17.1010
            Hardware version: 0
            Node GUID: 0x248a07030058f504
            System image GUID: 0x248a07030058f504
            Port 1:
                State: Active
                Physical state: LinkUp
                Rate: 100
                Base lid: 2
                LMC: 0
                SM lid: 2
                Capability mask: 0x2659e84a
                Port GUID: 0x248a07030058f504
                Link layer: InfiniBand

    在服务端
        ibping -S -C mlx5_0 -P 1 -L 2
        ibping -S -C mlx5_0 -P 1 -G 0x248a07030058f504
        -S 以server启动
        -C 就是指明CA的名称
        -P 指明port
        -L 指明port_lid/Base lid
        -G 指明GUID

    在客户端
        ibping -c 10000 -f -C mlx5_0 -P 1 -L 2
        指明你要ping的服务端的 -C -P -G -L等
        结果如下:
        [root@node2 ~]#ibping -c 10000 -f -C mlx5_0 -P 1 -L 2

        --- master.(none) (Lid 2) ibping statistics ---
        10000 packets transmitted, 10000 received, 0% packet loss, time 1364 ms
        rtt min/avg/max = 0.034/0.136/0.849 ms

IPoIB

------------------------------------
IPoIB 配置
------------------------------------
#cat /etc/sysconfig/network-scripts/ifcfg-mlx5_ib0 
        # Generated by dracut initrd

        DEVICE=mlx5_ib0      #这里必须对应/etc/udev/rules.d/70-persistent-ipoib.rules 中的 NAME="mlx5_ib0"
        TYPE=InfiniBand      #这里必须是InfiniBand 
        ONBOOT=yes
        HARDWAR=80:00:00:66:fe:80:00:00:00:00:00:00:24:8a:07:03:00:58:f5:04
        BOOTPROTO=none
        IPADDR=172.16.20.10
        NETMASK=255.255.255.0
        BROADCAST=172.16.20.255
        NAME=mlx5_ib0        #这里对应ifconfig中的网卡名称
        MTU=65520            #设置连接模式最大MTU
        STARTMODE='auto'
        NM_CONTROLLED=no
        CONNECTED_MODE=yes   #设置连接模式

#ifup mlx5_ib0 

通过IPoIB配置nfs

    服务端:
        yum install nfs-utils
        modprobe svcrdma
        systemctl start nfs 
        echo rdma 20049 > /proc/fs/nfsd/portlist
        cat /proc/fs/nfsd/portlist
            rdma 20049
            udp 2049
            tcp 2049

    客户端:
        modprobe xprtrdma
        mount -o rdma,port=20049 172.16.20.10:/atlas /atlas
        cat /etc/fstab
            172.16.20.10:/atlas     /atlas  nfs     defaults        0 0
            /dev/sda1 /scratch  ext4 defaults 0 0

        mount | grep my_directory
            ...proto=rdma,port=20049,...