1 - 带管理网络的 SR-IOV 实战
背景
需求:
- 在 pve 的各个虚拟机中分享网卡
- 同时支持管理网络也使用这个网卡, 从而实现管理网络的高速通讯
设备:
- 一块 40G/56G 网卡,型号为 HP544+,双口(但当前实战中只使用到一个口)
目标:
- 虚拟机中可以自由使用该网卡实现高速通讯
- 管理网络也使用这个网卡
规划:
- HP544+ 网卡
- 开启 SR-IOV
- PF 用于 vmbr0 实现管理网络
- VF 直通给到虚拟机
实现步骤:
- 先安装 PVE, 使用 HP544+ 网卡做管理网络,vmbr0 会基于 HP544+ 网卡
- 开启直通,设置 HP544+ 网卡 的 SR-IOV 配置
- 配置 ubuntu server 虚拟机,直通 VF
- 在 ubuntu server 虚拟机中检验网卡的使用
准备工作
安装 PVE
正常安装 PVE, 安装时网卡选择 HP544+ 网卡,填写网络信息类似为:
- ip 地址: 192.168.99.18
- 网关:192.168.99.1
- DNS: 192.168.99.1
PVE 安装完成后,检查是否可以连接到网关
ping 192.168.99.1
如果有问题,则需要
ip addr
查看网卡情况,然后执行
vi /etc/network/interfaces
修改 vmbr0 的配置,指向正确的网卡。然后执行
ifup -a
让网卡配置生效。重新 ping 来检验连接是否成功。
安装网卡相关软件
需要安装以下工具软件:
- mft 工具
- mlxup
- mstflint
实战步骤
开启直通
按照前面介绍的方式,开启 pve 的直通支持。
设置 SR-IOV
修改 HP544+ 网卡配置:
mst start
mlxconfig -d /dev/mst/mt4103_pci_cr0 reset
mlxconfig -d /dev/mst/mt4103_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=8 WOL_MAGIC_EN_P2=0 LINK_TYPE_P1=2 LINK_TYPE_P2=2
然后执行
vi /etc/modprobe.d/mlx4_core.conf
修改网卡配置为只在 port 1 上建立8个 vf:
options mlx4_core port_type_array=2,2 num_vfs=8,0,0 probe_vf=8,0,0 log_num_mgm_entry_size=-1
最后执行
update-initramfs -u
重启机器。
此时 ip addr 看到的是:
4: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP group default qlen 1000
link/ether 48:0f:cf:ef:08:11 brd ff:ff:ff:ff:ff:ff
altname enp129s0
5: ens4d1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 48:0f:cf:ef:08:12 brd ff:ff:ff:ff:ff:ff
altname enp129s0d1
6: ens4v0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 7e:e8:bb:78:9b:e4 brd ff:ff:ff:ff:ff:ff
altname enp129s0v0
7: ens4v1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 52:59:cf:53:10:ac brd ff:ff:ff:ff:ff:ff
altname enp129s0v1
8: ens4v2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 02:d6:04:5b:7e:63 brd ff:ff:ff:ff:ff:ff
altname enp129s0v2
9: ens4v3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether ee:89:43:2e:af:d3 brd ff:ff:ff:ff:ff:ff
altname enp129s0v3
10: ens4v4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 8e:8d:ac:50:63:17 brd ff:ff:ff:ff:ff:ff
altname enp129s0v4
11: ens4v5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 7e:b7:b5:c7:2a:bf brd ff:ff:ff:ff:ff:ff
altname enp129s0v5
12: ens4v6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 76:47:57:f5:b7:c8 brd ff:ff:ff:ff:ff:ff
altname enp129s0v6
13: ens4v7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 3e:10:37:3c:86:49 brd ff:ff:ff:ff:ff:ff
altname enp129s0v7
14: ens4v8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 76:34:75:33:95:6b brd ff:ff:ff:ff:ff:ff
altname enp129s0v8
15: ens4v9: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether ee:13:54:87:51:bc brd ff:ff:ff:ff:ff:ff
altname enp129s0v9
16: ens4v10: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 5a:33:72:74:5a:78 brd ff:ff:ff:ff:ff:ff
altname enp129s0v10
17: ens4v11: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether ae:a4:58:ec:ee:0a brd ff:ff:ff:ff:ff:ff
altname enp129s0v11
18: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 48:0f:cf:ef:08:11 brd ff:ff:ff:ff:ff:ff
inet 192.168.99.58/24 scope global vmbr0
valid_lft forever preferred_lft forever
执行
lspci | grep Mel
可以看到
81:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
81:00.1 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:00.2 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:00.3 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:00.4 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:00.5 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:00.6 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:00.7 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:01.0 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:01.1 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:01.2 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:01.3 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
81:01.4 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
速度对比
虚拟机使用 vmbr0
iperf -c 192.168.99.1 -P 10 -t 20 -i 1
实际测试下来大概是 20G:
[SUM] 0.0-20.1 sec 46.8 GBytes 20.0 Gbits/sec
虚拟机使用 VF
直通一个 VF 进入虚拟机,删除 vmbr0, 同样测速,结果大概是 42.8 G:
[SUM] 0.0-20.0 sec 99.8 GBytes 42.8 Gbits/sec
虚拟机直通网卡
这个之前测试过,速度可以达到 48G ,基本等同于物理机上测试的结果。
总结
以 HP544+ 网卡为例,开启 56G eth 模式,各种情况下的 iperf 测试结果是这样的:
- 物理机下速度最快: 48G,得益于 rdma, CPU 占用基本为零
- 虚拟机网卡直通基本等同于物理机:同样 48g 速度 + CPU 占用基本为零
- PVE 系统直接使用 vmbr, 接近物理机和直通(算九五折): 45到47.9g不等,cpu占用约 20%
- 开启 SR-IOV 直通 VF, 速度下降:大约 42.8 g, 和最高性能相比打八折
- 虚拟机使用vmbr:速度最慢,约 20G, 和最高性能相比打四折,而且 cpu 占用很高
所以,建议在不同场景下酌情使用:
- vmbr 方法:最灵活,但性能最低(打四折),适用于无法或者不方便开启直通/SR-IOV 的场合
- 直通方案:性能最高,直逼物理机,但有独占网卡的限制
- SR-IOV 直通 VF 方案:兼顾性能和灵活度,八折性能换来可以在多个虚拟机中共享网卡 (HP544+ 网卡最多可以有 15 个 VF)
2 - 软路由+软交换实战
背景
需求:
- 在 pve 中搭建 openwrt 的虚拟机,实现软路由功能
- 在 pve 中搭建 ubuntu server 的虚拟机,实现软交换功能
设备:
- 两块 2.5G 网卡,型号为 realtek 8125b,单口
- 两块 40G 网卡,型号为 HP544+,双口
目标:
- openwrt 能实现拨号上网的功能
- openwrt 能提供 DHCP 服务
- 40G 网卡能组建一个高速子网(这是下一个实战的内容),并且开启 RDMA 功能以保证速度和性能
- pve 机器上的其他虚拟机可以自如的访问 40g 和 2.5G 网络
规划:
-
两块 2.5g 网卡,分别用于 openwrt 的 wan 和 lan
- 其中 lan 会接入 2.5G 交换机,为内网其他设备提供网络服务
- wan 接入 2.5G 光猫,实现拨号上网
-
两块 40G 网卡
- 一块 40G 网卡 将完全直通给到 ubuntu server 虚拟机,提供两个速度和性能最佳的网口给到下游设备
- 一块 40G 网卡将开启 SR-IOV,
- port1 的PF(物理网卡)将以 vmbr 的形式提供 PVE 管理网络
- port1 和 port2 的第一个 VF 将直通给到 ubuntu server 虚拟机,提供两个速度和性能还不错(比完整直通低,比网桥高)的网口给到下游设备
实现步骤:
- 先在现有网络中安装 pve 到物理机,实现现有网络作为 pve 的管理网络
- 安装 openwrt 虚拟机和 ubuntu server 虚拟机
- 开启 SR-IOV 和 直通,准备必要的 vmbr,然后分别分配给 openwrt 虚拟机和 ubuntu server 虚拟机
- 配置 openwrt 虚拟机,实现 wan (使用临时网段暂时先接入现有网络)和 lan, DHCP 分配
- 配置 ubuntu server 虚拟机,实现基于 linux bridge 的软交换功能
- 修改 pve 的管理网络为使用 40G 高速网络
- 拆除现有网络,改用 openwrt 拨号并接入内网设备
- 修改 openwrt 的临时网段为正式网段
解释: 为什么不在 openwrt 中直接管理两块 40G 网卡?
- 最主要的原因是 openwrt 不支持 RDMA, 因此会有非常巨大的性能损失(超出50%)而且cpu消耗非常高
- openwrt 下 40G 网卡 (具体型号为 hp544+)的启用和停用,会影响 openwrt 下的网络命名 (eth0/eth1/eth2等的存在和顺序),而 openwrt 的 lan / wan 是绑定在 eth0 这样的名称上,而不是具体的 mac 地址上。因此如果下有的 40G 网络设备有启动或者停止,而 openwrt 又进行了重启,则会因为eth网卡顺序和名称的变化造成 openwrt 不可用。
准备工作
准备虚拟机
分别建立两个虚拟机:
-
用于软路由的 openwrt
安装的方法参考 https://skyao.io/learning-openwrt/docs/installation/pve/
注意: 先不要开启开机自动启动
-
用于软交换的 ubuntu server 20.04
网卡基本情况
lspci | grep controller
可以看到 pci 设备情况:
01:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
04:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
四块网卡网卡的设备 id 依次是 01/04/06/07。
对应他们的网络设备名称,执行
ip addr
可以看到:
2: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
link/ether 38:ca:73:fe:01:60 brd ff:ff:ff:ff:ff:ff
3: enp7s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 58:11:22:08:76:ed brd ff:ff:ff:ff:ff:ff
4: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 50:65:f3:89:24:21 brd ff:ff:ff:ff:ff:ff
5: enp1s0d1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 50:65:f3:89:24:22 brd ff:ff:ff:ff:ff:ff
6: enp4s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 50:65:f3:89:b4:61 brd ff:ff:ff:ff:ff:ff
7: enp4s0d1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 50:65:f3:89:b4:62 brd ff:ff:ff:ff:ff:ff
......
16: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 38:ca:73:fe:01:60 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.8/24 scope global vmbr0
- enp6s0: 2.5G 网卡,这块卡按照规划是 openwrt 的 wan 口
- enp7s0: 2.5G 网卡,这块卡按照规划是 openwrt 的 lan 口,同时也是 ubuntu server 的 wan 口
- enp1s0 / enp1s0d1: 第一块(离cpu近) 40G 网卡的两个 port ,这个网卡准备直通给到软交换的 ubuntu server 虚拟机
- enp4s0 / enp4s0d1: 第二块 40G 网卡的两个 port ,需要做 SR-IOV,同时用于管理网络/软交换的 ubuntu server 虚拟机/其他虚拟机
- vmbr0: 管理网络使用的网桥,绑定在 enp7s0 上
- 新加 vmbr1:未来管理网络将要使用的网桥,绑定在 enp4s0 上,因此暂时没有设置 ip 地址和网关
准备本地机器
需要准备一台本地机器,作为客户端接入到软路由和软交换的两个网段,因此要求这个机器有两块网卡,分别接入这两个网段。
实际操作时也可以用两台机器分别接入 2.5G 和 40G 网络。
准备网卡的直通和开启SR-IOV
按照前面的做法, 开启 PVE 的直通支持,并将两块 40G 网卡中的第二块(离cpu远的)设置为开启 SR-IOV。注意:第一块 40G 网卡不要开启 SR-IOV。
lspci | grep controller
查看设置完成之后的网卡设备情况(忽略其他设备):
......
01:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
04:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
04:00.1 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
04:00.2 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
04:00.3 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
04:00.4 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
04:00.5 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
04:00.6 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
04:00.7 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
04:01.0 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
在 pve 中看到的网络情况:
目前 vmbr0 绑定在 enp7s0 这块 2.5G 网卡上。
网段规划和网卡分工
规划有两个网段:
-
192.168.0.0/24
: 这是软路由的目标网段,openwrt 软路由地址为 192.168.0.1,作为192.168.0.0/24
网段的网关- 注意,在实施过程时,因为现有网络使用了
192.168.0.0/24
网段,因此 openwrt 会先临时使用192.168.5.0/24
网段,待一切完成后,再改为192.168.0.0/24
网段
- 注意,在实施过程时,因为现有网络使用了
-
192.168.99.0/24
: 这是软交换的网段,ubuntu server 软路由地址为 192.168.99.1,作为192.168.99.0/24
网段的网关
刚开始时,由其他路由器拨号,pve 主机安装和配置过程中都需要使用到网络,因此安装 pve 时使用 2.5g 网卡 enp7s0 作为 pve 管理网络(绑定到 vmbr0),此时的 ip 地址是 192.168.0.8
,如上图所示。
vmbr0 以及它绑定的网卡(现在是 2.5G 的 enp7s0)需要扮演三个角色:
- 作为 lan 接入到软路由 openwrt 中
- 作为 wan 接入到软交换 ubuntu server 中
- 作为管理网络接口提供远程管理功能: 这个功能在最后会被基于 enp4s0 的 vmbr1 取代
说明: 由于在安装 pve 时 40G高速网段不可用(软交换所在的 pve 还没有安装),因此只能将 vmbr0 绑定 2.5G 网卡。但后续为了速度起见还是会使用 40G 作为管理网络。
给两个虚拟机分别分配网卡。
注意: 要先将虚拟机关机再修改硬件配置,否则无法生效,包括重启之后也无法生效,需要停机/删除/再次添加。
这是 openwrt 的虚拟机,除了分配 vmbr0 外,还需要将另外一块 2.5G 网卡直通进入,充当 openwrt 的 wan 和 lan:
切记: 直通网卡时千万不要弄错,别把 pve 的管理网络所在的网卡(也就是vmbr0对应的网卡)给直通进去了,那样会导致管理网络无法使用。只能通过 pve 控制台来进行操作。
ubuntu server 的虚拟机,除了需要将使用 vmbr0 作为 wan 之外,还需要将两块 40G 网卡的四个端口都直通进去,其中第二块网卡开启了 SR-IOV,因此直通的是编号为1和5的两个 VF:
至此虚拟机和网卡就都准备好了,开始正式配置软路由和软交换
配置软路由 openwrt
将两块网卡给到 openwrt 虚拟机:
- 设备id 为 06 的 2.5G 网卡: 直通
- 设备id 为 07 的 2.5G 网卡: 以 vmbr0 的方式
之后两块2.5G网络将分别作为 wan 和 lan。
配置 openwrt 虚拟机
启动 openwrt 虚拟机,此时可以通过管理页面来操作,或者直接在机器的控制台操作。执行:
ip addr
可以看到 eth0 / eth1 两块网卡:
执行
lspci
同样能看到两块网卡:
其中一块是直通的,因此能看到型号 RTL8125。另一块是以 vmbr0 的形式,采用的是 Virtio 模式,因此看到的是 “virtio network device”。
但现在看不出来 eth0 / eth1 和两块网卡之间的对应关系。但有个简单的办法,就是拔掉网线,只保留 vmbr0 对应的网卡有网线,然后就可以通过网卡的 UP 状态来识别了。
修改 openwrt 的 /etc/config/network
文件,将 lan 设置为 eth0
, ipaddr 设置为 192.168.0.1
。拔掉 wan 口的网线,然后重启 openwrt。
此时,会有两个 192.168.0.1/24 网段: 1. 原有的网络 2. 新的 openwrt 的网络
下面我们要将本地机器接入到新的 openwrt 的网络进行后续操作。
本地机器接入软路由网络
此时在本地机器上,连接作为 openwrt lan 口的 2.5g网卡, 接入 openwrt 的 192.168.0.0/24
网段:
此时本地机器就成功的接入了 openwrt 的 192.168.0.0/24
,可以通过访问 http://192.168.0.1/ 来管理 openwrt ,也可以通过访问 https://192.168.0.8:8006/ 来操作 pve。
启用 openwrt 软路由
在本地机器上打开 http://192.168.0.1/ ,登录进入,执行 openwrt 的各种设置(或者直接倒入之前备份的配置)。
我这里因为之前有备份的配置,因此直接导入。openwrt 会自动重启,之后重新登录。
此时 openwrt 就准备好了,除了 wan 口还没有接入光猫来进行拨号,以及还没有接入内网 2.5g 交换机。
去掉之前使用的路由器,连接 openwrt 的 万口和 光猫,改由 openwrt 拨号。并将 内网 2.5g 交换机接入 opemwrt 的 lan 口。
一切搞定之后,关闭 openwrt, 然后在设置中开启自动启动。再重启 pve 机器,验证一下。
至此 openwrt 软路由完成。
搭建软交换
在 ubuntu server 虚拟机上设置网卡,将
-
设备id 为 04 的 40G 网卡的第一个端口的第一个 VF:
04:00.1 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
-
设备id 为 04 的 40G 网卡的第二个端口的第一个 VF:
04:00.5 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
-
设备id 为 01 的 40G 网卡: 整个网卡直通进入,注意不是 VF,这块网卡特意没有开启 SR-IOV
开启 ubuntu server 虚拟机,登录进入后执行
ip addr
可以看到此时 enp1s0 已经自动获取了 192.168.0.0/24
网段的地址:
这是因为 enp1s0 是 VF,而另外一个 VF 在前面被我们直通给了 openwrt 主机。两个网段之间的联系(包括和管理网络的联系)就是通过这样的方式建立起来的。
之后按照软交换的设置方式,参考 https://skyao.io/learning-ubuntu-server/docs/router/router.html
切换管理网络为高速网络
在两个虚拟机准备好之后,第一件事情是修改为采用 40G 高速网络进行 pve 管理,以便后续将两块 2.5g 网卡都直通给到 openwrt 的虚拟机。
现在我们要做的是修改 vmbr0 的设置,让它绑定在 enp4s0 这块 40G 网卡的 port1 上。
先将一台电脑的 40G 网卡和 pve 所在机器的这块40G网卡的 port 1 (两个网口中更靠近主板的那个)连接,后续就只能依靠这条网络来远程管理 pve。
更换管理网络的事情最好还是在 pve 机器控制台上进行,因为中途管理网络会中断。
修改 /etc/network/interfaces
中 vmbr0 对应的网卡,从原有的 enp6s0
修改为 enp4s0
,然后设置:
- ip地址为
192.168.99.8
- 子网掩码为
255.255.255.0
- 网关为
192.168.99.1
: 这个网关现在还不存在,未来将在软交换 ubuntu server 中创建,但不影响现在的使用
然后重启 pve。
本地机器接入软交换网络
PVE 重启完成后,设置本地机器的 40G 网卡:
- ip地址为
192.168.99.90
- 子网掩码为
255.255.255.0
- 网关为
192.168.99.8
: 目前网关不存在,就只能指定为网线直连的对端的 ip 地址
本地40G网卡连接情况如图所示:
之后通过 https://192.168.99.8:8006/ 就可以访问到 pve 机器的新的管理网络了,后续操作都将在远程进行。
3 - 高速共享存储
背景
需求:
- 希望在局域网内为其他机器提供高速网络共享服务
设备:
- 一块 40G/56G 网卡,型号为 HP544+,双口(但当前实战中只使用到一个口)
- 一块爱国者p7000z 4T pcie 4.0 硬盘
- 一块华硕z690-p d4 主板
目标:
- 虚拟机拥有 56G 高速网络,同时可以高速读写那块 4T 的 pcie4 ssd 硬盘
规划方案1:
- HP544+ 网卡直通给到虚拟机
- p7000z 硬盘直通给到虚拟机
规划方案2:
- HP544+ 网卡直通给到虚拟机
- p7000z 硬盘由 pve 管理,然后以 pve hard disk 的方式传递给虚拟机
遇到问题修改规划
规划1 在实践时遇到问题,HP544+ 网卡和 p7000z 硬盘都可以单独直通给到虚拟机,但是如果两个设备同时一起直通给到虚拟机,则会报错:
kvm: -device vfio-pci,host=0000:01:00.0,id=hostpci1,bus=ich9-pcie-port-2,addr=0x0: vfio 0000:01:00.0: Failed to set up TRIGGER eventfd signaling for interrupt INTX-0: VFIO_DEVICE_SET_IRQS failure: Device or resource busy
TASK ERROR: start failed: QEMU exited with code 1
google 一番没有找到解决方案,倒是找到了一个问题和我类似的帖子:
https://forum.proxmox.com/threads/passthrough-two-pci-devices.110397/
作者说问题发生在使用两块 Mellanox ConnectX-3 网卡时,当他换成 Mellanox ConnectX-4 网卡时问题就消失了。
考虑到目前我还没有换 Mellanox ConnectX-4 的计划,只能放弃规划方案1, 后面的操作是基于规划方案2。
准备工作
准备 PVE 和直通支持
安装 pve 8.0, 开启直通支持。
准备虚拟机
安装 ubuntu server 20.04, 按照之前虚拟机的要求为直通做好准备。