虚拟机使用直通网卡可以提高Unraid性能,但是现有方法可能无法应对某些特殊情况,这里讲解一二。
我们先来看下IOMMU设备,看图操作:
这时,我们看到我们的网卡信息如下:
[14e4:165f] 02:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
[14e4:165f] 02:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
[14e4:165f] 03:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
[14e4:165f] 03:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
这里总共显示有4个网络设备,分别是主板上面的2个网口和PCI网卡上面的2个网口,经过对比发现网口对应的VENDOR /PRODUCT ID都是14e4:165f,如果按照常规方法的话无法用 pci-stub.ids=14e4:165f来实现单一网口的控制,于是我们改用 xen-pciback.hide=(02:00.0)(02:00.1),括号内的数字就是我们要让系统在启动后不使用的2个网口,xen-pciback.hide的意思是驱动设备但不使用,具体可以参考https://wiki.xen.org/wiki/Xen_PCI_Passthrough
使用上面的插件或者直接编辑修改USB启动盘中的syslinux/syslinux.cfg文件,找到带有menu default的几行,
修改前的内容为:
label Unraid OS
menu default
kernel /bzimage
append initrd=/bzroot
修改后的内容为:
label Unraid OS
menu default
kernel /bzimage
append xen-pciback.hide=(02:00.0)(02:00.1) initrd=/bzroot
注意initrd=/bzroot前加个空格分隔,xen-pciback.hide=(02:00.0)(02:00.1)就是添加的内容。
也就是前面查询的结果中[14e4:165f] 02:00.0的02:00.0,加括号,不是逗号,按格式写!!!
进VM的设置,修改PCIe ACS override为Both
改完以后需要重启系统
接着修改虚拟机的配置,点击虚拟机配置编辑页面的右上角开关切换到XML VIEW,
这时候会切换到XML配置文件的编辑界面,在中增加以下代码:
为了防止出错,直接在前面插入空行,然后复制下面的代码进去
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
</source>
</hostdev>
如果增加第2个网口就另起一行继续增加
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
</source>
</hostdev>
以上分别用到的是
02:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
02:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
这张PCI网卡的2个网口
bus=‘0x02’ slot=‘0x00’ function=‘0x0’ 0x后面的数字分别对应 02:00.0
UPDATE一下,然后再切换回FORM VIEW,这个时候就能在网卡那边看到分离出来的网卡了,
后面就继续虚拟机相关的操作即可。
看下实际测试
这个是我虚拟Win10的网卡设置,这里我PCI网卡只直通了1个网口
因为启用了PCIe ACS override为Both,我的IOMMU情况已经变成了这样
开机后,2个网卡正常识别,联网正常
全文完。