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 设备可在 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 硬件地址 复制链接链接已复制到粘贴板!
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
的硬件地址:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 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
[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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此链接文件与 MAC 地址相匹配,并将网络接口重命名为
Name
参数中设置的名称。
验证
重启主机:
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证具有链接文件中指定的 MAC 地址的设备是否已分配给
mlx5_ib0
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
# nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
P_Key
,例如:nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
# nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 IPv4 设置:
要使用 DHCP,请输入:
nmcli connection modify mlx5_ib0 ipv4.method auto
# nmcli connection modify mlx5_ib0 ipv4.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
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
# 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 Copied! Toggle word wrap Toggle overflow
配置 IPv6 设置:
要使用无状态地址自动配置(SLAAC),请输入:
nmcli connection modify mlx5_ib0 ipv6.method auto
# nmcli connection modify mlx5_ib0 ipv6.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
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 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 Copied! Toggle word wrap Toggle overflow
要在配置文件中自定义其他设置,请使用以下命令:
nmcli connection modify mlx5_ib0 <setting> <value>
# nmcli connection modify mlx5_ib0 <setting> <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用空格或分号将值括起来。
激活配置文件:
nmcli connection up mlx5_ib0
# nmcli connection up mlx5_ib0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
ping
工具将 ICMP 数据包发送到远程主机的 InfiniBand 适配器,例如:ping -c5 192.0.2.2
# ping -c5 192.0.2.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 配置网络。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 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
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示
mlx5_ib0.8002
设备的 IP 设置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
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
# 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 Copied! Toggle word wrap Toggle overflow 显示
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
# 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 Copied! Toggle word wrap Toggle overflow
26.3.6. 使用 nmstatectl 配置 IPoIB 连接 复制链接链接已复制到粘贴板!
您可以使用 nmstatectl
工具,通过 Nmstate API 配置一个 IP over InfiniBand (IPoIB)连接。Nmstate API 确保设置配置后结果与配置文件匹配。如果有任何失败,nmstatectl
会自动回滚更改以避免系统处于不正确的状态。
先决条件
- InfiniBand 设备已安装在服务器上。
- 用于 InfiniBand 设备的内核模块已加载。
流程
创建一个包含以下内容的 YAML 文件,如
~/create-IPoIB-profile.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
-
IPOIB 设备名称:
将设置应用到系统:
nmstatectl apply ~/create-IPoIB-profile.yml
# nmstatectl apply ~/create-IPoIB-profile.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示
mlx5_ib0.8002
设备的 IP 设置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
mlx5_ib0.8002
设备的分区密钥(P_Key):cat /sys/class/net/mlx5_ib0.8002/pkey 0x8002
# cat /sys/class/net/mlx5_ib0.8002/pkey 0x8002
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
mlx5_ib0.8002
设备的模式:cat /sys/class/net/mlx5_ib0.8002/mode datagram
# cat /sys/class/net/mlx5_ib0.8002/mode datagram
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.3.7. 配置 IPoIB 后,使用 iperf3 测试 RDMA 网络 复制链接链接已复制到粘贴板!
在以下示例中,大型缓冲区大小用于执行 60 秒测试,以测量最大吞吐量,并使用 iperf3
工具充分利用两台主机之间的带宽和延迟。
先决条件
- 您已在两个主机上配置了 IPoIB。
流程
要在系统中运行
iperf3
作为服务器,定义一个时间间隔,以提供定期带宽更新-i
以侦听,作为一个服务器-s
,等待客户端连接的响应:iperf3 -i 5 -s
# iperf3 -i 5 -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要作为客户端在另一个系统上运行
iperf3
,请定义一个间隔,提供定期带宽更新-i
连接到侦听的服务器-c
连接到 IP 地址192.168.2.2
和-t
秒(以秒为单位):iperf3 -i 5 -t 60 -c 192.168.2.2
# iperf3 -i 5 -t 60 -c 192.168.2.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令:
在作为服务器的系统中显示测试结果:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在作为客户端的系统中显示测试结果:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow