26.3. 配置 IPoIB
IP over InfiniBand (IPoIB)在 InfiniBand 远程直接访问(RDMA)网络之上提供 IP 网络模拟层。未经修改的应用程序可以使用 IPoIB 通过 InfiniBand 网络传输数据。
请注意,IPoIB 性能比应用程序原生使用 RDMA 时低。
在 RHEL 8 和更新的版本中,从 ConnectX-4 开始的 Mellanox 设备默认使用增强 IPoIB 模式(仅数据报)。在这些设备中不支持连接模式。
26.3.1. IPoIB 通讯模式 复制链接链接已复制到粘贴板!
IPoIB 设备可在 Datagram 或 Connected 模式中配置。
区别在于 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/IPheader字段,存在一个 IP 数据包限制。因此,Connected模式中的 IPoIB MTU 是65520字节。Connected模式性能更高,但是消耗更多内核内存。
虽然系统被配置为使用 Connected 模式,但系统仍然使用 Datagram 模式发送多播流量,因为 InfiniBand 交换机和光纤无法在 Connected 模式下传递多播流量。另外,当主机没有配置为使用 Connected 模式时,系统会返回 Datagram 模式。
在运行在接口上发送最多 MTU 的多播数据的应用程序时,在 Datagram 模式下配置接口,或者将应用程序配置为限制适合数据报大小的数据包的发送大小。
26.3.2. 了解 IPoIB 硬件地址 复制链接链接已复制到粘贴板!
InfiniBand 硬件地址通常称为全局唯一标识符(GUID),是分配给每个 InfiniBand 设备的唯一标识符,如主机频道适配器(HCA)。这些地址对于路由、设备识别和网络管理至关重要。
ipoib 设备有 20 个字节硬件地址,它由以下部分组成:
- 前 4 个字节是标志和队列对号。
接下来的 8 个字节是子网前缀
默认子网前缀为
0xfe:80:00:00:00:00:00:00。设备连接到子网管理器后,设备会更改此前缀以匹配配置的子网管理器。- 最后 8 个字节是 IPoIB 设备附加到的 InfiniBand 端口的全局唯一标识符(GUID)。
因为前 12 个字节可以更改,因此请不要在 udev 设备管理器规则中使用它们。
26.3.3. 使用 systemd 链接文件重命名 IPoIB 设备 复制链接链接已复制到粘贴板!
默认情况下,内核会命名 IP over InfiniBand (IPoIB) 设备,例如 ib0、ib1 等等。为避免冲突,请创建一个 systemd 链接文件,来创建持久且有意义的名称,如 mlx5_ib0。
先决条件
- 您已安装了一个 InfiniBand 设备。
流程
显示设备
ib0的硬件地址:# ip addr show ib0 7: ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256 link/infiniband 00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp7s0 altname ibs2 inet 172.31.0.181/24 brd 172.31.0.255 scope global dynamic noprefixroute ib0 valid_lft 2899sec preferred_lft 2899sec inet6 fe80::f652:1403:7b:e1b1/64 scope link noprefixroute valid_lft forever preferred_lft forever要将 MAC 地址为
00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02的接口命名为mlx5_ib0,请创建具有以下内容的/etc/systemd/network/70-custom-ifnames.link文件:[Match] MACAddress=00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 [Link] Name=_mlx5_ib0此链接文件与 MAC 地址相匹配,并将网络接口重命名为
Name参数中设置的名称。
验证
重启主机:
# reboot验证具有链接文件中指定的 MAC 地址的设备是否已分配给
mlx5_ib0:# ip addr show mlx5_ib0 3: mlx5_ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP group default qlen 1000 link/infiniband 00:00:00:8c:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp196s0f0 altname ibs2f0 inet 172.31.0.40/24 brd 172.31.0.255 scope global dynamic noprefixroute mlx5_ib0 valid_lft 2497sec preferred_lft 2497sec inet6 fe80::6a6d:6879:7ccf:34c7/64 scope link noprefixroute valid_lft forever preferred_lft forever
26.3.4. 使用 nmcli 配置 IPoIB 连接 复制链接链接已复制到粘贴板!
您可以在命令行上使用 nmcli 工具创建一个 IP over InfiniBand 连接。
先决条件
- InfiniBand 设备已安装在服务器上
- 加载对应的内核模块
流程
创建 InfiniBand 连接,来在
Connected传输模式下使用mlx5_ib0接口,以及最大65520字节的 MTU :# nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520设置
P_Key,例如:# nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002配置 IPv4 设置:
要使用 DHCP,请输入:
# nmcli connection modify mlx5_ib0 ipv4.method auto如果
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
配置 IPv6 设置:
要使用无状态地址自动配置(SLAAC),请输入:
# nmcli connection modify mlx5_ib0 ipv6.method auto如果
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
要在配置文件中自定义其他设置,请使用以下命令:
# nmcli connection modify mlx5_ib0 <setting> <value>用空格或分号将值括起来。
激活配置文件:
# nmcli connection up mlx5_ib0
验证
使用
ping工具将 ICMP 数据包发送到远程主机的 InfiniBand 适配器,例如:# ping -c5 192.0.2.2
26.3.5. 使用 network RHEL 系统角色配置 IPoIB 连接 复制链接链接已复制到粘贴板!
要配置 IP over InfiniBand (IPoIB),请创建一个 NetworkManager 连接配置文件。您可以使用 network RHEL 系统角色自动化这个过程,并在 playbook 中定义的主机上远程配置连接配置集。
您可以使用 network RHEL 系统角色配置 IPoIB,如果 InfiniBand 的父设备的连接配置文件不存在,角色也可以创建它。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo权限。 -
一个名为
mlx5_ib0的 InfiniBand 设备已安装在受管节点上。 - 受管节点使用 NetworkManager 配置网络。
流程
创建一个包含以下内容的 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示例 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文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
显示
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显示
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显示
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
26.3.6. 使用 nmstatectl 配置 IPoIB 连接 复制链接链接已复制到粘贴板!
您可以使用声明性 Nmstate API 来配置 IP over InfiniBand (IPoIB)。nmstate 可确保结果与配置文件匹配或回滚更改。
先决条件
- InfiniBand 设备已安装在服务器上。
- 用于 InfiniBand 设备的内核模块已加载。
流程
创建一个包含以下内容的 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.8002IPoIB 连接现在具有以下设置:
-
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
-
IPOIB 设备名称:
将设置应用到系统:
# nmstatectl apply ~/create-IPoIB-profile.yml
验证
显示
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显示
mlx5_ib0.8002设备的分区密钥(P_Key):# cat /sys/class/net/mlx5_ib0.8002/pkey 0x8002显示
mlx5_ib0.8002设备的模式:# cat /sys/class/net/mlx5_ib0.8002/mode datagram
26.3.7. 配置 IPoIB 后使用 iperf3 测试 RDMA 网络 复制链接链接已复制到粘贴板!
iperf3 工具测量两个节点之间的 RDMA 和 IP 性能。
在以下示例中,大型缓冲区大小用于执行 60 秒测试,以测量最大吞吐量,并使用 iperf3 工具充分利用两台主机之间的带宽和延迟。
先决条件
- 您已在两个主机上配置了 IPoIB。
流程
要在系统中运行
iperf3作为服务器,定义一个时间间隔,以提供定期带宽更新-i以侦听,作为一个服务器-s,等待客户端连接的响应:# iperf3 -i 5 -s要作为客户端在另一个系统上运行
iperf3,请定义一个间隔,提供定期带宽更新-i连接到侦听的服务器-c连接到 IP 地址192.168.2.2和-t秒(以秒为单位):# iperf3 -i 5 -t 60 -c 192.168.2.2使用以下命令:
在作为服务器的系统中显示测试结果:
# 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在作为客户端的系统中显示测试结果:
# 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