Un notición para los que tienen NVIDIA y recurren al multiarranque, máquinas virtuales o passthough

Buenos días, ayer saltó la liebre en varios foros, un usuario ha publicado su trabajo: un apaño para convertir una gran cantidad de NVIDIA en VGPU. Resumiendo mucho y mal, todas las máquinas virtuales que creemos tendrán acceso a la GPU sin hacer nada especial.

Enlace a GitHub original

Si indagáis un poco veréis enlaces a reddit y similares, discord (donde están muy activos) y demás. A lo largo del fin de semana han ido añadiendo más tarjetas (y más están pendientes según sigan haciendo pruebas) y simplificado el proceso, además ya han ido saliendo tutoriales para diferentes sistemas (Proxmox ya puede compartir la misma GPU en sus máquinas virtuales por ejemplo).

A ver a dónde nos lleva, por el momento pinta muy bien.

Antes de que nadie pregunte...esto es sólo para NVIDIA, AMD se queda fuera. La explicación es que NVIDIA tenía dos gamas, GEFORCE y QUADRO, una para escritorio y otra habillitada para vgpu, pero en el fondo usaba los mismos componentes y la limitación era simplemente por software. Esta "ñapa" elimina esa modificación.
Bastante interesante. Me lo apunto para investigar. Gracias por el aviso [beer]
Pues sí que pinta bien, veremos a ver cómo avanza y a ver si de aquí poco es fácil montarse la máquina virual, aunque si es por drivers igual nvidia actualiza y deja de funcionar.

Directamente es que no entiendo que tenga que tener esta restricción por software, pero que más les da y ahora además que han activado el passthought para las geforce en los últimos drivers, en fin, ojalá de aquí poco quiten eso directamente y se pueda usar aún más fácil.
eric_14 escribió:Pues sí que pinta bien, veremos a ver cómo avanza y a ver si de aquí poco es fácil montarse la máquina virual, aunque si es por drivers igual nvidia actualiza y deja de funcionar.

Directamente es que no entiendo que tenga que tener esta restricción por software, pero que más les da y ahora además que han activado el passthought para las geforce en los últimos drivers, en fin, ojalá de aquí poco quiten eso directamente y se pueda usar aún más fácil.


Lo del último controlador es lo de menos, simplemente estaban poniendo puertas al campo y se solventaba haciendo una ñapa muy sencilla (añadir una línea de código en la configuración de la máquina virtual).
Esto es diferente y más bestia: NVIDIA vende por un lado las tarjetas para usuarios y por otro las tarjetas para empresas (las QUADRO), siendo estas últimas la que tienen posibilidad de virtualización.

Lo que ha pasado es que una persona ha descubierto que la diferencia radica en el hardware, de ahí que haya salido esta solución sofware para desbloquear las funciones de virtualización.

Parece que la cosa está bastante activo y se ve movimiento en el código. Ahora que NVIDIA no haga una de las suyas y cambie algo para que no podamos usarlas de esa forma...
Llevo días mirando a ver si sacan algún vídeo o algo de como funciona pero de momento no veo nada. [carcajad]

Pero jode que estas cosas que lo podrían activar para todo y darle soporte oficial (realmente les debería dar igual, más ventas se podrían llevar)

Lo mejor sería que las AMD también pudieran, así no habría tanto problema ya que los drivers son libres pero si todavía no hay nada igual es que no se puede.
Yo tengo una maquina con Nvidia y sigo viendo mucho mas practico tener una partición con Windows LTSC que no tiene ni navegador por que es solo para jugar que no el lio ese del passthough. Llamadme raro.
Hace tiempo que lo uso asi, y ese modo de nvidia, posiblemente lo pruebe mucho tiempo despues. Mi instalacion funciona muy bien con el fix que la comunidad hizo XD

ejemplo
1985a escribió:Hace tiempo que lo uso asi, y ese modo de nvidia, posiblemente lo pruebe mucho tiempo despues. Mi instalacion funciona muy bien con el fix que la comunidad hizo XD

ejemplo


Hola que metodo utilizaste? a ver si no depende de systemd
Brutico escribió:
1985a escribió:Hace tiempo que lo uso asi, y ese modo de nvidia, posiblemente lo pruebe mucho tiempo despues. Mi instalacion funciona muy bien con el fix que la comunidad hizo XD

ejemplo


Hola que metodo utilizaste? a ver si no depende de systemd


Empeze por este camino hace casi 3 años.

El metodo mio es Single GPU Passthrough.
EL modo de conexion a internet y comunicacion entre host<>guest es usando un bridge y conexion ssh desde guest.

Nota: Por ahora, para lo unico que systemd esta metiendo mano, es para el asunto de aislar los cpus, cosa que yo no he hecho todavia.

El audio, puede ser tanto de la GPU, pero en mi caso, uso un socket desde pipewire y asi no tengo que estar conectado y desconectando cables.

Puedes usarlo tanto con libvirt como sin el, ya que puedes exportar o importar la configuracion para utilizar con libvirt o sin el.
@1985a Me interesa que tutorial seguiste?
Brutico escribió:@1985a Me interesa que tutorial seguiste?



De un yuri alex, no recuerdo bien su nombre.

Esta guia, la vi mucho tiempo despues, y me gusto, todo muy resumido.

https://github.com/joeknock90/Single-GPU-Passthrough


Te paso un blog donde voy anotando todo lo que he ido experimentando con la maquina virtual.

Nota: Algunas cosas no estan muy actualizadas, como la guia single gpu pass, pero pueda ser que te sirva de apoyo.
1985a escribió:
Brutico escribió:@1985a Me interesa que tutorial seguiste?



De un yuri alex, no recuerdo bien su nombre.

Esta guia, la vi mucho tiempo despues, y me gusto, todo muy resumido.

https://github.com/joeknock90/Single-GPU-Passthrough


Te paso un blog donde voy anotando todo lo que he ido experimentando con la maquina virtual.

Nota: Algunas cosas no estan muy actualizadas, como la guia single gpu pass, pero pueda ser que te sirva de apoyo.


Muchísimas gracias voy a probarlo ahora a ver si me aclaro
@Brutico
Siempre.

Cuando tengas un tiempo con este metodo, ya no volveras al metodo tradicional y tu Windows se volvera un archivo mas el cual vivira por siempre en tu instalacion de Linux.. Siempre y cuando elijas el metodo de archivo, si utilizas el metodo de disco o particion, la cosa cambia.
Considerando que casi todo es emulado, a excepcion de la GPU y el CPU, no me quejo de ese rendimiento.

Lo que si puedo comentar, es que ahora mismo, tengo rendimiento casi nativo por decirlo de una manera.

Comparacion entre la maquina virtual que tengo y una captura de un usuario random con su sistema nativo
o baremetal como se conoce ingles. Ver spoiler.
MIA
Imagen

Usuario random

Imagen
1985a escribió:@Brutico
Siempre.

Cuando tengas un tiempo con este metodo, ya no volveras al metodo tradicional y tu Windows se volvera un archivo mas el cual vivira por siempre en tu instalacion de Linux.. Siempre y cuando elijas el metodo de archivo, si utilizas el metodo de disco o particion, la cosa cambia.
Considerando que casi todo es emulado, a excepcion de la GPU y el CPU, no me quejo de ese rendimiento.

Lo que si puedo comentar, es que ahora mismo, tengo rendimiento casi nativo por decirlo de una manera.

Comparacion entre la maquina virtual que tengo y una captura de un usuario random con su sistema nativo
o baremetal como se conoce ingles. Ver spoiler.
MIA
Imagen

Usuario random

Imagen


Vale hay algo que hago mal... creo una máquina virtual normal sin elegir gpu dedicada porque si la elijo no se crea la máquina porque la gpu esta en uso
Brutico escribió:
1985a escribió:@Brutico
Siempre.

Cuando tengas un tiempo con este metodo, ya no volveras al metodo tradicional y tu Windows se volvera un archivo mas el cual vivira por siempre en tu instalacion de Linux.. Siempre y cuando elijas el metodo de archivo, si utilizas el metodo de disco o particion, la cosa cambia.
Considerando que casi todo es emulado, a excepcion de la GPU y el CPU, no me quejo de ese rendimiento.

Lo que si puedo comentar, es que ahora mismo, tengo rendimiento casi nativo por decirlo de una manera.

Comparacion entre la maquina virtual que tengo y una captura de un usuario random con su sistema nativo
o baremetal como se conoce ingles. Ver spoiler.
MIA
Imagen

Usuario random

Imagen


Vale hay algo que hago mal... creo una máquina virtual normal sin elegir gpu dedicada porque si la elijo no se crea la máquina porque la gpu esta en uso



Visita el blog que te puse, mira el post GPU Passthrough. Fijate como hice la maquina virtual.

Esta algo desactualizado, pero la creacion de la maquina virtual, todavia tiene relevancia.
@1985a He volcado mi bios y según lo que leo hay que borrar con un editor hexadecimal justo antes de la letra U que está en la línea Video
Imagen

Pero a mi la linea empieza por U, es que no me inicia la maquina virtual.

estoy siguiendo este tutorial
https://dennisstanistan.com/blog/716/si ... h-kubuntu/
Brutico escribió:@1985a He volcado mi bios y según lo que leo hay que borrar con un editor hexadecimal justo antes de la letra U que está en la línea Video
Imagen

Pero a mi la linea empieza por U, es que no me inicia la maquina virtual.

estoy siguiendo este tutorial
https://dennisstanistan.com/blog/716/si ... h-kubuntu/


No se que modelo tienes, y parece que no viste el post que te mande del blog mio cawento

Si tu grafica es de la serie 10, puedes hacerlo o bien, usando "NVIDIA-vBIOS-VFIO-Patcher" que es super sencillo, o usando nvflash para saber el tamaño de esa parte a borrar y usar dd para lo mismo.

nvflash --version | grep IFR

Aqui busca IFR Image Size.
En mi caso, me sale 2560 bytes, le paso
dd if=///bios of=/salvada.rom  bs=2560 skip=1


Si todo salio bien, deberia aparecer algo parecido a lo que tenias antes, usando el programa nvflash --version

Este metodo, siempre y cuando tengas una grafica de la serie 10. Las demas no se, porque no tengo.
pero eso que comentáis no es para la gpu virtual, no? es para el passthough de siempre
eric_14 escribió:pero eso que comentáis no es para la gpu virtual, no? es para el passthough de siempre

Sí, lo he conseguido hacer funcionar XD

Lo bueno es que una sola gpu y un solo monitor

Lo primero en kernel activar:
[*] Virtualization  --->
    <M>   KVM for AMD processors support


[*] Virtualization --->
    <*>   Host kernel accelerator for virtio net

Device Drivers  --->
    [*] Network device support  --->
        [*]   Network core driver support
        <*>   Universal TUN/TAP device driver support


[*] Networking support  --->
        Networking options  --->
            <*> The IPv6 protocol
            <*> 802.1d Ethernet Bridging


Luego qemu lo he compilado así:

ebuild   R    ] app-emulation/qemu-6.0.0::gentoo  USE="aio alsa bzip2 caps curl doc fdt filecaps gtk io-uring jpeg multipath ncurses nfs nls opengl oss pin-upstream-blobs plugins png pulseaudio sdl seccomp slirp spice udev usb usbredir vhost-net vhost-user-fs virgl virtfs vnc xattr zstd -accessibility -capstone -debug -glusterfs -gnutls -infiniband -iscsi -jack -jemalloc -lzo -numa -python -rbd -sasl -sdl-image (-selinux) -smartcard -snappy -ssh -static -static-user -systemtap -test -vde -vte -xen -xfs" PYTHON_TARGETS="python3_8 -python3_7 -python3_9" QEMU_SOFTMMU_TARGETS="arm sparc x86_64 -aarch64 -alpha -avr -cris -hppa -i386 -lm32 -m68k -microblaze -microblazeel -mips -mips64 -mips64el -mipsel -moxie -nios2 -or1k -ppc -ppc64 -riscv32 -riscv64 -rx -s390x -sh4 -sh4eb -sparc64 -tricore -unicore32 -xtensa -xtensaeb" QEMU_USER_TARGETS="x86_64 -aarch64 -aarch64_be -alpha -arm -armeb -cris -hexagon -hppa -i386 -m68k -microblaze -microblazeel -mips -mips64 -mips64el -mipsel -mipsn32 -mipsn32el -nios2 -or1k -ppc -ppc64 -ppc64abi32 -ppc64le -riscv32 -riscv64 -s390x -sh4 -sh4eb -sparc -sparc32plus -sparc64 -xtensa -xtensaeb" 0 KiB


Creo la máquina virtual usando OVMF

Creo dos unidades ópticas una con la ISO de Windows y otra con los drivers para usar el disco SSD en virtIO
<hostdev mode="subsystem" type="pci" managed="yes">
  <source>
    ...
  </source>
  <rom file="/home/juanpe/Documentos/BIOS.rom"/>
  ...
</hostdev>

Luego en arranque pones las dos unidades ópticas, en CPU como host-passthrough, socket 1, centro 6 e hilos 2.

Inicio la máquina virtual, no me detecta el SSD Windows, busco controlador que está en la ISO virtIO, amd64 bits → windos 10, ok.

Una vez instalado, apagas y borras de la máquina virtual, la tableta, etc... como en la imagen
Imagen

Añades usb tu ratón, usb teclado, pci de tú grafica video y audio, mi DAC de audio.

Te bajas tu BIOS de tú grafica y la parcheas

Ahora editamos la máquina virtual para añadir la BIOS

<hostdev mode="subsystem" type="pci" managed="yes">
  <source>
    ...
  </source>
  <rom file="/home/juanpe/Documentos/BIOS.rom"/>
  ...
</hostdev>


También añado esto:

<features>
    ...
    <hyperv>
      ...
      <vendor_id state="on" value="thissucks"/> <!-- value can be whatever like "hello", maximum of 12 characters-->
    </hyperv>
      <hidden state="on"/>
      ...
    <ioapic driver="kvm"/>
</features>


Luego creo los directorios

sudo mkdir /etc/libvirt/hooks/qemu.d


Clono
sudo wget 'https://raw.githubusercontent.com/PassthroughPOST/VFIO-Tools/master/libvirt_hooks/qemu' -O /etc/libvirt/hooks/qemu


Doy permisos ejecución
sudo chmod +x /etc/libvirt/hooks/qemu
 


Reinicio libvirt
sudo service libvirtd restart


Creo directorios donde pego dos script
sudo mkdir -pv  /etc/libvirt/hooks/qemu.d/win10/prepare/begin

sudo mkdir -pv  /etc/libvirt/hooks/qemu.d/win10/release/end


el script de prepare/begin/start.sh
#!/bin/bash
# Original script provided at https://github.com/joeknock90/Single-GPU-Passthrough
# You should only use these scripts as templates and write your own as stated in the repository's readme.

# Helpful to read output when debugging
set -x

# I don't need to call that
#systemctl isolate multi-user.target

# Stop the display manager service
systemctl stop sddm.service

# Stop the pulse audio service
systemctl stop pulseaudio.service

# Terminate KDE
kquitapp5 plasmashell || killall plasmashell
killall kwin_x11

# Unbind VTconsoles
echo 0 > /sys/class/vtconsole/vtcon0/bind
echo 0 > /sys/class/vtconsole/vtcon1/bind

# Unbind EFI-Framebuffer
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind

# If you have the beep package installed and your motherboard has a speaker then this can provide you
# with some sort of feedback on what's going on.
#enable pcspkr
#modprobe pcspkr
#beep -l 100 -f 1000

# Avoid a Race condition by waiting 5 seconds. This can be calibrated to be shorter or longer if required for your system
sleep 8

# Unload all Nvidia drivers
modprobe -r nvidia_drm
modprobe -r nvidia_uvm
modprove -r nvidia_modeset
modprobe -r nvidia
# snd_hda_intel is used for the HDMI audio
# snd_hda_intel is blacklisted completely on my system, so I don't really need a call to remove it since it's not loaded.
modprobe -r snd_hda_intel

#beep -l 500 -f 1000

nvProbCount=$(lsmod | grep nvidia | wc -l)

if [ $nvProbCount -gt 0 ]
then
        # what the fuck!
        # let us know via the pc speaker that something got fucked
        # beep -f 300 -l 1000
        sleep 1000 # wait a second
        virsh destroy {your_vm_name} # error, forcefully shut down the vm
        exit 1
fi

## Detach the GPU
virsh nodedev-detach pci_0000_09_00_0 # Change pci_0000_25_00_0 to the appropriate PCI address that your GPU resides on.
virsh nodedev-detach pci_0000_09_00_1 # Change pci_0000_25_00_1 to the appropriate PCI address that your GPU audio controller resides on.

# Load VFIO Kernel Module
modprobe vfio-pci

#beep -l 100 -f 1000
#modprobe -r pcspkr


el script release/end/revert.sh
#!/bin/bash
# Original script provided at https://github.com/joeknock90/Single-GPU-Passthrough
# You should only use these scripts as templates and write your own as stated in the repository's readme.

# Helpful to read output when debugging
set -x

# Unload VFIO-PCI Kernel Driver
modprobe -r vfio-pci
modprobe -r vfio_iommu_type1
modprobe -r vfio
 
# Re-Bind GPU to Nvidia Driver
virsh nodedev-reattach pci_0000_09_00_1 > /dev/null 2>&1
virsh nodedev-reattach pci_0000_09_00_0 > /dev/null 2>&1

# Rebind VT consoles
echo 1 > /sys/class/vtconsole/vtcon0/bind
# Some machines might have more than 1 virtual console. Add a line for each corresponding VTConsole
echo 1 > /sys/class/vtconsole/vtcon1/bind

# Re-Bind EFI-Framebuffer
nvidia-xconfig --query-gpu-info > /dev/null 2>&1
echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind

# It's blacklisted on my system, no need for me to enable it back.
#modprobe snd_hda_intel
modprobe nvidia_uvm
modprobe nvidia_drm
modprobe nvidia_modeset
modprobe nvidia

# Restart Display Manager
systemctl start sddm.service

kstart5 plasmashell


Hasta aquí no me iba. Me faltaba un parche en el kernel y unas opciones.

En el kernel.
Device Drivers --->
  [*] IOMMU Hardware Support --->
            Generic IOMMU Pagetable Support ----
      [*]   AMD IOMMU support
      <*>     AMD IOMMU Version 2 driver
      [*]   Support for Intel IOMMU using DMA Remapping Devices
      [*]     Support for Shared Virtual Memory with Intel IOMMU
      [*]     Enable Intel DMA Remapping Devices by default
      [*]   Support for Interrupt Remapping


En el grub editamos
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=1 amd_iommu=on rd.driver.pre=vfio-pc pcie_acs_override=downstream,multifunction"


Aplicamos parche de gentoo

git clone https://github.com/feniksa/gentoo_ACS_override_patch.git /etc/portage/patches


Y remergemos gentoo-sources


Reinicio y con dos click windows ya es un programa mas de linux
Duda.

Tengo un viejo Phenom II X6 1055T con una NVIDIA GTX 1060. Puedo seguir el tutorial? O al ser el Phenom tan viejo carece de las extensiones necesarias para virtualizar sin perder rendimiento

Edito: obtengo el siguiente error al intentar exportar la configuración

sudo virsh --connect qemu:///system define /home/edgar/win10.xml
error: Falló al definir un dominio para /home/edgar/win10.xml
error: error interno: tipo de fuente pci 'alias' desconocido


Mi archivo de configuración esta así:

<domain type='kvm' id='7' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>win10</name>
  <uuid>2811c151-b7af-4705-8220-1eac8b8e1656</uuid>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
      <libosinfo:os id="http://microsoft.com/win/10"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit='KiB'>6291456</memory>
  <currentMemory unit='KiB'>6291456</currentMemory>
  <vcpu placement='static'>6</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-5.2'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE_4M.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='PowerPro'/>
    </hyperv>
    <vmport state='off'/>
  </features>
  <cpu mode='host-passthrough' check='none' migratable='on'/>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/var/lib/libvirt/images/win10.qcow2'/>
      <target dev='sda' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/edgar/Descargas/Win10_20H2_v2_Spanish(Mexico)_x64.iso'/>
      <target dev='sdb' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0' model='qemu-xhci' ports='15'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x11'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='3' port='0x12'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0x13'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='pci' index='5' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='5' port='0x14'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
    </controller>
    <controller type='pci' index='6' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='6' port='0x15'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:fc:6b:fc'/>
      <source network='default'/>
      <model type='e1000e'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich9'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
      <alias name='hostdev0'/>
      <rom file='/etc/libvirt/hooks/qemu.d/GP106P.rom'/>   
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
    </hostdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </memballoon>
  </devices>
</domain>



alguna idea?

Edito: sabia que no podria hacer mucho con hardware tan viejo pero tenia curiosidad

sudo dmesg | grep -i -e DMAR -e IOMMU
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-6-amd64 root=UUID=0a75800f-67e7-42eb-91eb-cb400b53bba0 ro quiet amd_iommu=on iommu=pt
[    0.043918] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-6-amd64 root=UUID=0a75800f-67e7-42eb-91eb-cb400b53bba0 ro quiet amd_iommu=on iommu=pt
[    0.069422] AGP: Please enable the IOMMU option in the BIOS setup
[    0.401153] iommu: Default domain type: Passthrough (set via kernel command line)
[    1.239860] PCI-DMA: using GART IOMMU.
[    1.239862] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture
[    1.246256] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>
[    1.246257] AMD-Vi: AMD IOMMUv2 functionality not available on this system
@Cory

Habilita el IOMMU en tu placa base
@drumtronicpw01011110

Gracias por la ayuda, la placa madre es una gigabyte ga880gm-usb3 y no veo por ningún lado la opción para habilitar IOMMU
Cory escribió:@drumtronicpw01011110

Gracias por la ayuda, la placa madre es una gigabyte ga880gm-usb3 y no veo por ningún lado la opción para habilitar IOMMU


Entonces estás jodido. Ese procesador soporta IOMMU, pero parece ser que tu placa no. Aún así intenta a probar esto a ver si te hace algo:
https://pve.proxmox.com/wiki/Pci_passthrough#AMD_CPU
Cory escribió:@drumtronicpw01011110

Gracias por la ayuda, la placa madre es una gigabyte ga880gm-usb3 y no veo por ningún lado la opción para habilitar IOMMU



De acuerdo al manual de tu mobo, probablemente la opcion sea esta

BIOS Setup- 44 -(Note) This item is present only when you install a CPU that supports this feature
Virtualization

Virtualization allows a platform to run multiple operating systems and applications in independent parti-tions. With virtualization, one computer system can function as multiple virtual systems. (Default: Disabled)


Lo encontraras en las opciones avanzadas del bios.
@drumtronicpw01011110 @1985a

Gracias a ambos pero al parecer si estoy jodido. La opción de Virtualization ya la tenia activa y lo de https://pve.proxmox.com/wiki/Pci_passthrough#AMD_CPU no funciono :(
1985a escribió:
Cory escribió:@drumtronicpw01011110

Gracias por la ayuda, la placa madre es una gigabyte ga880gm-usb3 y no veo por ningún lado la opción para habilitar IOMMU



De acuerdo al manual de tu mobo, probablemente la opcion sea esta

BIOS Setup- 44 -(Note) This item is present only when you install a CPU that supports this feature
Virtualization

Virtualization allows a platform to run multiple operating systems and applications in independent parti-tions. With virtualization, one computer system can function as multiple virtual systems. (Default: Disabled)


Lo encontraras en las opciones avanzadas del bios.


No no, una cosa es la virtualización (SVM AMD, VT-x Intel) Y otra es el IOMMU/VT-d


Cory escribió:@drumtronicpw01011110 @1985a

Gracias a ambos pero al parecer si estoy jodido. La opción de Virtualization ya la tenia activa y lo de https://pve.proxmox.com/wiki/Pci_passthrough#AMD_CPU no funciono :(


Por lo visto, ese chipset no soporta IOMMU según dicen aquí: https://www.phoronix.com/forums/forum/h ... post245750

EDIT: De hecho... https://en.wikipedia.org/wiki/AMD_800_chipset_series

Así que el problema no es la CPU. Es la placa
Pues es una lastima. Quería probar que tal rendía en un equipo antiguo
drumtronicpw01011110 escribió:
1985a escribió:
Cory escribió:@drumtronicpw01011110

Gracias por la ayuda, la placa madre es una gigabyte ga880gm-usb3 y no veo por ningún lado la opción para habilitar IOMMU



De acuerdo al manual de tu mobo, probablemente la opcion sea esta

BIOS Setup- 44 -(Note) This item is present only when you install a CPU that supports this feature
Virtualization

Virtualization allows a platform to run multiple operating systems and applications in independent parti-tions. With virtualization, one computer system can function as multiple virtual systems. (Default: Disabled)


Lo encontraras en las opciones avanzadas del bios.


No no, una cosa es la virtualización (SVM AMD, VT-x Intel) Y otra es el IOMMU/VT-d


Cory escribió:@drumtronicpw01011110 @1985a

Gracias a ambos pero al parecer si estoy jodido. La opción de Virtualization ya la tenia activa y lo de https://pve.proxmox.com/wiki/Pci_passthrough#AMD_CPU no funciono :(


Por lo visto, ese chipset no soporta IOMMU según dicen aquí: https://www.phoronix.com/forums/forum/h ... post245750

EDIT: De hecho... https://en.wikipedia.org/wiki/AMD_800_chipset_series

Así que el problema no es la CPU. Es la placa



muy cierto y para un mobo del 2011?? no se puede esperar eso.
De todas formas estáis hablando de equipos muy antiguos, cosa que para esto no tiene sentido. A un equipo con esa edad no se le puede poner una gráfica a la que merezca la pena hacer el "passthough". En esos equipos sí se puede virtualizar como siempre se ha hecho, lo de pasar la gráfica es para las hornadas "actuales".
1985a escribió:
muy cierto y para un mobo del 2011?? no se puede esperar eso.


Supongo que en ese año el IOMMU se reservaría para placas ed gama más alta, pero ni idea. La mía ya era de 2013

verdezito escribió:De todas formas estáis hablando de equipos muy antiguos, cosa que para esto no tiene sentido. A un equipo con esa edad no se le puede poner una gráfica a la que merezca la pena hacer el "passthough". En esos equipos sí se puede virtualizar como siempre se ha hecho, lo de pasar la gráfica es para las hornadas "actuales".


Una 1060 no es nada mala. Que yo empecé a jugar con passthrough hace años con una 760
@drumtronicpw01011110
Igualmente, tengo una 1060 y me inicie en el 2018, cuando era todo un sacrilegio tener esto funcionando.

Hasta ahora, esa grafica sigue funcionando sin problemas.

PD: No la he actualizado por los altos precios [Alaa!]
30 respuestas