分享下自己折腾linux虚拟机SRIOV心得
本帖最后由 塔奇克马 于 2019-5-22 23:13 编辑有什么好处:
简单来说降低硬件占用
guest主机用测试网卡
宿主配置泰安c204 E1220L 硬件支持sriov 不支持acs 通过acs_patch内核实现sriov vf直通
对比的网卡
上 sriov vf 直通网卡
中 virtio 半虚拟网卡
下 E1000全虚拟网卡
鉴于全虚拟网卡已经淘汰了,那么只要关注半虚拟网卡和直通网卡对比
sy(内核占用)这部分被节省了下来 8%左右
iperf -w 64k 参数下 940Mbits/sec(E1000全虚拟网卡只能跑到900Mbits/sec,cpu占用率更高)
对于CPU越差越有用,CPU越好越没用.没有高网络需求也没用.
另外不需要弄虚拟交换机了,只要一个网口分出来的vf设备都能进行网络交换.没有了半虚拟网卡桥接不能和宿主机通信的缺点.
坏处是不能迁移,因为对应设备地址,不过很多人没这需求吧.也就无所谓了.
mac每次重启变动至少我是这样的,那么只要设置IP就行了.
简单的一些定义:
sriov:可以把某个设备分成多个(7-256)虚拟设备,硬件功能和真实设备类似,降低CPU占用
acs:sriov的一个可选特性,具备这个特性,sriov 虚拟出的设备才能直通.如果你有双口网卡你想分别直通给guest主机也是需要这个特性的.
这里涉及到一个概念:所有分配一个IommuGroup内的设备只能直通给一个guest主机,没有acs时,所有在一个pcie口上的设备都被分配到一个group,所以很不灵活
硬件部分:
对于linux只要具备vt-d就可以了,这大概只对linux有效也是linux的福利,目前所有主板都具备这个功能.主板和CPU硬件支持sriov以及acs并不是必要条件
sriov 芯片组一般C2xx才可以,有人说华硕,华擎,微星有支持,但是我使用自己的MSI z270失败,必须要加强制参数才行.没有深度测试.
acs 需要 xeon-d 或者e5.
最低网卡82576 pciex4
双网口可以虚拟出 7x2 个虚拟网卡.
软件部分:
以debian(openmediavault)为例子:
一般表现为拆分网卡时候出现错误.说明硬件不支持sriov
write error: Cannot allocate memory
那么需要加上参数
pci=assign-busses
pci=realloc 如果硬件不支持acs则需要替换下内核,正常来说需要自己patch和编译,这里你可以用已有的内核比如:
https://queuecumber.gitlab.io/linux-acs-override/
直接命令安装.之后加上参数
pcie_acs_override=downstream,multifunction 加入内核参数方法:
nano /etc/default/grub 编辑,加上参数,参考范例,ctrl+x 保存退出
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="default_hugepagesz=2m hugepagesz=2m iommu=pt intel_iommu=on pcie_acs_override=downstream,multifunction"
更新内核
update-grub
重启
如何分配网卡find /sys -name sriov_numvfs
显示这样
/sys/devices/pci0000:00/0000:00:01.1/0000:02:00.0/sriov_numvfs
/sys/devices/pci0000:00/0000:00:01.1/0000:02:00.1/sriov_numvfs
/sys/devices/pci0000:00/0000:00:06.0/0000:04:00.0/sriov_numvfs
参考这个命令给对应设备的地址.你应该能知道哪个是哪个了.
lspci -vt
你只要
echo 7 > /sys/devices/pci0000:00/0000:00:01.1/0000:02:00.1/sriov_numvfs 之后直通什么的随便你,这个命令可以加入到rc.local(我觉得能放最好全都放到rc.local中,而不是去改乱七八糟的conf).
附件 IommuGroup脚本,查看设备Group.
我用vfio在windows虚拟机直通到linux主机的显卡,那么多年都没有问题,用得挺好的。 谁能让牙膏的核显直通到hdmi就是造福人类的大佬
页:
[1]