Linux软件RDMA环境搭建之SIW

redhat配置Soft-iWARP

Soft-iWARP 功能已弃用,并将在 RHEL 10 中删除。
Soft-iWARP 功能仅作为技术预览提供。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。

流程

    1. 安装 iproute、libibverbs、libibverbs-utils 和 infiniband-diags 软件包:
      1
      $ dnf install iproute libibverbs libibverbs-utils infiniband-diags
    1. 显示 RDMA 链接:
      1
      $ rdma link show
    1. 加载 siw 内核模块:
      1
      $ modprobe siw
    1. 添加一个新的名为 siw0 的 siw 设备,它使用 enp0s1 接口:
      1
      $ rdma link add siw0 type siw netdev enp0s1

验证

    1. 查看所有 RDMA 链接的状态:
      1
      2
      $ rdma link show
      link siw0/1 state ACTIVE physical_state LINK_UP netdev enp0s1
    1. 列出可用的 RDMA 设备:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      $ ibv_devices

      device node GUID
      ------ ----------------
      siw0 0250b6fffea19d61
      您可以使用 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

Ubuntu-22配置SoftiWARP

从 Linux 内核版本开始5.3,SoftiWARP 已成为主流内核的一部分:https://github.com/torvalds/linux/tree/master/drivers/infiniband/sw/siw。因此,无需从头开始编译。只需一个简单的 modprobe 魔法即可。 modprobe siw

添加新设备

但是,有一些新的步骤说明如何使用新命令(相当于该命令)启用并连接siw到现有接口。rdmaip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
atr@u22:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:fd:2d:61 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 85132sec preferred_lft 85132sec
inet6 fe80::a00:27ff:fefd:2d61/64 scope link
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:fb:37:4a brd ff:ff:ff:ff:ff:ff
inet 192.168.56.103/24 brd 192.168.56.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fefb:374a/64 scope link
valid_lft forever preferred_lft forever
atr@u22:~$ sudo rdma link add siw0 type siw netdev enp0s8
atr@u22:~$ sudo rdma link add siw0_lo type siw netdev lo
atr@u22:~$ ibv_devices
device node GUID
------ ----------------
siw0 0a0027fffefb374a
siw0_lo 020000fffe000000

此时,您已将软件 RDMA 设备连接到 enp0s8 和 lo netdev。

如果你想查看哪个 RDMA 设备连接到哪个物理设备:

1
2
3
atr@u22:~$ rdma -d link
link siw0/1 state ACTIVE physical_state LINK_UP netdev enp0s8 netdev_index 3
link siw0_lo/1 state ACTIVE physical_state LINK_UP netdev lo netdev_index 1

删除设备

如果要移除设备:

1
2
3
4
5
atr@u22:~$ rdma link del siw0_lo
atr@u22:~/rdma-example$ ibv_devices
device node GUID
------ ----------------
siw0 0a0027fffefb374a

启用动态调试

root用户运行:

1
$ echo "module siw +p" > /sys/kernel/debug/dynamic_debug/control

使用以下方法测试设置rping

rping 类似于ping测试 RDMA 系统运行情况的实用程序。它有两个组件:服务器和客户端。在下面的示例中,我将 siw 设备连接到环回接口。

  • 服务端
    1
    rping -s -a 127.0.0.1
  • 客户端
    1
    rping -c -a 127.0.0.1 -v
    你应该看到如下运行输出
    1
    2
    3
    4
    ping data: rdma-ping-0: ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr
    ping data: rdma-ping-1: BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs
    ping data: rdma-ping-2: CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst
    ping data: rdma-ping-3: DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu

引用参考