Using HP 544+FLR-QSFP network card configuration (RDMA) NVMe over Fabrics on Ubuntu 20.04

Record the basic steps and verification methods for configuring RDMA and NVMe over Fabrics using HP 544+ FLR-QSFP network card in Ubuntu 20.04.

Hardware

HP 544+FLR-QSFP 40 Gb/s 2-Port(s) Ethernet Adapter Card 544+FLR-QSFP 764285-B21

  • Number correspondence table
    Number Product OEM
    879482-B21 HPE InfiniBand FDR/Ethernet 40Gb/50Gb 2-port 547FLR-QSFP adapter Mellanox ConnectX-5 technology
    764284-B21 HPE InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+QSFP adapter Mellanox ConnectX-3 Pro technology
    764285-B21 HPE InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP adapter Mellanox ConnectX-3 Pro technology
    764737-001 InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP (FlexibleLOM) adapter - InfiniBand bandwidth up to 56 Gb/s Fourteen Data Rate (FDR), Ethernet bandwidth up to 40 Gb/s, PCIe 3.0 Mellanox ConnectX-3 Pro technology
    764286-B21 HP InfiniBand QDR/Ethernet 10Gb 2-port 544+FLR-QSFP Adapter Mellanox ConnectX-3 Pro technology

Software

MLNX_OFED_LINUX-4.9-4.1.7.0-ubuntu20.04-x86_64.tgz https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/

Installation configuration

Compile and install the driver

Note that both the storage side and the connection side need to be installed.

1
2
3
4
5
6
tar -zvxf MLNX_OFED_LINUX-4.9-4.1.7.0-ubuntu20.04-x86_64.tgz
cd MLNX_OFED_LINUX-4.9-4.1.7.0-ubuntu20.04-x86_64/
sudo ./mlnxofedinstall --with-nvmf 
sudo update-initramfs -u
sudo apt install nvme-cli
reboot

Configure ip address

Note that both the storage end and the connection end need to be configured. The actual data is not transmitted through IP, but through the IB network and RDMA.

Find the network port

 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
knightli@epyc:~$ sudo lshw -c network
  *-network:0               
       description: Ethernet interface
       product: I350 Gigabit Network Connection
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       logical name: eno1
       version: 01
       serial: ac:1f:6b:e7:e7:b4
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi msix pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.6.0-k firmware=1.69, 0x80000df4 latency=0 link=no multicast=yes port=twisted pair
       resources: irq:84 memory:eff20000-eff3ffff ioport:1020(size=32) memory:eff44000-eff47fff memory:1c904000000-1c90401ffff memory:1c904020000-1c90403ffff
  *-network:1
       description: Ethernet interface
       product: I350 Gigabit Network Connection
       vendor: Intel Corporation
       physical id: 0.1
       bus info: pci@0000:01:00.1
       logical name: eno2
       version: 01
       serial: ac:1f:6b:e7:e7:b5
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi msix pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.6.0-k duplex=full firmware=1.69, 0x80000df4 ip=192.168.8.161 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:98 memory:eff00000-eff1ffff ioport:1000(size=32) memory:eff40000-eff43fff memory:1c904040000-1c90405ffff memory:1c904060000-1c90407ffff
  *-network
       description: interface
       product: MT27520 Family [ConnectX-3 Pro]
       vendor: Mellanox Technologies
       physical id: 0
       bus info: pci@0000:61:00.0
       logical name: ibp97s0
       logical name: /dev/fb0
       version: 00
       serial: a0:00:02:20:fe:80:00:00:00:00:00:00:9c:dc:00:00:00:00:00:00
       width: 64 bits
       clock: 33MHz
       capabilities: pm vpd msix pciexpress bus_master cap_list rom physical fb
       configuration: autonegotiation=on broadcast=yes depth=32 driver=ib_ipoib driverversion=4.9-4.1.7 duplex=full firmware=2.42.5700 ip=172.18.8.2 latency=0 link=yes mode=1024x768 multicast=yes visual=truecolor xres=1024 yres=768
       resources: iomemory:8f0-8ef irq:94 memory:ea500000-ea5fffff memory:8f06000000-8f07ffffff memory:ea400000-ea4fffff
  *-network DISABLED
       description: interface
       physical id: 4
       bus info: pci@0000:61:00.0
       logical name: ibp97s0d1
       serial: a0:00:03:00:fe:80:00:00:00:00:00:00:9c:dc:00:00:00:00:00:00
       size: 10Gbit/s
       capabilities: physical
       configuration: autonegotiation=on broadcast=yes driver=ib_ipoib driverversion=4.9-4.1.7 duplex=full firmware=2.42.5700 link=no multicast=yes speed=10Gbit/s

Note that the network port of product: MT27520 Family [ConnectX-3 Pro], the corresponding logical name: ibp97s0

Set the IP of the network port

Modify /etc/netplan/00-installer-config.yaml to add ip address

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# This is the network config written by 'subiquity'
network:
  ethernets:
    eno1:
      optional: true
      dhcp4: true
    eno2:
      optional: true
      dhcp4: true
    ibp97s0:
      addresses: [172.18.8.2/24]
  version: 2

Execute sudo netplan apply after modification

Storage configuration (the physical nvme disk is on this server)

exp_nvme.sh

 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
#!/bin/bash
expdev(){
    echo "exp nvme dev [subsystem] = $1 [nvme dev] = $2 [namespace number]=$3 [ip]=$4 [port]=$5"
    mkdir /sys/kernel/config/nvmet/subsystems/$1/namespaces/$3
    echo -n $2 > /sys/kernel/config/nvmet/subsystems/$1/namespaces/$3/device_path
    echo 1 > /sys/kernel/config/nvmet/subsystems/$1/namespaces/$3/enable
    mkdir /sys/kernel/config/nvmet/ports/$3
    echo $4 > /sys/kernel/config/nvmet/ports/$3/addr_traddr
    echo rdma > /sys/kernel/config/nvmet/ports/$3/addr_trtype
    echo $5 > /sys/kernel/config/nvmet/ports/$3/addr_trsvcid
    echo ipv4 > /sys/kernel/config/nvmet/ports/$3/addr_adrfam
    ln -s /sys/kernel/config/nvmet/subsystems/$1 /sys/kernel/config/nvmet/ports/$3/subsystems/$1
}

modprobe mlx5_core
modprobe nvmet
modprobe nvmet-rdma
modprobe nvme-rdma

mkdir /sys/kernel/config/nvmet/subsystems/data_8
echo 1 > /sys/kernel/config/nvmet/subsystems/data_8/attr_allow_any_host
expdev data_8 /dev/nvme0n1 800 172.18.8.1 6600
expdev data_8 /dev/nvme1n1 801 172.18.8.1 6601
expdev data_8 /dev/nvme2n1 802 172.18.8.1 6602
expdev data_8 /dev/nvme3n1 803 172.18.8.1 6603
expdev data_8 /dev/nvme4n1 804 172.18.8.1 6604

Connection configuration (connect to the remote nvme disk from this server)

####Install nvme command line tool

1
sudo apt install nvme-cli

Execute nvme script

1
2
3
modprobe mlx5_core
modprobe nvme-rdma
sudo nvme connect -t rdma -n data_8 -a 172.18.8.1 -s 6601

After successful execution, you can use sudo fdisk -l to list the connected nvme devices, and then mount them according to the method of local block devices.

记录并分享
Built with Hugo
Theme Stack designed by Jimmy