26.3. 配置 IPoIB


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

注意

在 RHEL 8 和更新的版本中,从 ConnectX-4 开始的 Mellanox 设备默认使用增强 IPoIB 模式(仅数据报)。在这些设备中不支持连接模式。

26.3.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 header 字段,存在一个 IP 数据包限制。因此,Connected 模式中的 IPoIB MTU 是 65520 字节。

    Connected 模式性能更高,但是消耗更多内核内存。

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

在运行在接口上发送最多 MTU 的多播数据的应用程序时,在 Datagram 模式下配置接口,或者将应用程序配置为限制适合数据报大小的数据包的发送大小。

26.3.2. 了解 IPoIB 硬件地址

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

  • 前 4 个字节是标志和队列对号。
  • 接下来的 8 个字节是子网前缀

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

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

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

26.3.4. 使用 nmcli 配置 IPoIB 连接

您可以在命令行上使用 nmcli 工具创建一个 IP over InfiniBand 连接。

先决条件

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

流程

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

    # nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
    Copy to Clipboard Toggle word wrap
  2. 设置 P_Key,例如:

    # nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
    Copy to Clipboard Toggle word wrap
  3. 配置 IPv4 设置:

    • 要使用 DHCP,请输入:

      # nmcli connection modify mlx5_ib0 ipv4.method auto
      Copy to Clipboard Toggle word wrap

      如果 ipv4.method 已设置为 auto(默认),请跳过这一步。

    • 要设置静态 IPv4 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入:

      # nmcli connection modify mlx5_ib0 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
      Copy to Clipboard Toggle word wrap
  4. 配置 IPv6 设置:

    • 要使用无状态地址自动配置(SLAAC),请输入:

      # nmcli connection modify mlx5_ib0 ipv6.method auto
      Copy to Clipboard Toggle word wrap

      如果 ipv6.method 已设置为 auto(默认),请跳过这一步。

    • 要设置静态 IPv6 地址、网络掩码、默认网关、DNS 服务器和搜索域,请输入:

      # nmcli connection modify mlx5_ib0 ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
      Copy to Clipboard Toggle word wrap
  5. 要在配置文件中自定义其他设置,请使用以下命令:

    # nmcli connection modify mlx5_ib0 <setting> <value>
    Copy to Clipboard Toggle word wrap

    用空格或分号将值括起来。

  6. 激活配置文件:

    # nmcli connection up mlx5_ib0
    Copy to Clipboard Toggle word wrap

验证

  • 使用 ping 工具将 ICMP 数据包发送到远程主机的 InfiniBand 适配器,例如:

    # ping -c5 192.0.2.2
    Copy to Clipboard Toggle word wrap

26.3.5. 使用 network RHEL 系统角色配置 IPoIB 连接

您可以使用 IP over InfiniBand (IPoIB),通过 InfiniBand 接口发送 IP 数据包。要配置 IPoIB,请创建一个 NetworkManager 连接配置文件。通过使用 Ansible 和 network 系统角色,您可以自动化此过程,并对 playbook 中定义的主机远程配置连接配置文件。

您可以使用 network RHEL 系统角色配置 IPoIB,如果 InfiniBand 的父设备的连接配置文件不存在,角色也可以创建它。

先决条件

  • 您已准备好控制节点和受管节点
  • 以可在受管主机上运行 playbook 的用户登录到控制节点。
  • 您用于连接到受管节点的帐户对它们具有 sudo 权限。
  • 一个名为 mlx5_ib0 的 InfiniBand 设备已安装在受管节点上。
  • 受管节点使用 NetworkManager 配置网络。

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configure the network
      hosts: managed-node-01.example.com
      tasks:
        - name: IPoIB connection profile with static IP address settings
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.network
          vars:
            network_connections:
              # InfiniBand connection mlx5_ib0
              - name: mlx5_ib0
                interface_name: mlx5_ib0
                type: infiniband
    
              # IPoIB device mlx5_ib0.8002 on top of mlx5_ib0
              - name: mlx5_ib0.8002
                type: infiniband
                autoconnect: yes
                infiniband:
                  p_key: 0x8002
                  transport_mode: datagram
                parent: mlx5_ib0
                ip:
                  address:
                    - 192.0.2.1/24
                    - 2001:db8:1::1/64
                state: up
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括如下:

    type: <profile_type>
    设置要创建的配置文件的类型。示例 playbook 创建两个连接配置文件:一个用于 InfiniBand 连接,一个用于 IPoIB 设备。
    parent: <parent_device>
    设置 IPoIB 连接配置文件的父设备。
    p_key: <value>
    设置 InfiniBand 分区密钥。如果您设置了此变量,请不要在 IPoIB 设备上设置 interface_name
    transport_mode: <mode>
    设置 IPoIB 连接操作模式。您可以将此变量设置为 datagram(默认)或 connected

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  1. 显示 mlx5_ib0.8002 设备的 IP 设置:

    # ansible managed-node-01.example.com -m command -a 'ip address show mlx5_ib0.8002'
    managed-node-01.example.com | CHANGED | rc=0 >>
    ...
    inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute ib0.8002
       valid_lft forever preferred_lft forever
    inet6 2001:db8:1::1/64 scope link tentative noprefixroute
       valid_lft forever preferred_lft forever
    Copy to Clipboard Toggle word wrap
  2. 显示 mlx5_ib0.8002 设备的分区密钥(P_Key):

    # ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/pkey'
    managed-node-01.example.com | CHANGED | rc=0 >>
    0x8002
    Copy to Clipboard Toggle word wrap
  3. 显示 mlx5_ib0.8002 设备的模式:

    # ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/mode'
    managed-node-01.example.com | CHANGED | rc=0 >>
    datagram
    Copy to Clipboard Toggle word wrap

26.3.6. 使用 nmstatectl 配置 IPoIB 连接

您可以使用 nmstatectl 工具,通过 Nmstate API 配置一个 IP over InfiniBand (IPoIB)连接。Nmstate API 确保设置配置后结果与配置文件匹配。如果有任何失败,nmstatectl 会自动回滚更改以避免系统处于不正确的状态。

先决条件

  • InfiniBand 设备已安装在服务器上。
  • 用于 InfiniBand 设备的内核模块已加载。

流程

  1. 创建一个包含以下内容的 YAML 文件,如 ~/create-IPoIB-profile.yml

    interfaces:
    - name: mlx5_ib0.8002
      type: infiniband
      state: up
      ipv4:
        enabled: true
        address:
        - ip: 192.0.2.1
          prefix-length: 24
        dhcp: false
      ipv6:
        enabled: true
        address:
        - ip: 2001:db8:1::1
          prefix-length: 64
        autoconf: false
        dhcp: false
      infiniband:
        base-iface: "mlx5_ib0"
        mode: datagram
        pkey: "0x8002"
    
    routes:
      config:
      - destination: 0.0.0.0/0
        next-hop-address: 192.0.2.254
        next-hop-interface: mlx5_ib0.8002
      - destination: ::/0
        next-hop-address: 2001:db8:1::fffe
        next-hop-interface: mlx5_ib0.8002
    Copy to Clipboard Toggle word wrap

    IPoIB 连接现在具有以下设置:

    • IPOIB 设备名称:mlx5_ib0.8002
    • 基本接口(父):mlx5_ib0
    • InfiniBand 分区密钥: 0x8002
    • 传输模式:datagram
    • 静态 IPv4 地址:192.0.2.1,子网掩码为 /24
    • 静态 IPv6 地址:2001:db8:1::1 ,子网掩码为 /64
    • IPv4 默认网关:192.0.2.254
    • IPv6 默认网关:2001:db8:1::fffe
  2. 将设置应用到系统:

    # nmstatectl apply ~/create-IPoIB-profile.yml
    Copy to Clipboard Toggle word wrap

验证

  1. 显示 mlx5_ib0.8002 设备的 IP 设置:

    # ip address show mlx5_ib0.8002
    ...
    inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute ib0.8002
       valid_lft forever preferred_lft forever
    inet6 2001:db8:1::1/64 scope link tentative noprefixroute
       valid_lft forever preferred_lft forever
    Copy to Clipboard Toggle word wrap
  2. 显示 mlx5_ib0.8002 设备的分区密钥(P_Key):

    # cat /sys/class/net/mlx5_ib0.8002/pkey
    0x8002
    Copy to Clipboard Toggle word wrap
  3. 显示 mlx5_ib0.8002 设备的模式:

    # cat /sys/class/net/mlx5_ib0.8002/mode
    datagram
    Copy to Clipboard Toggle word wrap

26.3.7. 配置 IPoIB 后,使用 iperf3 测试 RDMA 网络

在以下示例中,大型缓冲区大小用于执行 60 秒测试,以测量最大吞吐量,并使用 iperf3 工具充分利用两台主机之间的带宽和延迟。

先决条件

  • 您已在两个主机上配置了 IPoIB。

流程

  1. 要在系统中运行 iperf3 作为服务器,定义一个时间间隔,以提供定期带宽更新 -i 以侦听,作为一个服务器 -s,等待客户端连接的响应:

    # iperf3 -i 5 -s
    Copy to Clipboard Toggle word wrap
  2. 要作为客户端在另一个系统上运行 iperf3,请定义一个间隔,提供定期带宽更新 -i 连接到侦听的服务器 -c 连接到 IP 地址 192.168.2.2-t 秒(以秒为单位):

    # iperf3 -i 5 -t 60 -c 192.168.2.2
    Copy to Clipboard Toggle word wrap
  3. 使用以下命令:

    1. 在作为服务器的系统中显示测试结果:

      # iperf3 -i 10 -s
      -----------------------------------------------------------
      Server listening on 5201
      -----------------------------------------------------------
      Accepted connection from 192.168.2.3, port 22216
      [5] local 192.168.2.2 port 5201 connected to 192.168.2.3 port 22218
      [ID] Interval           Transfer     Bandwidth
      [5]   0.00-10.00  sec  17.5 GBytes  15.0 Gbits/sec
      [5]  10.00-20.00  sec  17.6 GBytes  15.2 Gbits/sec
      [5]  20.00-30.00  sec  18.4 GBytes  15.8 Gbits/sec
      [5]  30.00-40.00  sec  18.0 GBytes  15.5 Gbits/sec
      [5]  40.00-50.00  sec  17.5 GBytes  15.1 Gbits/sec
      [5]  50.00-60.00  sec  18.1 GBytes  15.5 Gbits/sec
      [5]  60.00-60.04  sec  82.2 MBytes  17.3 Gbits/sec
      - - - - - - - - - - - - - - - - - - - - - - - - -
      [ID] Interval           Transfer     Bandwidth
      [5]   0.00-60.04  sec  0.00 Bytes    0.00 bits/sec  sender
      [5]   0.00-60.04  sec   107 GBytes  15.3 Gbits/sec  receiver
      Copy to Clipboard Toggle word wrap
    2. 在作为客户端的系统中显示测试结果:

      # iperf3 -i 1 -t 60 -c 192.168.2.2
      
      Connecting to host 192.168.2.2, port 5201
      [4] local 192.168.2.3 port 22218 connected to 192.168.2.2 port 5201
      [ID] Interval           Transfer     Bandwidth       Retr  Cwnd
      [4]   0.00-10.00  sec  17.6 GBytes  15.1 Gbits/sec    0   6.01 MBytes
      [4]  10.00-20.00  sec  17.6 GBytes  15.1 Gbits/sec    0   6.01 MBytes
      [4]  20.00-30.00  sec  18.4 GBytes  15.8 Gbits/sec    0   6.01 MBytes
      [4]  30.00-40.00  sec  18.0 GBytes  15.5 Gbits/sec    0   6.01 MBytes
      [4]  40.00-50.00  sec  17.5 GBytes  15.1 Gbits/sec    0   6.01 MBytes
      [4]  50.00-60.00  sec  18.1 GBytes  15.5 Gbits/sec    0   6.01 MBytes
      - - - - - - - - - - - - - - - - - - - - - - - - -
      [ID] Interval           Transfer     Bandwidth       Retr
      [4]   0.00-60.00  sec   107 GBytes  15.4 Gbits/sec    0   sender
      [4]   0.00-60.00  sec   107 GBytes  15.4 Gbits/sec        receiver
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat