web-dev-qa-db-fra.com

Dissocier Radeon> passez à VFIO-PCI

j'ai deux GPU Radeon (AMD R9 290 et AMD HD7870). Je souhaite dissocier la R9 290 du pilote radeon et la remettre au pilote QEMUs VFIO-PCI. J'utilise ces commandes:

echo 0000:06:00.0 > /sys/bus/pci/drivers/radeon/unbind
echo 1002 67b1 > /sys/bus/pci/drivers/vfio-pci/new_id
echo 0000:06:00.1 > /sys/bus/pci/drivers/snd_hda_intel/unbind
echo 1002 aac8 > /sys/bus/pci/drivers/vfio-pci/new_id

mais mon système se bloque après 5 secondes. Je ne veux pas lier le GPU à pci-stub parce que je veux utiliser deux écrans avant de démarrer la VM. Comme dans cette vidéo: https://www.youtube.com/watch?v=17qxEpn4EGs

Est-ce que quelqu'un peut m'aider?

Meilleures salutations

1
BlackYDeath

J'utilise actuellement cela, il nécessite cependant un redémarrage de lightdm. Exécutez-le depuis une autre console tty, pas dans la session lightdm elle-même.

(CTRL + ALT + F # pour une console, F7 est normalement la xsession)

#!/bin/bash

read -n3 -rsp "Restart lightdm to unbind the GPU? [yes] " res
test "$res" != 'yes' && exit 1
echo

Sudo service lightdm stop
Sudo echo "1002 683d" > /sys/bus/pci/drivers/vfio-pci/new_id
Sudo echo "1002 aab0" > /sys/bus/pci/drivers/vfio-pci/new_id
Sudo echo "0000:01:00.0" > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
Sudo echo "0000:01:00.1" > /sys/bus/pci/devices/0000:01:00.1/driver/unbind
Sudo echo "0000:01:00.0" > /sys/bus/pci/drivers/vfio-pci/bind
Sudo echo "0000:01:00.1" > /sys/bus/pci/drivers/vfio-pci/bind
Sudo echo "1002 683d" > /sys/bus/pci/drivers/vfio-pci/remove_id
Sudo echo "1002 aab0" > /sys/bus/pci/drivers/vfio-pci/remove_id
Sudo service lightdm start

echo "Rebind Audio"
Sudo modprobe pci_stub
Sudo echo "8086 8ca0" > /sys/bus/pci/drivers/pci-stub/new_id
Sudo echo "0000:00:1b.0" > /sys/bus/pci/drivers/snd_hda_intel/unbind
Sudo echo "0000:00:1b.0" > /sys/bus/pci/drivers/pci-stub/bind
Sudo echo "8086 8ca0" > /sys/bus/pci/drivers/pci-stub/remove_id

# Check if VM drive is mounted
if ! grep -qs '/media/ljosalfur/VM' /proc/mounts; then
echo "Attempting to mount VM drive. I don't know how though."
#Sudo mkdir /media/ljosalfur/VM
#Sudo mount /dev/disk/by-id/0BD253F0-EF7F-6F40-BDD8-FABF85161762 /media/ljosalfur/VM
fi

Sudo kvm -monitor stdio -vnc :0 \
-m 6G -mem-path /dev/hugepages \
-drive if=pflash,format=raw,file=./OVMF.fd -rtc base=localtime \
-cpu Host -smp 6,sockets=1,cores=6,threads=1 \
-device vfio-pci,Host=01:00.0,multifunction=on,x-vga=on \
-device vfio-pci,Host=01:00.1 \
-device pci-assign,Host=00:1b.0 \
-drive file=/media/ljosalfur/VM/vm7.img,format=raw,cache=writethrough \
-smb /media/ljosalfur \
-usb -usbdevice Host:046d:c24a -show-cursor \
-usb -usbdevice Host:1b1c:1b08

echo
echo "Re-Rebind Audio"
Sudo echo "0000:00:1b.0" > /sys/bus/pci/drivers/pci-stub/unbind
Sudo echo "0000:00:1b.0" > /sys/bus/pci/drivers/snd_hda_intel/bind

echo "Unbind GPU from vfio-pci"
Sudo echo "0000:01:00.0" > /sys/bus/pci/drivers/vfio-pci/unbind
Sudo echo "0000:01:00.1" > /sys/bus/pci/drivers/vfio-pci/unbind

read -n3 -rsp "Restart lightdm to rebind the GPU? [yes] " ress
test "$ress" != 'yes' && (exit 1)
echo
Sudo echo "0000:01:00.0" > /sys/bus/pci/drivers/radeon/bind

Je cherche une solution de contournement, car le redémarrage de lightdm n’est pas favorable, je pense que je vais ouvrir une nouvelle question avec différents tags pour cela.

1
FortyTwo

Je ne vous suggérerais pas de le faire comme dans la vidéo. J'ai lié ma carte graphique au pilote pci-stub dans les paramètres du noyau, puis branché une seconde souris et un second câble HDMI sur mon ordinateur et basculé la source sur mon moniteur.

Alors voici mon script de démarrage.

qemu-system-x86_64 -enable-kvm -m 10240 -cpu Host,kvm=off \
-smp 4,sockets=1,cores=4,threads=1 \
-bios /home/qemu/.qemu/bios/ovmf.bin \
-soundhw hda \`
-usb -usbdevice Host:046d:c53b \
-rtc base=localtime \
-hda /home/qemu/.qemu/boot/Windows8_1pro.img \
-hdb /home/qemu/.qemu/hdd/HDD1.img \
-device vfio-pci,Host=01:00.0 -device vfio-pci,Host=01:00.1 \
-vga none \`
0
Marton