Unraid网卡直通方法

虚拟机使用直通网卡可以提高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,
image
这时候会切换到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个网卡正常识别,联网正常

全文完。

友情提醒,直通因主板而异。如果遇到拓展全在一条通道里的就凉了,反正我是凉了。板载网卡和拓展网卡芯片一样,并且装了pcie硬盘拓展,只要通任意一个网口或任意一个硬盘,这个通道里的全通了。个人经历,仅供参考。入坑需谨慎。

我是使用
append vfio-pci.ids=8086:1521,8086:5ad8,8086:5ad9,8086:5ada,8086:5adb initrd=/bzroot

但是没办法用,现在测试您的办法看看行不行

内部错误:qemu意外关闭监视器:2020-03-09T10:06:58.788704Z qemu-system-x86-u64:-设备vfio pci,主机=0000:04:00.0,id=hostdev0,总线=pci.0,addr=0x8:vfio 0000:04:00.0:组5不可行请确保iommu-u组中的所有设备都绑定到其vfio总线驱动程序。

还是不行~!~!!~

2

3

我的方法你看了么,,就是解决这个问题

改天试试,谢谢三木给的解决方法!!!

我看了,补充说明一下我的是j3455,之前为了直通试了n种办法。暂时弃坑了,没法试,昨天unraid群里发了个解决j3455发生这种情况的补丁。

补丁可以百度一下或进群下载。最后,感谢楼主的分享。:grin:

xen-pciback.hide=(02:00.0)(02:00.1) 看清楚写法,另外在VM设置那边PCIe ACS override参数改成Both,重启unraid

漏写了几个内容,已经补齐,双网口PCI网卡直通1个网口,Windows 10 正常识别使用,不需要搞什么补丁

kernel /bzimage
append xen-pciback.hide=(04:00.0)(04:00.1)(04:00.2)(04:00.3) pcie_acs_override=downstream,multifunction vfio_iommu_type1.allow_unsafe_interrupts=1 initrd=/bzroot

依旧不行呀~!~!~!还是我哪里设置错 了吗?????

2

非常感谢 ~!~!~!使用补丁后成功分组~!~!~!

补丁上传不了,有点大呀~!~!~!~

链接: https://pan.baidu.com/s/1bzI5nyW6y09xygbUtyL_xA 提取码: 7623

1赞

写法有问题
kernel /bzimage
append xen-pciback.hide=(04:00.0)(04:00.1)(04:00.2)(04:00.3) initrd=/bzroot

进设置,VM Manger,修改PCIe ACS override为Both

就好了

大神,我的Unraid主机就2个板载网卡,第一个插了网线作为unraid的管理口。如果我用xen-pciback.hide=(02:00.0)(02:00.1),重启后还能进unraid吗?“xen-pciback.hide的意思是驱动设备但不使用” 我这样写的话是不是第一个网口也被驱动起来但不被使用,是不是就不会通过DHCP从我的软路由拿到IP,所以我就进不了unraid了。只写一个的话,我认为直通给虚拟的win10应该没问题,但如果我想建lede/openwrt, 把2个网口都用起来,一个WAN, 一个LAN,这样怎么写?

写了就是不用了,自然是进不了

板载双网口,是不是不能一个给unraid用,一个给虚拟机用,屏蔽了单个口后,直通那里不显示,h310+g5400 网卡i211

上述已解决
但直通后原来虚拟网卡在群晖中就没了,这是正常的吗

屏蔽了自然是看不到了,需要自己手动添加到虚拟机

文中 “因为启用了PCIe ACS override为Both,我的IOMMU情况已经变成了这样”
但 华擎J3455M主板,启用了PCIe ACS override为Both,我的IOMMU分组依然在一起,还是分不开,其它按照教程走,就会出现虚拟机无法启动的情况,何解?

设置完后要重启设备的