设备直通是一种虚拟化资源分配方式,通过将物理设备直通给虚拟机环境,达到虚拟机可以直接访问物理设备的目的,直通功能对设备的要求不高,不需要设备支持PF/VF,目前市面上的显卡/网卡一般都支持直通。典型场景比如有两块显卡,一块主机用,另一块虚拟机用,主板有集成显卡的可以采用将集成显卡给宿主机,PCI的独立显卡给虚拟机用。这里的用法是将PCI以太网卡直通给QEMU虚拟机,而HOST机上使用无线网卡,今天来探索一下它的玩法。
实践平台
环境安装
1.安装QEMU虚拟机环境以及虚拟机管理工具环境:
sudo apt-get install qemu-kvm qemu-system libvirt-bin bridge-utils virt-manager ssh-askpass-gnome --no-install-recommends
2.默认BIOS中已经ENABLE了CPU虚拟化和设备虚拟化能力,所以这一步操作忽略。
3.Enable PCI IOMMU,参考如下文章:
Linux ion&dma-buf&iommu的原理_papaofdoudou的博客-CSDN博客
4.确认需要穿透的pci设备和设备号,我们透传的设备如下图所示,Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller。
透传设备的地址BDF为:00000:02:00.0,设备ID为10ec:8168.
设置HOST机上的PCI设备
HOST端通过如下命令查看PCI设备信息
virsh nodedev-list --tree
首先在HOST端将PCI以太网卡设备解绑,将其驱动从默认的r8169切换为vfio-pci,这个过程中,主机的以太网络连接会中断,不过没有关系,主机上还有另外一个集成的无线网卡。
执行如下命令查看当前设备信息:
$ virsh nodedev-dumpxml pci_0000_02_00_0
从设备信息中看到,设备驱动是r8169,设备的IOMMU分组是9。
查看IOMMU分组信息确实如此,分组为9
下一步在HOST对设备解绑
$ virsh nodedev-detach pci_0000_02_00_0
解绑后,主机以太网卡功能已经失能,需要连接无线网卡。
此时我们需要加载内核的VFIO模块,由于默认UBUNTU18.04内核已经将vfio.ko,vfio-pci.ko两个模块builtin到内核中,所以这一步操作系统已经帮我们做了,不需要其它操作。
针对以太网卡设备使能VFIO驱动
执行如下命令,将系统的VENDOR和PRODUCT ID作为输入,写入vfio-pci/new_id节点,使能VFIO驱动,bind to vfio-pci Driver.(貌似执行前面的detach之后,这一步不是必须的)。
echo 10ec 8168 > /sys/bus/pci/drivers/vfio-pci/new_id
执行后,再次查看设备信息,会发现其驱动已经从r8196切换为vfio-pci:
文章来源:https://www.toymoban.com/news/detail-435803.html
确认IOMMU分组,隶属于同一个IOMMU GROUP的设备必须整体透传给虚拟机&#文章来源地址https://www.toymoban.com/news/detail-435803.html
到了这里,关于ubuntu18.04下pass-through直通realteck PCI设备到qemu-kvm虚拟机实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!