首先,介绍一些有关 iGPU 直通的背景知识,因为它可能相关:
- 我的一台虚拟机应该能够通过主板的物理 HDMI 端口播放音频和视频。就我而言,我专门用它来科迪。
- 我实际上已经在客人早些时候,由于不同的原因。
- 客户机获得 2 个与主机同型号的虚拟 CPU 核心(
<cpu mode='host-passthrough'>
),即Intel i5-7400
。 - iGPU 带有
Intel HD Graphics 630
音频Intel 200 Series PCH HD
功能。 - 实际的 GPU 设备位于其自己的 IOMMU 组中,但音频与 SMBus/芯片组设备位于同一组中。为了“隔离”音频设备,我必须编辑主机的 grub 配置,使其包含以下内容:
GRUB_CMDLINE_LINUX_DEFAULT="... vfio-pci.ids=8086:a2f0 modprobe.blacklist=i2c_i801,i2c_smbus"
- 然后我只需添加
Host PCI Device
s 即可virt-manager
。Passthrough 现已完全正常运行。
现在,播放性能有些奇怪,即使是在一些好的高清东西:
- 在进行任何更改之前,我开始播放视频,Kodi 会提示
Hardware decoding: Inactive
(当我按下o
以显示一些视频信息时)。但是,播放实际上非常流畅,客户机中的 CPU 负载也不太高:在1.53, 1.33, 1.24
播放非常动态的场景几分钟后,平均负载为。此外,在 Kodi 设置中,所有与加速相关的选项都是不可见的,这意味着它实际上没有检测到任何可用的加速形式。事实上,启动时会出现一些错误:
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: va_openDriver() returns -1
我不确定它是如何决定使用那个特定的驱动程序的,我认为它可能只是尝试在该目录中找到的第一个驱动程序。无论如何,它是错误的,所以我运行了:
$ export LIBVA_DRIVER_NAME=iHD
$ export LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
$ vainfo 2>&1 | grep ^libva
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
重启 Kodi 后,我现在可以使用 VAAPI 设置,因此我确保至少启用了 h264 并播放了相同的视频。但是,音频和视频都立即变得极度不稳定,甚至在搜索特定场景之前。按下键盘上的空格键暂停播放后,仍然需要整整 5 秒钟才能真正暂停。最后一分钟的平均负载立即接近3.0.
o
立即按下做提到加速度实际上正在被使用。只是为了确定我
unset
导出并成功验证了它仍然可以在之前的设置下顺利播放。我可以可靠地重现这两种行为。
我的猜测是,由于它是一个 iGPU,因此可能不需要明确使用 VAAPI,并且默认情况下它使用更优化的东西?或者,也许我还使用音频而不是仅仅使用 GPU 电源这一事实导致 VAAPI 变得复杂?