Intel显卡分配原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Intel显卡分配原理
朋友们,感觉是时候说,Intel显卡设备(IGD)目前在qemu.git中可用了,而且将成为即将到来的QEMU2.7发行版本的一部分。
source tree上已经有了相当详细的文档,大家可以看下。
其中描述了两种模式,传统模式和通用直通(UPT)模式,两者各有利弊。
哪种模式更适合你取决于你的硬件。
UPT模式只适用于boardwell和更新的处理器,而传统模式适用于SandyBridge及其之后的处理器。
如果你的处理器比SandyBridge更老,别用了,它不会为你工作的。
如果你不清楚这些陌生名字的意义,到Wikipedia和 Ark看看。
高层次的概括就是,传统模式很像我们支持的GeForce,IGD想要成为虚拟机中主要的、独占的显卡设备。
而且,虚拟机中IGD地址必然在PCI 00:02.0,目前只有Seabios支持,以及只有440FX芯片组支持(不是Q35),IGD设备必须是主要的主机显卡设备,主机需要运行在v4.6或者更高版本的内核上。
明确地分配主机的主显卡,有点和我们的GPU分配策略大相径庭。
但是我们依赖于运行IGD视频ROM,同样也就是依赖于VGA和强加大部分以上的需求(添加CONFIG_VFIO_PCI_VGA到需求列表)。
我已经看到支持UEFI的IGD ROM,也就是为什么OVMF(开放虚拟机固件)没有支持,但可能在OVMF中会支持CSM(兼容性支持模块)和一些的额外代码。
传统模式工作在Linux和Windowns客户机(如果你愿意也可以是其他)。
i915驱动深受通用视频驱动问题的困扰,也就是解绑和重新绑定IGD到驱动上的时候,有时整个系统会崩溃。
我个人是将
i915驱动列入黑名单来避免这种情况。
当然一些人已经发现尝试用独立的GPU来完成,大量的驱动准备投入到设备中保持控制台工作。
我见过的主要的驱动是vesafb和efifb,哪个用在你的系统上取决于你的主机防火墙设置,传统的BIOS还是UEFI。
关闭这些配置,只要简单添加video=vesafb:off或者video=efifb:off到内核命令行(不确定用哪个?两个都试一下吧,video=vesafb:off,efifb:off)。
首先你要注意的是,当你用已经列入黑名单的i915驱动启动一个IGD系统,更多基础的帧缓存驱动关闭,就意味着在grub之后,你在显卡上得不到任何东西。
为此,我使用一个串行控制台,或许你更喜欢盲目运行,寄希望于系统启动可以ssh 远程登录。
如果你按照这个过程,可以在你的libvirt XML简单地创建一个<hostdev>,像这样:
<hostdev mode=’subsystem’ type=’pci’managed=’yes’>
<driver name=’vfio’/>
<source>
<address domain=’0x0000′ bus=’0x00′ slot=’0x02’function=’0x0’/>
</source>
<alias name=’hostdev0’/>
<address type=’pci’ domain=’0x0000′ bus=’0x00′ slot=’0x02’function=’0x0’/> </hostdev>
而且,分配IGD设备(总是00:02.0)到地址00:02.0是必要的。
删除<video>和<graphics>部分,一切都能神奇地工作。
警告一下,我最新的CPU是Broadwell,我已经说过这要skylake工作,但是IGD几乎不是标准化的,每个新的实现似乎都会调整一些东西。
一些人可能会好奇为什么它不能工作在Q35上,这就引出了对UPT模式的探讨;IGD不是个独立的GPU,但是”集成“不仅仅意味着GPU嵌入到系统中,这里是指GPU是附加在系统上。
这就是为什么IGD分配没有“只是工作”,为什么你需要一个通过vfio和BIOS支持暴露某些区域的主机内核,以及它需要一个特定的地址等等。
其中一个需求是视频ROM实际关心设备在PCI地址00:1f:0,即ISA/LPC桥上的一些属性。
Q35在那个位置有着它自己的桥,我们不能因为兼容性就简单地修改桥的ID。
因此桥和Q35冲突,意味着IGD分配不能工作在Q35上。
也就意味着PCI地址00:1f:0不能使用在440FX机器上。
UPT就是这样。
Intel深知IGD的发展使得它难于处理设备分配。
为了应付这个问题,软件和硬件上都要做出了改变来助力IGD更友好地分配。
好消息,对吗?首先,在UPT模式下,IGD作为虚拟机的次要显卡,没有VGA模式支持(顺便说一句,传统模式下x-vga=on 自动添加到QEMU)。
事实上,默认情况下UPT模式不支持任何类型的输出。
你问这有什么用? 在模拟显卡和你可以建立镜像的IGD之间,你有一个远程能力、硬件加速显卡虚拟机。
另外,如果你添加可选选项x-igd-opregion=on到vfio-pic设备,可以得到物理显示输出,但是需要你的主机运行v4.6或更新的内核以及即将到来的QEMU2.7,而没有输出的UPT可能已经工作相当长的一段时间了。
UPT模式对IGD的PCI地址没有要求,但是要注意,大多数虚拟机的防火墙、SeaBIOS或者OVMF,定义主显卡为最低PCI地址的那张。
通常这不是问题,但是某些人可能会创建疯狂的配置。
你依然需要完成上述的黑名单和视频禁用,否则就冒险从主机绑定和解绑i915驱动,赌一把看它会不会每次都崩溃。
UPT听起来不错,除了为什么opregion可选?事实证明,如果你想要制作上面提到的镜像,以及用opregion开启物理输出的话,你真的需要一个显示器连接到设备,否则你的应用程序不能得到硬件加速。
如果IGD没有任何输出,那么放心地使用硬件加速,别管什么物理连接。
但是读者如果需要这个功能(类似于x-vga=on),应该知道怎么创建包装脚本,添加这个额外的选项。
我不认为Intel真的想要支持这种混杂模式,才加了实验性的x- 可选前缀标签。
对于UPT模式的多一个收获,intel似乎另有期待,我尝试用UPT运行linux客户机,但是没有成功。
只是先走一步,仅在这一点上也是为了你的windowns客户机。
还有就是,笔记本的显示功能应该正常,我相信开关输出也可以,但是在笔记本上工作不方便,因为你没有可用的串行控制台。
要注意,当你使用input-linux绑定到笔记本键盘和鼠标(不是触控式的IME),我不知道怎么使热键工作,这是个大麻烦。
一些IGD驱动在分配时会在主机上产生DMAR 错误,尤其是每台主机首次开机。
不用过于紧张,尤其是显示初始化之前如果它停止了。
这似乎是在一个不能访问BIOS设置的页表的IOMMU上下文时,重置IGD引起的。
除非是不断地打印,否则它们多半是可以被忽略的。
如果你有一些比SandyBridge更老的硬件,并希望它们能派上用场,即便被告知应该停止的情况下也要继续尝试,对不起,SandyBridge有了一些硬件改进,我还没有对更老的设备做任何测试,也真的不想为这些过时的硬件支持额外的代码。
此外,这些相当老的硬件,无论如何你都需要一个升级的理由。
有了这些支持,我切换到桌面系统后,主机从U盘启动,之前的裸机fedora安装使用IGD虚拟化,运行在我创建好的GeForce虚拟机上。
试一下吧,祝你好运。