塔奇克马 发表于 2019-5-22 23:12

分享下自己折腾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.




riczxc 发表于 2019-5-23 00:12

我用vfio在windows虚拟机直通到linux主机的显卡,那么多年都没有问题,用得挺好的。

yeah20002 发表于 2019-5-23 08:22

谁能让牙膏的核显直通到hdmi就是造福人类的大佬
页: [1]
查看完整版本: 分享下自己折腾linux虚拟机SRIOV心得