背景:
显卡的提升在虚拟化场景下一直是一个难以解决的问题。
显卡本身需要强大的计算能力,这里qemu纯用cpu来模拟gpu的功能明显有些力不从心。
下面就简要的介绍一下virtio-gpu这个功能。
virtio-gpu介绍
同所有的virtio设备一样,virtio-gpu也是有这前端显卡和后端显卡组成。
virtio-gpu的前端显卡在kernel 4.2 进入主干,只具有2D功能。在4.4合入了3D功能。
所以要想体验这一功能需要使用kernel 4.4以后版本。
virtio-gpu相关代码主要在kernel的drivers/gpu/drm/virtio目录下。
这里简单就介绍下drm。详细的可以参看DRM介绍
DRM可以直接访问DRM clients的硬件。DRM驱动用来处理DMA,内存管理,资源锁以及安全硬件访问。
这样可以看到通过DRM来管理相关的内存信息,这样就可以通过virtio-gpu来将内存信息传递给后端。
接下来就是要看qemu中的后端实现。
virtio-gpu的支持在qemu 2.5中开始支持。
并准备在qemu2.6中对spice显卡进行支持。
作为一个典型的virtio设备,同样需要实现virtio的接口。在qemu的hw/display中包含了virtio-gpu后端的代码。
在这里qemu使用了Virgil 3D 这个工程来进行显卡模拟 参考Virgil 3D
Virgil 3D 目的是使用Host的3D加速技术来实现一个虚拟的3D GPU来供给虚拟机使用。