You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux 5.15.126内核下不依赖VFIO/IOMMU实现KVM GPU直通的可行性咨询

Linux 5.15.126内核下不依赖VFIO/IOMMU实现KVM GPU直通的可行性咨询

我最近在研究KVM GPU直通,发现大部分教程都是基于IOMMU+VFIO实现的,想问问有没有办法绕开IOMMU?我的内核版本是5.15.126。


更新1:尝试使用libvirt的legacy KVM直通方式

我在libvirt的文档里了解到,<forward type='hostdev'>接口可以通过添加<driver name='kvm'/>子元素,指定使用由KVM内核模块直接处理的传统设备直通方式(而非VFIO)——这个特性从libvirt 1.0.5版本开始支持,要求内核3.6及以上;1.1.3版本后,默认规则是如果系统能加载VFIO就优先用VFIO,否则回退到kvm方式。

于是我修改了虚拟机的XML配置,加入了对应的驱动指定:

<hostdev mode='subsystem' type='pci' managed='yes'>
  <driver name='kvm'/>
  <source>
    <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
  </source>
  <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
</hostdev>

但启动虚拟机时直接失败,报错:

error: unsupported configuration: host doesn't support legacy PCI passthrough

更新2:查看libvirt源码定位问题

我翻了libvirt 8.0.0的源码,发现问题根源:

  • domain_conf.c里虽然还保留了VIR_NETWORK_FORWARD_DRIVER_NAME_KVM的分支逻辑,会将后端设置为VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM
  • 但到了qemu_hostdev.c中,当检测到要使用VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM时,直接抛出错误并返回失败:
case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM:
    virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
    _("host doesn't support legacy PCI passthrough"));
return false;

更新3:查阅libvirt版本确认支持情况

查了libvirt的发布说明,在**v5.7.0(2019-09-03)**版本就已经彻底移除了KVM直通的支持:

The KVM style of PCI device assignment was removed from the kernel in version 4.12.0 after being deprecated since 4.2.0. Libvirt defaults to VFIO for a long time. Remove support for KVM device assignment from libvirt too.

另外看libvirt的枚举定义,目前标注的PCI直通后端有4种,但KVM方式已经被实际禁用:

/* the backend driver used for PCI hostdev devices */
typedef enum {
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT, /* detect automatically, prefer VFIO */
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM,    /* force legacy kvm style */
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO,   /* force vfio */
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN,    /* force legacy xen style, use pciback */
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST
} virDomainHostdevSubsysPCIBackendType;

最终结论

折腾了一下午之后,我得出的结论是:在Linux 5.15版本的内核下,不修改内核的话,想要不依赖VFIO/IOMMU实现KVM GPU直通是不可能的

备注:内容来源于stack exchange,提问作者Jason Lee

火山引擎 最新活动