UNRAID下开启SRIOV——曲折之路

什么值得买 2021-05-29 16:46:55 显示图片

作者:转身就买

说起来玩NAS有一段时间了。

一路过来遇到不少问题,也解决了不少问题。

而这次之所以写下这篇。是因为这个坑太大,卡住我太久啦。 

既然已经把坑趟平,索性分享出来,希望各位机油少走一点弯路。

不过还是那句话,机和机毕竟不同,如果还遇到其他坑,勿怪勿怪。 

一切的一切,都要从人生观大佬的一篇教程开始https://post.smzdm.com/p/awx0xe2k/。(非常感谢人生观、司波图、阿文菌等等大佬,带给我们机油无限的知识财富和欢乐。) 

然而参照人生观大佬的教程,我在UNRAID下开启网卡SR-IOV并不成功。试了无数次各种网卡依然失败。 

只能翻遍资料,慢慢试验。其中曲折不堪回首(换了有SR-IOV选项的主板,翻阅了一堆看不懂的英文文档)。 

不过还好最后让我机缘巧合地弄好了。 

不多毕毕,下面教程马上开始。 

老规矩简单介绍一下今天的主角,SR-IOV。

SR-IOV能允许一个物理PCIe设备把自身虚拟为多个虚拟PCIe设备。

至于为什么要这样做,我们直接搬结论。

纯虚拟性能 < SR-IOV虚拟性能 < 物理直通性能

打个比方,在设备支持的情况下。只要开启了SR-IOV功能,就可以把一张显卡虚拟化成一百张,分配给一百台虚拟机;也可以把网卡上的一个网口虚拟化成一百个网口,分配给一百台虚拟机。 

当然是打个比方,实际没有那么夸张,一般常见的设备,虚拟出几个设备还是可以的。

比如这样。

PVE下I350T4网卡开启SR-IOV

或者这样。

UNRAID下I350T4网卡开启SR-IOV

开启SR-IOV前,我们要保证主板CPU支持虚拟化功能,VT-D。

这是必须的。

除此之外,如果主板有单独的SR-IOV开关,那也要打开。

某些主板只支持VT-D,但是没有单独的SR-IVO选项,但是一样支持SR-IOV功能。

比如我实测的华擎Z370Mpro4,只有VT-D开关,没有单独的SR-IOV开关,依然支持SR-IOV。

华擎Z370Mpro4 支持SR-IOV功能

所以只要主板支持VT-D功能,大家大胆去试,说不定有惊喜。 

打开VD-T以后我们进入UNRAID。

查看系统信息(任意界面点击右上角的“信息”)。

如图所示。

UNRAID系统信息

支持HVM就是支持虚拟化。

下面我们直接修改MAIN-FLASH。

在UNRAID OS中加入下面语句。

intel_iommu=on iommu=pt pcie_acs_override=downstream pci_pt_e820_access=on pci=assign-busses

保存以后重启系统。

重启后来到工具-系统设备。

就可以看到PCIe网卡信息,并且单网口是单独的IOMMU分组。

这里我接了一张X540 T2,一张I350 T4。

物理网卡IOMMU分组信息

然后我们来到UNRAID网络设置。

设置好各个网口对应的eth信息,并且记好。

如果你想识别一个特定的物理接口,可以用ethtool -p eth*命令来查看,ethtool命令会使eth*端口的LED灯闪烁。

UNRAID网络接口设置

这时候我们打开SSH终端

输入开启网卡SR-IOV功能的命令

echo 虚拟设备数 > /sys/bus/pci/devices/0000:设备ID/sriov_numvfs

输入 lspci 就可以查看设备ID

PCI设备ID

我这里X540 T2两个网口的设备ID是01:00.0;01:00.1。I350 T4四个网口的设备ID是05:00.0;05:00.1;05:00.2;05:00.3。

输入 cat /sys/bus/pci/devices/0000:设备ID/sriov_totalvfs 就可以查看最大虚拟设备数

根据设备ID查看最大虚拟设备数

这里可以看到X540单网口最大可虚拟63个虚拟网口,I350单网口最大可虚拟7个虚拟网口。

假如我想让X540的01.00.0网口开启SR-IOV功能,开启全部63个虚拟网卡(VF),则执行如下命令。

echo 63 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs

执行成功的情况下,不会有任何反馈。

我们只要进入工具-系统设备

就可以看到已经成功开启了63个虚拟网卡(VF)

非常壮观

网卡SR-IOV开启成功

当然这里只是举例,一般我们不会用到那么多的虚拟网卡。

如果我们想去掉虚拟设备,或者减少虚拟设备,只要再执行一次命令就可以了。

其中的虚拟设备数改成我们需要的。比如完全去掉就是0,其他数量就根据实际需要写入。

echo 0 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs

命令实时生效。

确定好配置以后,我们把命令写入到go文件中,每次开机自动开启虚拟设备。

执行

nano /boot/config/go

把命令写入go文件即可

命令写入go文件

改好以后按 ctrl+X  然后键入y 再回车保存即可。

这样就可以完美开启网卡的SR-IOV功能了。

由于时间问题,这篇暂告一段落,请大家期待下篇。

到时把屏蔽虚拟设备让虚拟机可以使用的流程(其实跟屏蔽PCIe设备用作直通的操作一样),以及固定虚拟网卡MAC地址的方法,一并写完。 

qn8j(8700Tes)+z370mpro4+hp561flr(X540T2)+华为SP212(I350T4)

最后贴下测试设备,大家下回见~!  

阅读更多精彩内容,可前往什么值得买查看

什么值得买APP 全网实时购物好价优惠