Menu Close
Settings Close

Language and Page Formatting Options

配置 InfiniBand 和 RDMA 网络

Red Hat Enterprise Linux 8

在 Red Hat Enterprise Linux 8 中配置 InfiniBand 和 RDMA 网络的指南

摘要

本文档描述了 InfiniBand 和远程直接访问(RDMA)是什么以及如何配置 InfiniBand 硬件。另外,本文档解释了如何配置与 InfiniBand 相关的服务。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。如需了解更多详细信息,请参阅 CTO Chris Wright 信息

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

根据具体内容提交评论

  1. 查看 Multi-page HTML 格式的文档,并确保在页面完全加载后看到右上角的 反馈 按钮。
  2. 使用光标突出显示您要评论的文本部分。
  3. 点击在高亮文本旁的 添加反馈 按钮。
  4. 添加您的反馈并点 Submit

通过 Bugzilla 提交反馈(需要帐户)

  1. 登录到 Bugzilla 网站。
  2. Version 菜单中选择正确的版本。
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您的建议以改进。包括文档相关部分的链接。
  5. Submit Bug

第 1 章 了解 InfiniBand 和 RDMA

InfiniBand 代表两个不同的因素:

  • InfiniBand 网络的物理链路协议
  • InfiniBand Verbs API,这是远程直接访问(RDMA)技术的实现

RDMA 提供两个计算机的主要内存访问,而无需涉及操作系统、缓存或存储。使用 RDMA,带有高吞吐量、低延迟和 CPU 使用率的数据传输。

在典型的 IP 数据传输中,当一个计算机上的应用程序向另一台机器上的应用程序发送数据时,接收终止时会出现以下操作:

  1. 内核必须接收数据。
  2. 内核必须确定该数据是否属于该应用程序。
  3. 内核唤醒应用程序。
  4. 内核会等待应用程序执行系统调用到内核。
  5. 应用程序将内核的内部内存空间中的数据复制到应用程序提供的缓冲中。

此过程意味着,如果主机适配器使用直接内存访问(DMA)或者至少两次,则大多数网络流量会被复制到系统的主内存中。另外,计算机执行一些上下文切换以在内核和应用程序间切换。这些上下文切换可能会导致 CPU 负载高,但会降低其他任务的速度。

与传统的 IP 通信不同,RDMA 通信会绕过通信过程中的内核干预。这可减少 CPU 开销。RDMA 协议可让主机适配器在数据包进入网络后决定应用程序应该接收的网络以及将其保存到应用程序的内存空间中。主机适配器不将处理发送到内核并将其复制到用户应用程序的内存中,主机适配器直接在应用程序缓冲中放置数据包内容。此过程需要单独的 API、InfiniBand Verbs API 和应用程序需要实施 InfiniBand Verbs API 来使用 RDMA。

Red Hat Enterprise Linux 支持 InfiniBand 硬件和 InfiniBand Verbs API。另外,它支持以下技术在非InfiniBand 硬件中使用 InfiniBand Verbs API:

  • 互联网区 RDMA 协议(iWARP):通过 IP 网络实现 RDMA 的网络协议
  • RDMA over Converged Ethernet(RoCE),也称为 InfiniBand over Ethernet(IBoE):实现通过以太网网络实施 RDMA 的网络协议

其它资源

第 2 章 配置 RoCE

本节介绍 RDMA over Converged Ethernet(RoCE)的背景信息,以及如何更改默认的 RoCE 版本。另外,如何配置软件 RoCE 适配器。

请注意,有不同的厂商,比如 Mellanox、Broadcom 和 QLogic 都提供 RoCE 硬件。

2.1. RoCE 协议版本概述

RoCE 是一种网络协议,可实现通过以太网的远程直接访问(RDMA)。

以下是不同的 RoCE 版本:

RoCE v1
RoCE 版本 1 协议是一个以太网链路层协议,带有 ethertype 0x8915,它允许同一以太网广播域中的任何两个主机间的通信。
RoCE v2
RoCE 版本 2 协议在 IPv4 或 IPv6 协议的 UDP 上存在。对于 RoCE v2,UDP 目标端口号为 4791

RDMA_CM 设置客户端和服务器之间用来传输数据的可靠连接。RDMA_CM 为建立连接提供了一个与 RDMA 传输相关的接口。这个通信使用特定的 RDMA 设备和基于消息的数据传输。

重要

不支持在客户端中使用 RoCE v2 的不同版本,并在服务器中使用 RoCE v1。在这种情况下,将服务器和客户端都配置为通过 RoCE v1 进行通信。

2.2. 临时更改默认 RoCE 版本

不支持在客户端和服务器上的 RoCE v1 使用 RoCE v2 协议。如果您的服务器中硬件只支持 RoCE v1,请将您的客户端配置为使用 RoCE v1 与服务器通信。这部分论述了如何在对 Mellanox ConnectX-5 Infiniband 设备使用 mlx5_0 驱动程序的客户端中强制实施 RoCE v1。

请注意,本节中描述的更改只在重启主机前临时进行。

先决条件

  • 客户端使用 RoCE v2 协议的 InfiniBand 设备
  • 服务器使用只支持 RoCE v1 的 InfiniBand 设备

流程

  1. 创建 /sys/kernel/config/rdma_cm/mlx5_0/ 目录:

    # mkdir /sys/kernel/config/rdma_cm/mlx5_0/
  2. 显示默认 RoCE 模式:

    # cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
    
    RoCE v2
  3. 将默认 RoCE 模式改为版本 1:

    # echo "IB/RoCE v1" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode

2.3. 配置 Soft-RoCE

Soft-RoCE 是 RDMA over Ethernet 的一个软件实现,它也称为 RXE。在没有 RoCE 主机频道适配器(HCA)的主机上使用 Soft-RoCE。

重要

Soft-RoCE 功能仅作为技术预览提供。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些预览可让用户早期访问将来的产品功能,让用户在开发过程中测试并提供反馈意见。

如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

先决条件

  • 已安装以太网适配器

流程

  1. 安装 iproutelibibverbslibibverbs-utilsinfiniband-diags 软件包:

    # yum install iproute libibverbs libibverbs-utils infiniband-diags
  2. 显示 RDMA 链接:

    # rdma link show
  3. 加载 rdma_rxe 内核模块,再添加名为 rxe 0 的新 rxe 设备,它使用 enp0s1 接口:

    # rdma link add rxe0 type rxe netdev enp1s0

验证

  1. 查看所有 RDMA 链接的状态:

    # rdma link show
    
    link rxe0/1 state ACTIVE physical_state LINK_UP netdev enp1s0
  2. 列出可用的 RDMA 设备:

    # ibv_devices
    
        device          	   node GUID
        ------          	----------------
        rxe0            	505400fffed5e0fb
  3. 您可以使用 ibstat 程序来显示详细状态:

    # ibstat rxe0
    
    CA 'rxe0'
    	CA type:
    	Number of ports: 1
    	Firmware version:
    	Hardware version:
    	Node GUID: 0x505400fffed5e0fb
    	System image GUID: 0x0000000000000000
    	Port 1:
    		State: Active
    		Physical state: LinkUp
    		Rate: 100
    		Base lid: 0
    		LMC: 0
    		SM lid: 0
    		Capability mask: 0x00890000
    		Port GUID: 0x505400fffed5e0fb
    		Link layer: Ethernet

第 3 章 Configuring Soft-iWARP

这部分解释了有关 iWARP、Soft-iWARP 和 配置 Soft-iWARP 的背景信息。

3.1. iWARP 和 Soft-iWARP 概述

远程直接内存访问(RDMA)使用互联网 Wide-area RDMA 协议(iWARP)并通过 TCP 进行融合和低延迟数据传输。使用标准以太网交换机和 TCP/IP 堆栈,iWARP 在 IP 子网之间路由流量。这提供了高效使用现有基础架构的灵活性。在 Red Hat Enterprise Linux 中,多个提供商在其硬件网络接口卡中实施 iWARP。例如: cxgb4irdmaqedr etc。

软硬件(siw)是基于软件的 iWARP 内核驱动程序和 Linux 程序库。它是一个基于软件的 RDMA 设备,在附加到网络接口卡时为 RDMA 硬件提供编程接口。它提供测试和验证 RDMA 环境的简便方法。

3.2. Configuring Soft-iWARP

软 IWARP(siw)通过 Linux TCP/IP 网络堆栈实施互联网 Wide-area RDMA 协议(iWARP)远程直接内存访问(RDMA)传输。它可让具有标准以太网适配器的系统与 iWARP 适配器或另一个系统互操作,运行 Soft-iWARP 驱动程序,或使用支持 iWARP 的硬件的主机进行互操作。

重要

Soft-iWARP 功能仅作为技术预览提供。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些预览可让用户早期访问将来的产品功能,让用户在开发过程中测试并提供反馈意见。

如需有关 技术预览功能支持范围 的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。

要配置 Soft-iWARP,您可以在脚本中使用这个步骤在系统引导时自动运行。

先决条件

  • 已安装以太网适配器

流程

  1. 安装 iproutelibibverbslibibverbs-utilsinfiniband-diags 软件包:

    # yum install iproute libibverbs libibverbs-utils infiniband-diags
  2. 显示 RDMA 链接:

    # rdma link show
  3. 加载 siw 内核模块:

    # modprobe siw
  4. 添加名为 siw 0 的新 siw 设备,它使用 enp0s1 接口:

    # rdma link add siw0 type siw netdev enp0s1

验证

  1. 查看所有 RDMA 链接的状态:

    # rdma link show
    
    link siw0/1 state ACTIVE physical_state LINK_UP netdev enp0s1
  2. 列出可用的 RDMA 设备:

    # ibv_devices
    
     device                 node GUID
     ------              ----------------
     siw0                0250b6fffea19d61
  3. 您可以使用 ibv_devinfo 工具显示详细的状态:

    # ibv_devinfo siw0
    
        hca_id:               siw0
        transport:            iWARP (1)
        fw_ver:               0.0.0
        node_guid:            0250:b6ff:fea1:9d61
        sys_image_guid:       0250:b6ff:fea1:9d61
        vendor_id:            0x626d74
        vendor_part_id:       1
        hw_ver:               0x0
        phys_port_cnt:          1
            port:               1
                state:          PORT_ACTIVE (4)
                max_mtu:        1024 (3)
                active_mtu:     1024 (3)
                sm_lid:         0
                port_lid:       0
                port_lmc:       0x00
                link_layer:     Ethernet

第 4 章 配置核心 RDMA 子系统

这部分论述了如何配置 rdma 服务,以及增加允许用户在系统中固定的内存量。

4.1. 重命名 IPoIB 设备

默认情况下,内核通过 InfiniBand(IPoIB)设备命名互联网协议,如 ib 0、ib1 等等。为了避免冲突,红帽建议在 udev 设备管理器中创建一个规则来创建持久且有意义的名称,如 mlx4_ib0

先决条件

  • 已安装 InfiniBand 设备

流程

  1. 显示设备 ib0 的硬件地址:

    # ip link show ib0
    8: ib0: >BROADCAST,MULTICAST,UP,LOWER_UP< mtu 65520 qdisc pfifo_fast state UP mode DEFAULT qlen 256
        link/infiniband 80:00:02:00:fe:80:00:00:00:00:00:00:00:02:c9:03:00:31:78:f2 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff

    地址的最后八字节需要在下一步中创建 udev 规则。

  2. 要配置使用 00:02:c9:03:00:31:78:f2 硬件地址重命名为 mlx4_ib0 的规则,请编辑 /etc/udev/rules.d/70-persistent-ipoib.rules 文件并添加 ACTION 规则:

    ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="32", ATTR{address}=="?*00:02:c9:03:00:31:78:f2", NAME="mlx4_ib0"
  3. 重启主机:

    # reboot

其它资源

4.2. 增加用户被允许在系统中的内存量

远程直接内存访问(RDMA)操作需要固定物理内存。因此,内核不允许将内存写入 swap 空间。如果用户固定太多内存,系统会耗尽内存,内核会终止进程来释放更多内存。因此,内存固定是一个特权操作。

如果非 root 用户运行大型 RDMA 应用程序,则需要增加这些用户可在系统中的内存量。这部分论述了如何为 rdma 组配置无限内存。

流程

  • root 用户身份,使用以下内容创建文件 /etc/security/limits.conf

    @rdma soft memlock unlimited
    @rdma hard memlock unlimited

验证

  1. 编辑 /etc/security/limits.conf 文件后,作为 rdma 组的成员登录。

    请注意,当用户登录时,Red Hat Enterprise Linux 会应用更新的 ulimit 设置。

  2. 使用 ulimit -l 命令显示限制:

    $ ulimit -l
    unlimited

    如果命令返回 unlimited,用户可以获得无限数量的内存。

其它资源

  • limits.conf(5) 手册页

4.3. 配置 rdma 服务

rdma 服务在内核中管理堆栈。如果 Red Hat Enterprise Linux 检测到 InfiniBand、iWARP 或 RoCE 设备和配置文件位于 /etc/rdma/modules/*,则 udev 设备管理器指示 systemd 启动 rdma 服务。默认情况下,/etc/rdma/modules/rdma.conf 配置并加载这些服务。

流程

  1. 编辑 /etc/rdma/modules/rdma.conf 文件,并将您要启用的 变量设置为 yes

    # Load IPoIB
    IPOIB_LOAD=yes
    # Load SRP (SCSI Remote Protocol initiator support) module
    SRP_LOAD=yes
    # Load SRPT (SCSI Remote Protocol target support) module
    SRPT_LOAD=yes
    # Load iSER (iSCSI over RDMA initiator support) module
    ISER_LOAD=yes
    # Load iSERT (iSCSI over RDMA target support) module
    ISERT_LOAD=yes
    # Load RDS (Reliable Datagram Service) network protocol
    RDS_LOAD=no
    # Load NFSoRDMA client transport module
    XPRTRDMA_LOAD=yes
    # Load NFSoRDMA server transport module
    SVCRDMA_LOAD=no
    # Load Tech Preview device driver modules
    TECH_PREVIEW_LOAD=no
  2. 重启 rdma 服务:

    # systemctl restart rdma

4.4. 启用通过 RDMA(NFSoRDMA) 的 NFS

远程直接内存访问(RDMA)服务在 Red Hat Enterprise Linux 8 中启用了 RDMA 的硬件自动工作。

流程

  1. 安装 rdma-core 软件包:

    # yum install rdma-core
  2. /etc/rdma/modules/rdma 文件中验证带有 xprtrdmasvcrdma 的行已注释掉:

    # NFS over RDMA client support
    xprtrdma
    # NFS over RDMA server support
    svcrdma
  3. 在 NFS 服务器中,创建目录 /mnt/nfsordma 并将其导出到 /etc/exports

    # mkdir /mnt/nfsordma
    # echo "/mnt/nfsordma *(fsid=0,rw,async,insecure,no_root_squash)" >> /etc/exports
  4. 在 NFS 客户端上,使用服务器 IP 地址挂载 nfs-share,例如 172.31.0.186

    # mount -o rdma,port=20049 172.31.0.186:/mnt/nfs-share /mnt/nfs
  5. 重启 nfs-server 服务:

    # systemctl restart nfs-server

其它资源

第 5 章 配置 InfiniBand 子网管理器

所有 InfiniBand 网络都必须运行子网管理器才能正常工作。即使两台机器没有使用交换机直接进行连接,也是如此。

有可能有一个以上的子网管理器。在这种情况下,一个 master 充当一个主子网管理器,另一个子网管理器充当从属子网管理器,当主子网管理器出现故障时将接管。

大多数 InfiniBand 交换机都包含一个嵌入式子网管理器。但是,如果您需要更新的子网管理器,或者您需要更多控制,请使用 Red Hat Enterprise Linux 提供的 OpenSM 子网管理器。

5.1. 安装 OpenSM 子网管理器

本节论述了如何安装 OpenSM 子网管理器。

流程

  1. 安装 opensm 软件包:

    # yum install opensm
  2. 如果默认安装与您的环境不匹配,请配置 OpenSM。

    当只有一个 InfiniBand 端口时,主机充当不需要任何自定义更改的 master 子网管理器。默认配置可在没有任何修改的情况下正常工作。

  3. 启用并启动 opensm 服务:

    # systemctl enable --now opensm

其它资源

  • OpenSM(8) man page

5.2. 使用简单方法配置 OpenSM

这部分论述了如何在没有自定义设置的情况下配置 OpenSM。

先决条件

  • 服务器上安装了一个或多个 InfiniBand 端口

流程

  1. 使用 ibstat 程序获取端口的 GUID:

    # ibstat -d mlx4_0
    
    CA 'mlx4_0'
       CA type: MT4099
       Number of ports: 2
       Firmware version: 2.42.5000
       Hardware version: 1
       Node GUID: 0xf4521403007be130
       System image GUID: 0xf4521403007be133
       Port 1:
          State: Active
          Physical state: LinkUp
          Rate: 56
          Base lid: 3
          LMC: 0
          SM lid: 1
          Capability mask: 0x02594868
          Port GUID: 0xf4521403007be131
          Link layer: InfiniBand
       Port 2:
          State: Down
          Physical state: Disabled
          Rate: 10
          Base lid: 0
          LMC: 0
          SM lid: 0
          Capability mask: 0x04010000
          Port GUID: 0xf65214fffe7be132
          Link layer: Ethernet
    注意

    有些 InfiniBand 适配器在节点、系统和端口中使用相同的 GUID。

  2. 编辑 /etc/sysconfig/opensm 文件并在 GUIDS 参数中设置 GUID:

    GUIDS="GUID_1 GUID_2"
  3. 如果子网中有多个子网管理器,您可以设置 PRIORITY 参数。例如:

    PRIORITY=15

其它资源

  • /etc/sysconfig/opensm

5.3. 通过编辑 opensm.conf 文件配置 OpenSM

这部分论述了如何通过编辑 /etc/rdma/opensm.conf 文件来配置 OpenSM。如果只有一个 InfiniBand 端口可用,则使用此方法自定义 OpenSM 配置。

先决条件

  • 服务器上只安装一个 InfiniBand 端口

流程

  1. 编辑 /etc/rdma/opensm.conf 文件并自定义设置以匹配您的环境。

    更新 opensm 软件包后,yum 程序会覆盖 /etc/rdma/opensm.conf,并创建一个副本,它是新的 OpenSM 配置文件 /etc/rdma/opensm.conf.rpmnew。因此,您可以比较之前的 和新文件,以识别更改并将其手动合并到 file opensm.conf 中。

  2. 重启 opensm 服务:

    # systemctl restart opensm

5.4. 配置多个 OpenSM 实例

这部分论述了如何设置多个 OpenSM 实例。

先决条件

  • 服务器上安装了一个或多个 InfiniBand 端口

流程

  1. /etc/rdma/opensm.conf 文件复制到 /etc/rdma/opensm.conf.orig 文件中:

    # cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.orig

    当您安装更新的 opensm 软件包时,yum 实用程序会覆盖 /etc/rdma/opensm.conf。与上一步中创建的副本进行比较,比较前面的 和新文件,以识别更改并在实例特定的 opensm.conf 文件中手动纳入它们。

  2. 创建 /etc/rdma/opensm.conf 文件的副本:

    # cp /etc/rdma/opensm.conf /etc/rdma/opensm.conf.1

    对于您创建的每个实例,请在配置文件的副本中附加一个唯一和连续的数字。

    更新 opensm 软件包后,yum 实用程序会将新的 OpenSM 配置文件存储为 /etc/rdma/opensm.conf.rpmnew。将此文件与您自定义的 /etc/rdma/opensm.conf.\* 文件进行比较,并手动纳入这些更改。

  3. 编辑您在上一步中创建的副本,并自定义实例的设置以匹配您的环境。例如,设置 guidsubnet_prefixlogdir 参数。
  4. 另外,还可在该子网 partitions.conf 中生成具有唯一名称的文件,并在该文件对应的副本中的 partition_config_file 参数中引用 opensm.conf 文件。
  5. 对您要创建的每个实例重复前面的步骤。
  6. 启动 opensm 服务:

    # systemctl start opensm

    opensm 服务会自动为 /etc/rdma/ 目录中的每个 opensm.conf.* 文件启动一个唯一的实例。如果存在多个 opensm.conf.* 文件,该服务会忽略 /etc/sysconfig/opensm 文件中的设置,以及在基础 /etc/rdma/opensm.conf 文件中。

5.5. 创建分区配置

分区使管理员能够在 InfiniBand 上创建与以太网 VLAN 类似的子网。

重要

如果您使用特定速度(如 40 Gbps)定义分区,这个分区中的所有主机必须至少支持这个速度。如果主机没有满足速度要求,则无法加入分区。因此,将分区的速度设置为有权加入分区的任何主机支持的最低速度。

先决条件

  • 服务器上安装了一个或多个 InfiniBand 端口

流程

  1. 编辑 /etc/rdma/partitions.conf 文件,以配置分区,如下所示:

    注意

    所有光纤必须包含 0x7fff 分区,所有交换机和所有主机都必须属于那个光纤。

    将以下内容添加到 文件中,以减小速度 10 Gbps 和分区 0x0002 创建 0x7fff 默认分区,其速度为 40 Gbps:

    # For reference:
    # IPv4 IANA reserved multicast addresses:
    #   http://www.iana.org/assignments/multicast-addresses/multicast-addresses.txt
    # IPv6 IANA reserved multicast addresses:
    #   http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xml
    #
    # mtu =
    #   1 = 256
    #   2 = 512
    #   3 = 1024
    #   4 = 2048
    #   5 = 4096
    #
    # rate =
    #   2  = 2.5 GBit/s
    #   3  = 10   GBit/s
    #   4  = 30   GBit/s
    #   5  = 5   GBit/s
    #   6  = 20   GBit/s
    #   7  = 40   GBit/s
    #   8  = 60   GBit/s
    #   9  = 80   GBit/s
    #   10 = 120   GBit/s
    
    Default=0x7fff, rate=3, mtu=4, scope=2, defmember=full:
        ALL, ALL_SWITCHES=full;
    Default=0x7fff, ipoib, rate=3, mtu=4, scope=2:
        mgid=ff12:401b::ffff:ffff   # IPv4 Broadcast address
        mgid=ff12:401b::1           # IPv4 All Hosts group
        mgid=ff12:401b::2           # IPv4 All Routers group
        mgid=ff12:401b::16          # IPv4 IGMP group
        mgid=ff12:401b::fb          # IPv4 mDNS group
        mgid=ff12:401b::fc          # IPv4 Multicast Link Local Name Resolution group
        mgid=ff12:401b::101         # IPv4 NTP group
        mgid=ff12:401b::202         # IPv4 Sun RPC
        mgid=ff12:601b::1           # IPv6 All Hosts group
        mgid=ff12:601b::2           # IPv6 All Routers group
        mgid=ff12:601b::16          # IPv6 MLDv2-capable Routers group
        mgid=ff12:601b::fb          # IPv6 mDNS group
        mgid=ff12:601b::101         # IPv6 NTP group
        mgid=ff12:601b::202         # IPv6 Sun RPC group
        mgid=ff12:601b::1:3         # IPv6 Multicast Link Local Name Resolution group
        ALL=full, ALL_SWITCHES=full;
    
    ib0_2=0x0002, rate=7, mtu=4, scope=2, defmember=full:
            ALL, ALL_SWITCHES=full;
    ib0_2=0x0002, ipoib, rate=7, mtu=4, scope=2:
        mgid=ff12:401b::ffff:ffff   # IPv4 Broadcast address
        mgid=ff12:401b::1           # IPv4 All Hosts group
        mgid=ff12:401b::2           # IPv4 All Routers group
        mgid=ff12:401b::16          # IPv4 IGMP group
        mgid=ff12:401b::fb          # IPv4 mDNS group
        mgid=ff12:401b::fc          # IPv4 Multicast Link Local Name Resolution group
        mgid=ff12:401b::101         # IPv4 NTP group
        mgid=ff12:401b::202         # IPv4 Sun RPC
        mgid=ff12:601b::1           # IPv6 All Hosts group
        mgid=ff12:601b::2           # IPv6 All Routers group
        mgid=ff12:601b::16          # IPv6 MLDv2-capable Routers group
        mgid=ff12:601b::fb          # IPv6 mDNS group
        mgid=ff12:601b::101         # IPv6 NTP group
        mgid=ff12:601b::202         # IPv6 Sun RPC group
        mgid=ff12:601b::1:3         # IPv6 Multicast Link Local Name Resolution group
        ALL=full, ALL_SWITCHES=full;

第 6 章 配置 IPoIB

默认情况下,InfiniBand 不使用 IP 进行通信。但是,IP over InfiniBand(IPoIB)在 InfiniBand 远程直接访问(RDMA)网络之上提供一个 IP 网络模拟层。这允许现有未经修改的应用程序通过 InfiniBand 网络传输数据,但性能低于应用程序原生使用 RDMA 时的数据。

注意

在 RHEL 8 及更高版本上,Mellanox 设备从 ConnectX-4 及以上启动,默认使用增强 IPoIB 模式(仅数据Gram)。这些设备不支持连接的模式。

6.1. IPoIB 通讯模式

IPoIB 设备可在 DatagramConnected 模式中配置。区别在于 IPoIB 层试图在通信的另一端机器打开的队列对类型:

  • Datagram 模式中,系统会打开一个不可靠、断开连接的队列对。

    这个模式不支持大于 InfiniBand 链路层的最大传输单元(MTU)的软件包。在传输数据时,IPoIB 层在 IP 数据包之上添加了一个 4 字节 IPoIB 标头。因此,IPoIB MTU 比 InfiniBand link-layer MTU 小 4 字节。因为 2048 是一个常见的 InfiniBand 链路层 MTU,Datagram 模式中的通用 IPoIB 设备 MTU 为 2044

  • Connected 模式中,系统会打开一个可靠、连接的队列对。

    这个模式允许消息大于 InfiniBand link-layer MTU。主机适配器处理数据包分段和重新装配。因此,在 Connected 模式中,从 Infiniband 适配器发送的消息没有大小限制。但是,由于 data 字段和 TCP/IP 标头字段 导致 IP 数据包有限。因此,Connected 模式中的 IPoIB MTU 是 65520 字节。

    连接 模式的性能更高,但会消耗更多内核内存。

虽然将系统配置为使用连接模式,但系统仍然使用 Datagram 模式发送多播流量,因为 InfiniBand 交换机和光纤无法在 连接 模式中传递多播流量。另外,当主机没有配置为使用 连接 模式时,系统会返回 Datagram 模式。

在运行应用程序时,将多播数据发送到接口中的 MTU 时,使用 Datagram 模式配置接口,或将应用配置为以以数据报报数据包中的发送大小上限。

6.2. 了解 IPoIB 硬件地址

ipoIB 设备有 20 字节硬件地址,它由以下部分组成:

  • 前 4 字节是标志和队列对号
  • 下一个 8 字节是子网前缀

    默认子网前缀为 0xfe:80:00:00:00:00:00:00。设备连接到子网管理器后,设备会更改此前缀以匹配配置的子网管理器。

  • 最后一个 8 字节是 InfiniBand 端口的全球唯一标识符(GUID),附加到 IPoIB 设备
注意

因为前 12 字节可以改变,请不要在 udev 设备管理器规则中使用它们。

6.3. 使用 nmcli 命令配置 IPoIB 连接

nmcli 命令行工具控制 NetworkManager 并使用 CLI 报告网络状态。

先决条件

  • 在服务器上安装 InfiniBand 设备
  • 加载对应的内核模块

流程

  1. 创建 InfiniBand 连接,在 Connected 传输模式中使用 mlx4_ib0 接口,以及最大 MTU 65520 字节:

    # nmcli connection add type infiniband con-name mlx4_ib0 ifname mlx4_ib0 transport-mode Connected mtu 65520
  2. 您还可以将 0x8002 设置为 mlx4_ib0 连接的 P_Key 接口:

    # nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002
  3. 要配置 IPv4 设置,设置 mlx4_ib0 连接的静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器:

    # nmcli connection modify mlx4_ib0 ipv4.addresses 192.0.2.1/24
    # nmcli connection modify mlx4_ib0 ipv4.gateway 192.0.2.254
    # nmcli connection modify mlx4_ib0 ipv4.dns 192.0.2.253
    # nmcli connection modify mlx4_ib0 ipv4.method manual
  4. 要配置 IPv6 设置,设置 mlx4_ib0 连接的静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器:

    # nmcli connection modify mlx4_ib0 ipv6.addresses 2001:db8:1::1/32
    # nmcli connection modify mlx4_ib0 ipv6.gateway 2001:db8:1::fffe
    # nmcli connection modify mlx4_ib0 ipv6.dns 2001:db8:1::fffd
    # nmcli connection modify mlx4_ib0 ipv6.method manual
  5. 激活 mlx4_ib0 连接:

    # nmcli connection up mlx4_ib0

6.4. 使用 nm-connection-editor 配置 IPoIB 连接

nmcli-connection-editor 应用程序使用 GUI 配置和管理 NetworkManager 存储的网络连接。

先决条件

  • 在服务器上安装 InfiniBand 设备
  • 加载相应的内核模块
  • 已安装 nm-connection-editor 软件包

流程

  1. 输入命令:

    $ nm-connection-editor
  2. + 按钮添加新连接。
  3. 选择 InfiniBand 连接类型并点 Create
  4. InfiniBand 标签页中:

    1. 如果您想更改连接名称。
    2. 选择传输模式。
    3. 选该设备。
    4. 如果需要,设置 MTU。
  5. IPv4 Settings 选项卡上,配置 IPv4 设置。例如,设置静态 IPv4 地址、网络掩码、默认网关和 DNS 服务器: infiniband IPv4 settings nm connection editor
  6. IPv6 Settings 选项卡上,配置 IPv6 设置。例如,设置静态 IPv6 地址、网络掩码、默认网关和 DNS 服务器: infiniband IPv6 settings nm connection editor
  7. Save 保存 team 连接。
  8. 关闭 nm-connection-editor
  9. 您可以设置 P_Key 接口。因为 nm-connection-editor 中没有此设置,所以您必须在命令行中设置此参数。

    例如,将 mlx4_ib0 连接的 0x8002 设置为 P_Key 接口:

    # nmcli connection modify mlx4_ib0 infiniband.p-key 0x8002

第 7 章 测试 InfiniBand 网络

本节提供测试 InfiniBand 网络的步骤。

7.1. 测试早期 InfiniBand RDMA 操作

这部分论述了如何测试 InfiniBand 远程直接访问(RDMA)操作。

注意

这部分只适用于 InfiniBand 设备。如果您使用基于 IP 的设备,比如互联网 Wide-area Remote Protocol(iWARP)或 RDMA over Converged Ethernet(RoCE)或 InfiniBand over Ethernet(IBoE)设备,请参阅:

先决条件

  • 配置了 rdma 服务
  • 安装了 libibverbs-utilsinfiniband-diags 软件包

流程

  1. 列出可用的 InfiniBand 设备:

    # ibv_devices
    
        device                 node GUID
        ------              ----------------
        mlx4_0              0002c903003178f0
        mlx4_1              f4521403007bcba0
  2. 显示 mlx4_1 设备的信息:

    # 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
  3. 显示 mlx4_1 设备的状态:

    # 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
  4. ibping 程序 ping InfiniBand 地址,并作为客户端/服务器运行。

    1. 要在主机上启动服务器模式,在端口号 -P 上使用 -S InfiniBand 证书颁发机构(CA)名称:

      # ibping -S -C mlx4_1 -P 1
    2. 要在另一个主机上启动客户端模式,请使用 - L Local Identifier(LID)名称在端口号 -P 上发送一些数据包:

      # ibping -c 50 -C mlx4_0 -P 1 -L 2

其它资源

  • ibping(8) 手册页

7.2. 使用 ping 程序测试 IPoIB

在为 InfiniBand(IPoIB)配置了 IP 后,使用 ping 程序发送 ICMP 数据包来测试 IPoIB 连接。

先决条件

  • 两个 RDMA 主机在带有 RDMA 端口的同一个 InfiniBand 光纤中连接
  • 两个主机中的 IPoIB 接口使用同一子网中的 IP 地址配置

流程

  • 使用 ping 程序将五个 ICMP 数据包发送到远程主机的 InfiniBand 适配器:

    # ping -c5 192.0.2.1

7.3. 配置 IPoIB 后使用 qperf 测试 RDMA 网络

qperf 程序根据带宽、延迟和 CPU 使用率来测量两个节点间的 RDMA 和 IP 性能。

先决条件

  • qperf 软件包在两个主机上安装
  • ipoIB 在两个主机上配置

流程

  1. 在没有选项作为服务器的主机上启动 qperf

    # qperf
  2. 在客户端中运行以下命令。命令使用客户端中 mlx4_0 主机频道适配器的端口 1 连接到服务器中分配给 InfiniBand 适配器的 IP 地址 192.0.2.1

    1. 显示配置:

      # qperf -v -i mlx4_0:1 192.0.2.1 conf
      
      conf:
          loc_node   =  rdma-dev-01.lab.bos.redhat.com
          loc_cpu    =  12 Cores: Mixed CPUs
          loc_os     =  Linux 4.18.0-187.el8.x86_64
          loc_qperf  =  0.4.11
          rem_node   =  rdma-dev-00.lab.bos.redhat.com
          rem_cpu    =  12 Cores: Mixed CPUs
          rem_os     =  Linux 4.18.0-187.el8.x86_64
          rem_qperf  =  0.4.11
    2. 显示可重用连接(RC)会流传输双向带宽:

      # qperf -v -i mlx4_0:1 192.0.2.1 rc_bi_bw
      
      rc_bi_bw:
          bw             =  10.7 GB/sec
          msg_rate       =   163 K/sec
          loc_id         =  mlx4_0
          rem_id         =  mlx4_0:1
          loc_cpus_used  =    65 % cpus
          rem_cpus_used  =    62 % cpus
    3. 显示 RC 流的单向带宽:

      # qperf -v -i mlx4_0:1 192.0.2.1 rc_bw
      
      rc_bw:
          bw              =  6.19 GB/sec
          msg_rate        =  94.4 K/sec
          loc_id          =  mlx4_0
          rem_id          =  mlx4_0:1
          send_cost       =  63.5 ms/GB
          recv_cost       =    63 ms/GB
          send_cpus_used  =  39.5 % cpus
          recv_cpus_used  =    39 % cpus

其它资源

  • qperf(1) man page