UnRaid开启网卡SR-IOV并直通给虚拟机的方法

news/2024/11/13 4:28:19/

1.关于SR-IOV

        SR-IOV是Single Root I/O Virtualization的缩写,对于网卡来说,就是一个物理网卡可以虚拟出来多个轻量化的PCI-e物理设备,从而分配给不同的虚拟机使用(每个虚拟机就像拥有单独的物理网卡一样)。其性能结余纯虚拟网卡和物理网卡之间——纯虚拟性能 < SR-IOV虚拟性能 < 物理直通性能

2.前提条件

        2.1.软件系统要支持(比如esxi、pve、unraid……)

        2.2.主板要支持、cpu要支持(在bios设置中要有vt-d选项且必须打开,有的文章说还要有SR-IOV设置选项,经我测试,sr-iov这个不是必备项——我的华擎B365M-Pro4没有这个选项也是可以成功开启的,但如果主板bios有单独的SR-IOV选项,也必须要打开。),对于unraid系统,进入web-gui界面右上角“显示器”图标查看系统信息,如果HVM、IOMMU均显示为“已启用”则可以支持。

        2.3.网卡要支持,比如intel的i350-T4千兆网卡(但网上寨卡比较多,原装的又比较贵),还有我最近买的X550-T2(万兆、5千兆、2.5千兆、千兆、百兆之间自适应)、X540-T2(只能在万兆、千兆之间切换)等网卡都可以。在unraid中可以通过如下方法查看你的网卡是否支持sr-iov:

①.如果是6.9x版本(我在试用阶段也完全没问题),可在【工具】→【系统设备】页面直接将鼠标放在欲查询的网卡,在弹出的信息框中如果出现sr-iov字样则支持,否则不支持(下图中8086:1563】 01:00.0对应的X550T这个网口是支持sr-iov的):

 ②.或者shell窗口输入(所有版本通用)cat /sys/bus/pci/devices/0000:设备ID/sriov_totalvfs 可以查看最大虚拟设备数,如果该数值大于0,则支持。设备ID可参照上图理解:【8086:1563】 01:00.0的对应设备ID为01:00.0,则cat /sys/bus/pci/devices/0000:01:00.0/sriov_totalvfs,我的显示为63,表示支持sr-iov且可虚拟出63个网卡。而我的另外一张网卡RTL8125 2.5GbE([10ec:8125] 04:00.0) ,运行cat /sys/bus/pci/devices/0000:04:00.0/sriov_totalvfs后输出No such file or directory,则该网卡不支持sr-iov。

 3.开启网卡的sr-iov:

3.1.修改【Main】→【Flash】→【Syslinux 配置】→【Unraid OS】及【Unraid OS GUI Mode】,在append与 initrd=/bzroot之间添加如下代码(需要保存并重启系统):

pcie_acs_override=downstream,multifunction vfio_iommu_type1.allow_unsafe_interrupts=1 intel_iommu=on iommu=pt pci_pt_e820_access=on pci=assign-busses

3.2.虚拟出网卡,还是以前述的X550第1个网口为例,假如我要虚拟3个网卡,则输入如下命令即可:

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

现在去【工具】→【系统设备】中就可以看到新增的3张虚拟网卡了(同时记住该虚拟网卡的群组ID【8086:1565】,在后续屏蔽后直通时有用

 如果需要取消,则输入echo 0 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs即可。

由于unraid系统的特殊性,在shell窗口输入的命令重启后就失效了,所以在测试成功后可以通过CA Config Editor插件在go文件添加echo 3 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs就可以每次启动时均自动加载虚拟网卡了

3.4.固定虚拟网卡的mac地址:(此步骤非必须,我只是为了绑定虚拟网卡的ip以便于管理——SR-IOV虚拟出来的网卡mac地址会随着虚拟机开关发生变化)

这步的关键是要搞清楚开启SR-IOV功能的网卡在unraid系统中的网络接口编号,所以在所有的开启SR-IOV动作之前,必须先进行unraid的网络设置,并记录好。我的系统主板自带2个网卡,再添加了一张支持SR-IOV的X550-T2网卡,现在的【设置】→【网络设置】如下

 因为我是在eth2上开启的sr-iov,为了确认一下,还可以用如下命令核实一下:

ip link show dev eth2

确实有3张虚拟网卡(第一行为对应的物理网卡信息,最后3行vf 0,vf 1,vf 2为虚拟出来的网卡,由于我已经设置了固定mac,所以显示了不同的mac地址,否则mac地址全是0) 

接下来就可以输入如下命令将虚拟网卡的mac地址固定了:

ip link set eth接口名 vf vf序号 mac MAC地址

对应我的则是:

ip link set eth2 vf 0 mac 00:55:01:01:00:00

ip link set eth2 vf 1 mac 00:55:01:01:00:01

ip link set eth2 vf 2 mac 00:55:01:01:00:02

说明:我的Z490-itx之X550-T2是将第1个口进行虚拟化,由于490板载2个网卡,所以X550-T2第1个网口在unraid中为eth2,为了便于理解和记忆,我将其mac地址按如下规则重新命名:(:55:01:01代表第1张X550网卡第1个网口,末尾:00代表第0个虚拟网卡,:01代表第1个虚拟网卡……),你可以根据自己喜好自行发挥——比如第2张350网卡第2个口的第10个虚拟网卡改成00:35:02:02:00:10

测试成功后将前述语句写入go文件,就不用每次重启unraid后再手工敲入命令来写mac了

4.屏蔽并直通虚拟网卡

4.1.屏蔽虚拟网卡:不能在【系统设备】或【vfio-pci cfg插件】中进行屏蔽!不能在【系统设备】或【vfio-pci cfg插件】中进行屏蔽!不能在【系统设备】或【vfio-pci cfg插件】中进行屏蔽!只能在【Main→Flash】中添加代码屏蔽——在系统设备中查看虚拟网卡的群组ID(参照3.2步骤图片显示),我的为8086:1565,则将其加入到【Main】→【Flash】→【Syslinux 配置】→【Unraid OS】及【Unraid OS GUI Mode】的append与 initrd=/bzroot之间,加上之前的代码,合并后完整代码为:append pcie_acs_override=downstream,multifunction vfio_iommu_type1.allow_unsafe_interrupts=1 intel_iommu=on iommu=pt pci_pt_e820_access=on pci=assign-busses vfio-pci.ids=8086:1565 initrd=/bzroot

重启unraid

4.2.直通虚拟网卡:在添加虚拟机或虚拟机编辑时最末端的其他PCI设备中就可以找到刚虚拟出来的网卡了。选中,更新即可。

我是把它直通给windows10虚拟机的(当然你也可以虚拟给openwrt等软路由、其它nas系统作为WAN使用),开启windows虚拟机等待安装虚拟网卡驱动(如果windows不能自动安装驱动,可以通过第三方驱动安装工具软件来安装)后即可正常使用。 


http://www.ppmy.cn/news/111701.html

相关文章

【工业相机接口配置】万兆网口、Camera Link接口、CXP接口

工业相机接口配置&#xff08;万兆网口、Camera Link接口、CXP接口&#xff09; 万兆网口Camera Link接口CXP接口 目前接触到的工业相机主要有万兆网口、Camera Link接口、CXP接口等不同的接口 另外更常用的是USB接口以及千兆网口的相机&#xff08;这里不再详述&#xff09; 下…

华硕x550vc——6年后的性能测试

大学时期的学生全能笔记本&#xff0c;华硕x550vc&#xff0c;最近准备升级了&#xff0c;虽然它依然健在&#xff0c;换过电源配件&#xff0c;换过屏&#xff0c;自己加了根内存&#xff0c;换过电池&#xff0c;其他都没毛病&#xff0c;至今还能60fps撸一把英雄联盟&#x…

Intel 万兆网卡调研 X520 X540 X550 X710 X810 对比 10GB/40GB/100GB NIC

目录 对Intel网卡进行调研支持SR-IOV的网卡X520 X540 X550对比区别相同 X520 X710 X810系列对比区别 X520网卡文档翻译OverviewBest choice for virtualization可靠的性能Features&#xff1a;generalFeatures&#xff1a;IO features for Multi-core processor ServersVirtual…

Docker基本操作与自定义镜像Docker-Compose与Docker镜像仓库

目录 一.基本操作 1.镜像操作 1.1.镜像名称 1.2.镜像命令 1.3.案例-拉取、查看镜像 1.4.案例-保存、导入镜像 2.容器操作 2.1.容器相关命令 2.2.案例-创建并运行一个容器 2.3.案例-进入容器&#xff0c;修改文件 2.4.小结 3.数据卷&#xff08;容器数据管理&#x…

Python Web后端面试常考数据结构与算法(珍藏版)

本文将对Python web后端面试时常考数据结构与算法进行总结&#xff0c;适合即将找工作或面试的你。Python web后端常考数据结构包括: 常见的数据结构链表、队列、栈、二叉树、堆 使用内置的结构实现高级数据结构&#xff0c;比如内置的list/deque实现栈 LeetCode或者剑指Offe…

C#.NET OpenCVSharp 实操图示化指导:(一)环境准备

C#.NET OpenCVSharp 实操图示化指导&#xff1a;&#xff08;一&#xff09;环境准备 VS2019 安装环境 OpenCVSharp 以上红色框里的一通安装上。。。。。。。。。。。KevinChen于苏州 2023.5..31

C++ Eigen库矩阵操作

C Eigen库 序号功能例子1赋值Eigen::MatrixXf mat (12,1); \\% mat << 1, 2, 3, 4,5,6,7,8,9,10,11,12;2Inplace操作 \\% resizemat.resize(4, 3); \\% 1 5 9 \\% 2 6 10 \\% 3 7 11 \\% 4 8 123转置 \\% transposeInPlacemat.transposeInPlace(); \\% 1 2 3 4 \\% 5…

android手机性能,手机性能排行榜2018前十名(安卓)

手机性能排行榜2018前十名(安卓) 手机性能排行榜 如今市面在售的智能手机分类逐渐细节化和合理化&#xff0c;消费者对手机的外观颜值、游戏性能、拍照水平和续航能力等表现的需求逐渐变高。由于五月份发布的旗舰机还是蛮多的&#xff0c;如坚果R1、一加6和小米8&#xff0c;所…