⚠ 转载请注明出处:作者:ZobinHuang,更新日期:Oct.26 2021
本作品由 ZobinHuang 采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,在进行使用或分享前请查看权限要求。若发现侵权行为,会采取法律手段维护作者正当合法权益,谢谢配合。
目录
有特定需要的内容直接跳转到相关章节查看即可。
Section 0. 物理硬件安装
Section 1. 主机端软件配置
1.1 安装 OFED 驱动
1.2 Rshim 驱动安装
1.3 配置 Rshim 虚拟接口
1.4 配置主机 Internet 网卡转发服务
Section 2. BlueField 软件配置
2.1 设置 DNS 服务器
2.2 修改系统时间
0. 物理硬件安装

我们首先在 Motherboard 上插上 BlueField SmartNIC,并连接好串口线。在开机后,我们要确保能在 PCI 总线上找到相应的 Ethernet Controller 和 DMA Controller。如下所示:
1
2
3
4zobin@vnf2:~$ lspci | grep -i bluefield
07:00.0 Ethernet controller: Mellanox Technologies MT416842 BlueField integrated ConnectX-5 network controller
07:00.1 Ethernet controller: Mellanox Technologies MT416842 BlueField integrated ConnectX-5 network controller
07:00.2 DMA controller: Mellanox Technologies MT416842 BlueField SoC management interface
1. 主机端软件配置
1.1 安装 OFED 驱动
首先我们需要从 NVDIA 官方 下载 Mellanox OpenFabrics Enterprise Distribution (MLNX_OFED)。OFED 可以理解为专门为 RDMA 和 TCP-Offload 打造的设备驱动,是由 OpenFabrics 联盟和主要的 Infiniband 厂商共同维护的一套软件,而 Mellanox OFED 是 Mellanox 为其网络设备所定制的版本。
下面我们展示安装步骤,我们使用的是 Ubuntu 20.04 LTS 操作系统,然后我们下载的 MLNX_OFED 版本是 MLNX_OFED_LINUX-5.4-3.0.3.0-ubuntu20.04-x86_64。
1
2
3
4
5
6
7
8
9# operate under /opt
cd /opt
# unpack
tar -xvf MLNX_OFED_LINUX-5.4-3.0.3.0-ubuntu20.04-x86_64.tar
cd MLNX_OFED_LINUX-5.4-3.0.3.0-ubuntu20.04-x86_64
# start installation
sudo ./mlnxofedinstall --auto-add-kernel-support --without-fw-update
安装成功后,重新启动 MLNX_OFED 的 openibd:
1
2
3/etc/init.d/openibd restart
Unloading HCA driver: [ OK ]
Loading HCA driver and Access Layer: [ OK ]
1.2 Rshim 驱动安装
随着上面的步骤,Rshim 应该会被顺带安装。我们需要启动它,并检查它的状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# enable and start rshim
sudo systemctl enable rshim
sudo systemctl start rshim
# check rshim service
sudo systemctl status rshim
● rshim.service - rshim driver for BlueField SoC
Loaded: loaded (/lib/systemd/system/rshim.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-10-27 18:12:55 CST; 1min 21s ago
Docs: man:rshim(8)
Main PID: 409355 (rshim)
Tasks: 6 (limit: 77193)
Memory: 1.8M
CGroup: /system.slice/rshim.service
└─409355 /usr/sbin/rshim
10月 27 18:12:55 vnf2 systemd[1]: Starting rshim driver for BlueField SoC...
10月 27 18:12:55 vnf2 systemd[1]: Started rshim driver for BlueField SoC.
10月 27 18:12:55 vnf2 rshim[409355]: Probing pcie-0000:07:00.2
10月 27 18:12:55 vnf2 rshim[409355]: create rshim pcie-0000:07:00.2
10月 27 18:12:56 vnf2 rshim[409355]: rshim0 attached
1.3 配置 Rshim 虚拟接口
在 ubuntu 20.04 下,我们可以使用 netplan 来配置 Rshim 接口,如下所示:
1
nano /etc/netplan/01-netcfg.yaml
修改为如下配置,其中的 tmfifo_net0 接口就是我们的 Rshim 接口:
1
2
3
4
5
6
7
8
9
10
11network:
version: 2
renderer: networkd
ethernets:
<Your Internet Network Interface>:
dhcp4: yes
nameservers:
addresses: [<IP of Your Gateway Without Mask>]
tmfifo_net0:
addresses: [192.168.100.1/24]
dhcp4: no
然后我们需要重启网络接口:
1
2sudo systemctl restart systemd-networkd
netplan apply
测试是否能连通:
1
ping -I tmfifo_net0 192.168.100.2 -c2
如果成功连通,现在我们就能通过 ssh 连接到我们的 BlueField 上了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24ssh ubuntu@192.168.100.2
ubuntu@192.168.100.2 s password:
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-1003-bluefield aarch64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri Apr 3 10:11:54 UTC 2020
System load: 0.08 Processes: 179
Usage of /: 16.5% of 13.42GB Users logged in: 1
Memory usage: 8% IP address for tmfifo_net0: 192.168.100.2
Swap usage: 0% IP address for docker0: 172.17.0.1
1 package can be updated.
0 updates are security updates.
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
Last login: Thu Apr 2 21:19:16 2020 from 192.168.100.1
ubuntu@localhost:~$
1.4 配置主机 Internet 网卡转发服务
目前,我们已经能够 access 我们的 BlueField 网卡了,下面我们需要使能它访问 Internet 的能力,以方便我们后续在 SoC 系统上的操作。首先我们需要使能主机 Internet 网卡的转发服务,如下所示:
1
2
3
4
5
6
7
8su root
echo 1 | tee /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o <Your Internet Network Interface> -j MASQUERADE
# check "net.ipv4.conf.<Your Internet Network Interface>.forwarding = 1"
sysctl -a | grep forwarding
如果上一步 sysctl 检查的结果不对,即 forwarding 没有被使能,那么很可能我们默认的防火墙规则被设置成为了隐式的 deny policy,我们需要手动打开:
1
2iptables -A FORWARD -o <Your Internet Network Interface> -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -i <Your Internet Network Interface> -j ACCEPT
同时我们还需要检查,我们的主机路由表中是否有前往默认网关的路由:
1
2
3
4
5root@zobin-hardware-devbox:/opt# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 tmfifo_net0
如果路由表向上面这样子,没有默认路由表项,那么我们是无法访问外网的。所以我们需要手动设置默认路由表项到网关:
1
2
3
4
5
6
7
8
9
10# config default gateway
root@zobin-hardware-devbox:/opt# route add default gw 192.168.10.1
# check route entries
root@zobin-hardware-devbox:/opt# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default Openwrt.lan 0.0.0.0 UG 0 0 0 enp2s0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 tmfifo_net0
这样一来,我们主机端的网络配置就完成了。
2. BlueField 软件配置
在上一章中,我们完成了对主机端的软件配置。现在我们使用 ssh 登入到 BlueField,在 BlueField 上进行一些配置。
2.1 设置 DNS 服务器
我们首先需要在 BlueField 上设置 DNS 服务器:
1
echo "nameserver <IP of Your Gateway Without Mask>" | sudo tee /etc/resolv.conf
这样一来,我们就能够基于域名访问外网了。
2.2 修改系统时间
其次我们需要让 on-NIC OS 修改系统时间,否则一些网络服务的访问可能会被认为是不允许的,比如从清华源更新 apt 等操作 (说到这,记得把 on-NIC OS 的源更新为清华源,注意我们的 SmartNIC 是 Arm 架构的处理器,所以换源的时候记得选择 ubuntu-port 源)。修改系统时间的方式如下:
1
sudo date -s “m/d/y 11:39”
这样一来,我们的实验平台基本就搭建完成了。