IGD assign已经写入了Qemu的文档,是否就已经很稳定了?由于项目需要,我做了一系列测试,发现坑还是很多,很多!
首先,我们梳理一下,为了实现IGD assign我们需要做哪些工作:
虚拟设备准备阶段。看过Qemu源码的同学都会有这样的印象,Qemu启动分为两个阶段,第一,虚拟设备建立阶段,包括vCPU初始化,machine初始化,mem初始化,一系列外围bus初始化,bus上的device初始化。Qemu需要先将IGD虚拟成一个pci device。这里主要用的是vt-d技术,vfio remap IGD的相关资源,让Guest能够访问。
第二,bios阶段对IGD初始化,这是最头大的地方。现在IGD的bios初始化包括两种方式:老的VBIOS方式,新的GOP方式。目前,Qemu给出的只是VBIOS方式,这就导致测试新平台的时候各种问题。
第三,Guest OS启动后,安装显卡驱动。最新的Win10系统已经集成了比较新的IGD驱动,但是似乎不能用,不知道是否是用老的VBIOS导致的,使用老一点的显卡驱动就可以正常使用。
总结起来,IGD的使用的坑还是集中在legacy,其实GPU passthrough的坑也是在legacy,后来用了OVMF就跳过了这个legacy的坑,IGD也可以通过OVMF跳过这个legacy的坑吗?
总感觉IGD assign是个坑,IGVT是不是好一些?毕竟有Intel的全力支持。