Intel vGPU技术GVT-g与kvmgt实现分析和实践
Intel GVT-g KVMGTIntel GVT-g是Intel图形虚拟化技术(IntelGraphicsVirtualizationTechnology-graphics)的缩写它是一种硬件辅助的GPU虚拟化解决方案允许将一个Intel集成显卡(Integrated Graphics Processor, IGP)虚拟化为多个虚拟GPU(vGPU),供多个虚拟机同时使用。而KVMGT则是 GVT-g技术在KVM虚拟化平台上的具体实现它是GVT-g框架与KVM/VFIO/MDEV子系统的集成模块通俗点儿说就是这个模块共同作用生的孩子使KVM虚拟机能够使用GVT-g创建的虚拟GPU。本文将在支持GVT‑G集成显卡技术的Intel CPU上搭建演示环境以实现虚拟机和物理机共享核显的目标。Linux GVT-gKVMGT架构图软件分层架构Intel vGPU测试环境搭建英特爾持續推動Intel®圖形處理器上的圖形虛擬化技術。最新的技術是單根 IO 虛擬化SR-IOV取代了先前的 Intel® 圖形虛擬化技術 –gGVT-g。环境信息测试环境使用的Graphics 620是支持GVT-g的,Intel i7-8665U属于第INTEL 第八代处理器家族根据INTEL官方资料第八代处理器是明确支持GVT-G技术的不支持SR-IOV。https://www.intel.com.tw/content/www/tw/zh/support/articles/000093216/graphics/processor-graphics.html另外需要确保LINUX OS打开了这些配置项确保GVT-G的驱动存在CONFIG_DRM_I915_GVT_KVMGTy CONFIG_DRM_I915_GVTyDisable IOMMU情况下MPT(Mediated Pass-Through)核显共享MPT和设备PT模式还是有显著区别的设备直通PT是全硬件访问路径而MPT模式需要通过软件曾MDEV作中介所以本质上vGPU对存储的访问可以被MDEV钩住可以在不启用IOMMU的情况下实现设备MPT。下面关闭IOMMU尝试虚拟机和物理机共享核显。关闭INTEL IOMMU并启用GVT-Gi915.enable_gvt1GRUB_CMDLINE_LINUX_DEFAULTquiet splash intel_iommuoff i915.enable_gvt1安装kvmgt.kosriovpc:~$ sudo modprobe kvmgt sriovpc:~$ lsmod|grep kvmgt kvmgt 421888 0 mdev 24576 1 kvmgt vfio 73728 2 kvmgt,vfio_iommu_type1 kvm 1445888 2 kvmgt,kvm_intel i915 4837376 24 kvmgt之后查看mdev_supported_types目录已经存在创建vGPUecho 0212b594-20d9-11f1-98e0-6bbe8ef005ee /sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types/i915-GVTg_V5_8/create此时MDEV VGPU设备会出现MPT透传到虚拟机sudo /home/czl/Workspace/svm-qemu/install/new/qemu-system-x86_64 -enable-kvm -m 4096 -drive file./test-vm-2.qcow2,formatqcow2 -device vfio-pci,sysfsdev/sys/bus/mdev/devices/0212b594-20d9-11f1-98e0-6bbe8ef005ee可以看到物理机和虚拟机同时在使用核显vGPU配置空间模拟数据来源于真实的核显所以在虚拟机中的型号和物理机完全一样:因为没有IOMMU所以MDEV创建 VGPU时只生成了一个DUMMY的 IOMMU GROUP和MDEV设备绑定并且由于没有ENABLE IOMMU不需要进行IOVAGPA到HPA的映射所以启动时不会调用iommu_map路径原因是在这里将其切断的,因为VM对应的vfio_iommu的的domain_list为空说明此VM没有任何IOMMU DOMAIN为其服务所以只是将上层发送过来的DMAP MAP请求记录一下之后退出。这个记录在后面VGPU工作过程中会在VGPU访问存储时陷出到HYPERVISOR执行GPA到HPA的翻译时用VGPU访问存储时陷出到HYPERVISOR执行GPA到HPA的翻译的调用堆栈ENABLE IOMMU即便ENABLE IOMMU默认MDEV设备由于没有关联一个所在总线BUS能够访问IOMMU比如PCIE BUS的设备所以仍然没有IOMMU DOMAIN关联MDEV设备仍然不需要IOMMU的服务除非调用mdev_set_iommu_device/mdev_get_iommu_device设置这个支持IOMMU的关联设备否则MDEV不需要 translation IOMMU DOMAIN.总结Enable IOMMU场景下就不在详细展开了过程完全是一样的本文的目的除了记录环境搭建的过程之外重点想引出一个结论硬件直通(PT, Pass-Through)必须依赖IOMMU但是MPT通过Mediated mdev模块实现的 Pass-Through)技术对IOMMU没有依赖当然开启IOMMU更好别的不说IOMMU隔离保证VM之间更安全不是么。参考文档https://www.intel.com.tw/content/www/tw/zh/support/articles/000093216/graphics/processor-graphics.htmlhttps://blog.csdn.net/weixin_29201859/article/details/158442355https://baijiahao.baidu.com/s?id1849564234142398996wfrspiderforpc结束
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2423435.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!