¿Cómo habilito el paso de dispositivos KVM en Linux?

13

Tengo una placa base MSI-GD65 Gaming y un Intel i7 4790. VT-D está habilitado en la sección de Características de la CPU de la BIOS.

Estoy ejecutando Ubuntu 14.04.1 LTS y cuando intento desconectar un dispositivo, recibo el siguiente mensaje:

# virsh nodedev-detach pci_0000_00_1f_2

error: Error al desconectar el dispositivo pci_0000_00_1f_2 error: Operación no admitida: ni la asignación de dispositivos VFIO ni KVM se admite actualmente en este sistema

Dmesg incluye información sobre IOMMU pero no puedo decir si esto significa que VT-D está habilitado

$ dmesg | grep -i iommu

[0.027450] dmar: IOMMU 0: reg_base_addr fed90000 ver 1: 0 cap c0000020660462 ecap f0101a
[0.027455] dmar: IOMMU 1: reg_base_addr fed91000 ver 1: 0 cap d2008020660462 ecap f010da
[0.027521]

¿Alguien puede aconsejarme qué necesito hacer para habilitar VT-D en este sistema y pasar por dispositivos PCI a los invitados KVM por favor?

Anónimo
fuente
¿Ha realizado un ciclo de energía completo después de habilitar VT y VT-d?
dyasny

Respuestas:

11

La solución a este problema es habilitar IOMMU en los parámetros de arranque de GRUB.

Puede hacer esto configurando lo siguiente en / etc / default / grub

GRUB_CMDLINE_LINUX_DEFAULT = "intel_iommu = on"

Si está utilizando un procesador AMD, debe agregar amd_iommu=onlos parámetros de arranque en su lugar

GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash amd_iommu = on"

Luego corre update-gruby reinicia

Este enlace me ayudó bastante: https://www.centos.org/forums/viewtopic.php?f=47&t=48115

Ver también: https://pve.proxmox.com/wiki/Pci_passthrough

Esto me eludió un poco, ya que creía que iommu era una alternativa AMD a VT-D.

Anónimo
fuente
Y si esto no funciona, es posible que su CPU no sea compatible con VT-D o AMD-VI (la pregunta lo deja claro: estoy publicando aquí para otros)
ndemou
5

Agregando a la respuesta de Anonymouslemming: Parece que hay un error en Ubuntu (18.04 para mí), lo que hace que se ignore la configuración de GRUB_CMDLINE_LINUX_DEFAULT en / etc / default / grub.

Se puede solucionar comentando GRUB_CMDLINE_LINUX_DEFAULT en /etc/default/grub.d/50-curtin-settings.cfg

https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1569567

Mads Y
fuente
1

Parece que tiene los requisitos de hardware porque otro módulo lo está utilizando (IOAPIC). En este caso, simplemente necesita configurar el software final.

Parece que debe asegurarse de tener todos los requisitos previos instalados para admitir la separación del dispositivo apropiado. Parece que no los tiene instalados o que no están configurados.

Debe tener las bibliotecas y los módulos de kernel apropiados instalados e inicializados antes de intentar usarlos en un caso como este. Estas serán varias utilidades del sistema "host" y módulos de kernel para su configuración KVM.

Debe leer la sección del manual sobre cómo configurar adecuadamente su solución KVM adecuada, y seguir esos pasos, antes de intentar simplemente ejecutar las utilidades. No se configuran simplemente en el primer lanzamiento solo porque están instalados los paquetes necesarios.

Tenga en cuenta que si el dispositivo en cuestión está incrustado en la placa base, técnicamente puede no ser un dispositivo PCI, sino un dispositivo mapeado por PCI. Estos dispositivos están realmente conectados por otros medios, pero se asignan al espacio PCI BIOS utilizando su BIOS. Pueden o no ser compatibles con la separación del dispositivo, dependiendo de varios aspectos de cómo están conectados al sistema.

Además, es posible que no pueda desconectar los subdispositivos sin desconectar los dispositivos principales, si sus controladores son interdependientes. Solo puede desconectar dispositivos con absoluta certeza de quién es el dispositivo principal: el controlador PCI, el puente PCI o algún otro controlador o puente de bus compatible

Robert Wm Ruedisueli
fuente
Gracias por la información. Creo que mi pregunta debería haber incluido "¿Dónde puedo encontrar documentación para hacer esto en KVM" para ser más específico.
Anonymouslemming
0

Estoy en centos7

Tuve este error que me llevó hasta aquí, pero mi problema no fue con la actualización (en mi caso) vim /etc/sysconfig/gruby la adición intel_iommu=onal final de la línea paraGRUB_CMDLINE_LINUX

Tuve que ejecutar este comando

grub2-mkconfig -o /boot/grub2/grub.cfg

luego reiniciar

nota: Sin embargo, también ejecuté grub2-mkconfig con un reinicio antes del comando anterior y eso no hizo nada por lo que vi.

referencia: https://bugzilla.redhat.com/show_bug.cgi?id=1269446

Comentario 11 y 12

gstlouis
fuente