SR-IOV网卡虚拟分组直通及避坑指南
写在前面
这个课题其实可以说是老生常谈了,自己很早就配置了.
主要是最近想把两年前的坑补上,并且留下记录以后备查方便.踩过的坑太多,自己写一段流畅的操作记录,比扒拉各个帖子更实在点.
Q:SR-IOV是啥?
A:简单讲就是讲一张网卡支持SR-IOV就可以将单个或多个网口分组直通出更多的虚拟网卡,提供给虚拟机或者docker等其他应用使用,节约成本,更高效利用,比较明显的缺点就是小包转发效率比正常单口直通要差.支持的设备有比较常见的 I350 , X520 等网卡.选购这些网卡也是有比较大的坑,本篇不详述.
Q:如何看自己的设备是否支持SR-IOV?
A:现在unraid已经非常无脑简单配置了,打开 工具 - 系统设备 ,鼠标移动到网卡的字段上,
如果在单根 I/O 后面有(SR-IOV)字样,就说明支持.
阅读完以上,如果你没有需求,alt+F4. 有需求,这篇文章可以让你少踩很多坑,我会提供我的方案,并且快速配置完.
正文
1.前提及准备工作:
主板开启 VT-d , 网卡支持 SR-IOV
以我这张 I350-T4 网卡( 01:00.0 ~ 01.00.3 )为例
查询是否支持的命令:
lspci -s 01:00.0 -vvv | grep Capabilities
查询可虚拟数量的命令:
cat /sys/bus/pci/devices/0000:01:00.0/sriov_totalvfs
我的显示8,所以最多能虚拟7个,1个被物理口占用,根据实际需求,可以不用一次全都单口虚拟成8个,一张网卡虚拟成64个可用口,因为虚拟的越多,虚拟网口效率自然更差.
2.正式施工:
还是以我的硬件条件为例 (主板H370N:2个物理网口+I350T4网卡:4个物理网口)
A. 规划,选择性虚拟直通(重要) :
eth0:主板上的i211网口 : 不直通,用作管理口
eth1:主板上的i219-v网口 : 直通给win10虚拟机
I350T4网卡 : 1~3口直通 , 4口不直通 , 分组后再直通虚拟出来的VF卡 (前3口提供直通,4口留作更多虚拟机的备用,虚拟7个网口)
提前规划,很重要的原因是: 如果不规划好,提前在网络里设置顺序及后续的MAC分配,重启以后,或者启动项修改成GUI方式等等原因,会造成之后的配置混乱,又要倒回来重新搞,必须一步到位,以免后患!
B. 网络设置 :
关闭阵列, 前往 设置 - 网络设置
eth0用作管理口,保持之前设置不动
往下翻,找到 接口规则
按照我前面的规划,按照顺序分别分配
下图中,我的分配顺序,因为我已经直通过了,所以中间的网卡不显示,这里的eth8就是我的规划中,I350网卡的最后一个口不直通,所以能显示
配置完,保存
C. 测试获取硬件号 :
先测试一下,以及获取对应硬件号留存备用:
echo 1 > /sys/bus/pci/devices/0000:01:00.3/sriov_numvfs
ip link set eth8 vf 0 mac 00:55:15:21:e1:f0
ip link show dev eth8
注 :
0000:01:00.3 - 对应我的第四个网口的子编号 ( 01:00.3 )
eth8 - 就是上文所述的要虚拟的口
echo 1 - 要分组几个就填几
vf 0 - 编号从0开始计
mac XX:XX:XX:XX:XX:XX - 网卡地址自定义
工具 - 系统设备 : 记录下虚拟出来的硬件号 ( 8086:1520 )
D . 修改启动项 :
打开Syslinux文件
注 : OS和GUI模式下都改,为的是万一系统被自己折腾出毛病,还能进GUI抢救的情况下,网卡配置不会乱,省的下次再改,如果进下面其他安全模式之类的,没有配置过,重启以后,顺序还是会乱的,这点注意
OS 和 GUI 模式 , 修改添加 :
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 xen-pciback.hide=(01:00.0)(01:00.1)(01:00.2) vfio-pci.ids=8086:1520 initrd=/bzroot
以上命令的解释:
(01:00.0)(01:00.1)(01:00.2) - 就是我的规划中所注,直通前I350网卡的前3个口,第四个口不能直通,需要RS-IOV.
vfio-pci.ids=8086:1520 - 是I350网卡开启SR-IOV以后出现的VF卡所对应的分组硬件号
其他命令是关于IMMO分组,开启虚拟机PCIe-ACS覆盖等的相关命令,照抄就行
E . 固定网卡地址
go文件添加 :
echo 7 > /sys/bus/pci/devices/0000:01:00.3/sriov_numvfs
ip link set eth8 vf 0 mac 00:55:15:21:e1:f0
ip link set eth8 vf 1 mac 00:55:15:21:e1:f1
ip link set eth8 vf 2 mac 00:55:15:21:e1:f2
ip link set eth8 vf 3 mac 00:55:15:21:e1:f3
ip link set eth8 vf 4 mac 00:55:15:21:e1:f4
ip link set eth8 vf 5 mac 00:55:15:21:e1:f5
ip link set eth8 vf 6 mac 00:55:15:21:e1:f6
F.重启,完工
避坑及拓展
实测我的卡不能虚拟出来给群晖用,但是windows有效,其他卡也有别人的案例说分配爱快驱动问题,无法拨号,我没试过不知
虚拟网卡主要作用是有限PCI插槽下,为了拓展给更多的虚拟机使用,量力而行,不要盲目为了多网口而去直通
多口划分出来可以玩交换机vlan,参照 https://post.smzdm.com/p/a0dopz6z/
如果你是2.5G网口,需要添加额外代码,否则容易出现断连 , 别人帖子里看到的解决方法 ,
go 文件添加 :
/usr/sbin/ethtool -s eth8 speed 2500 duplex full
/sbin/ifconfig eth8 down
/sbin/ifconfig eth8 up
unraid国内的氛围太差,很多东西需要扒拉外网,挺累人的
打算把几年踩过的坑,趁这股劲一起扒拉出来写写完,写着写着又有点没动力了,主要是之前整套HTPC自动化观影布完,一下就养老了,也没啥新鲜的玩意儿完.现在就期待intel什么时候能推出平民级的GPU虚拟化方案,这个只能在11-12代期待能实现,所以目前还是继续用我现在的硬件配置来作这个多用体,既能搞定HTPC硬解,又是一台办公家用的windows/mac/linux, 有兴趣的可以参考我这篇哦
Unraid 篇一:Docker核显硬解 + windows虚拟机外接显示器物理输出iGPU YES!_显示器_什么值得买 (smzdm.com)
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~








長瀬湊
校验提示文案
查-无此人
校验提示文案
悲秋在钓鱼丶
校验提示文案
云想流月
校验提示文案
美貌大王
校验提示文案
人猴泰山
校验提示文案
Erigen
校验提示文案
值友3978085406
校验提示文案
值友1786883887
校验提示文案
琪琪爸爸1988
校验提示文案
琪琪爸爸1988
校验提示文案
值友1786883887
校验提示文案
人猴泰山
校验提示文案
美貌大王
校验提示文案
值友3978085406
校验提示文案
Erigen
校验提示文案
云想流月
校验提示文案
悲秋在钓鱼丶
校验提示文案
查-无此人
校验提示文案
長瀬湊
校验提示文案