The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Раздел полезных советов: Проброс графического адаптера в виртуальную машину  KVM"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Проброс графического адаптера в виртуальную машину  KVM"  +/
Сообщение от auto_tips (??), 17-Май-24, 13:33 
Для проброса графического адаптера в виртуальную машину  KVM следует указать при загрузке параметры ядра

   rd.driver.pre=vfio_pci rd.driver.pre=vfio-pciwq iommu=pt intel_iommu=on kvm.ignore_msrs=1

и добавить vfio-pci в initramfs:

   # as Root
   gpu="0000:06:00.0"
   aud="0000:06:00.1"
   gpu_vd="$(cat /sys/bus/pci/devices/$gpu/vendor) $(cat /sys/bus/pci/devices/$gpu/device)"
   aud_vd="$(cat /sys/bus/pci/devices/$aud/vendor) $(cat /sys/bus/pci/devices/$aud/device)"
  
   function bind_vfio {
     echo "$gpu" > "/sys/bus/pci/devices/$gpu/driver/unbind"
     echo "$aud" > "/sys/bus/pci/devices/$aud/driver/unbind"
  
   # https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-b...
     echo "$gpu_vd" > /sys/bus/pci/drivers/vfio-pci/new_id
     echo "$aud_vd" > /sys/bus/pci/drivers/vfio-pci/new_id
   }
  
   function unbind_vfio {
     echo "$gpu_vd" > "/sys/bus/pci/drivers/vfio-pci/remove_id"
     echo "$aud_vd" > "/sys/bus/pci/drivers/vfio-pci/remove_id"
  
     echo 1 > "/sys/bus/pci/devices/$gpu/remove"
     echo 1 > "/sys/bus/pci/devices/$aud/remove"
    
     echo 1 > "/sys/bus/pci/rescan"
   }
  
   bind_vfio
  
   #QEMU emulator version 8.2.2 (qemu-8.2.2-1.fc40)
   NETWORK_DEVICE="virtio-net"
   MAC_ADDRESS="00:16:cb:00:21:19"
   # 0x28 - Raptor Lake fix. https://github.com/tianocore/edk2/discussions/4662
   CPU="host,host-phys-bits-limit=0x28"
   args=(
   -display gtk,grab-on-hover=on,full-screen=on
   -machine q35
   -accel kvm
   -cpu $CPU
   -m size=17338368k
   -overcommit mem-lock=off
   -smp 32,sockets=1,dies=1,clusters=1,cores=32,threads=1
   -no-user-config
   -nodefaults
   -rtc base=localtime,driftfix=slew
   -global kvm-pit.lost_tick_policy=delay
   -global ICH9-LPC.disable_s3=1
   -global ICH9-LPC.disable_s4=1
   -boot menu=off,strict=on
   -device qemu-xhci,id=xhci
   # VFIO
   # VERY IMPORTANT PART. PLEASE NOTE THE FORMAT OF COMMAND
   # id":"pci.5","bus":"pcie.0","addr":"0x2.0x4" and "id":"pci.6","bus":"pcie.0","addr":"0x2.0x5"
   -device pcie-root-port,bus=pcie.0,id=pci_root,multifunction=true,addr=0x2
   -device '{"driver":"pcie-root-port","port":20,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x2.0x4"}'
   -device '{"driver":"pcie-root-port","port":21,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x2.0x5"}'
   -device '{"driver":"vfio-pci","host":"0000:06:00.0","id":"gpu","bus":"pci.5","addr":"0x0"}'
   -device '{"driver":"vfio-pci","host":"0000:06:00.1","id":"hdmiaudio","bus":"pci.6","addr":"0x0"}'
   #
   -drive id=HDD,if=virtio,file="$HDD",format=qcow2
   # Network
   -netdev user,id=net0
   -device "$NETWORK_DEVICE",netdev=net0,id=net0,mac="$MAC_ADDRESS"
   #
   -device virtio-serial-pci
   -usb
   -device usb-kbd
   -device usb-tablet
   -monitor stdio
   # Audio
   -audiodev   pa,id=aud1,server="/run/user/1000/pulse/native"
   -device ich9-intel-hda
   -device hda-duplex,audiodev=aud1
   #
   -device qxl-vga,vgamem_mb=128,vram_size_mb=128
   -device virtio-balloon-pci
  
   )
   qemu-system-x86_64 "${args[@]}"
  
   unbind_vfio


URL:
Обсуждается: http://www.opennet.me/tips/info/3250.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (1), 17-Май-24, 13:33   +1 +/
Делал такое, ага, стоило бы упомянуть, что интеловские процы умеют такое начиная с 6го поколения
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #4

2. Сообщение от Аноним (2), 17-Май-24, 18:31   +5 +/
https://github.com/intel/gvt-linux/wiki/GVTg_Setup_Guide
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #24

3. Сообщение от Ananim (?), 20-Май-24, 04:45   +3 +/
Неплохо бы ещё добавить, что не во всех ситуациях после проброса куска встройки, виртуальный QXL продолжит функционировать как ожидается - в этом случае можно воспользоваться Looking Glass: https://looking-glass.io/
Ответить | Правка | Наверх | Cообщить модератору

4. Сообщение от Аноним (4), 21-Май-24, 09:59   –1 +/
С 6го по 10ое. Дальше штеуд всё переделал, а сообщество не смогло.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #26

5. Сообщение от Gentoofan (?), 22-Май-24, 20:37   +1 +/
А что за драйвер vfio-pciwq? Гугл такого не знает... vfio-pci же название?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #7

7. Сообщение от anonanon (?), 24-Май-24, 19:26   +9 +/
:wq
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

8. Сообщение от tonysemail (??), 28-Май-24, 10:26   +/
Ультимативная статья. На 15-ом году существования опции проброса устройств в виртуалку. Может автор все-таки пояснит, а что, собственно, случилось?
Все предыдущие инструкции на просторах интернета стали теперь не актуальными? Только здесь теперь истина? Внесены существенные изменения в код и теперь всё, что работало раньше перестанет работать? А с какого числа, с какой версии ядра или qemu?
Ответить | Правка | Наверх | Cообщить модератору

9. Сообщение от pavlinux (ok), 30-Май-24, 10:18   +1 +/
Oxocпадя, как много букав

# lspci своей железки, ищем PCI ID, домен, шину и слот
# modprobe -v vfio-pci ids=1234:9876;

# qemu-system-x86_64 -boot c -drive file=IMAGE.qcow2 -accel kvm -m 1024 -machine q35,accel=kvm,kernel-irqchip=split  -device vfio-pci,host=01:06.0

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #14

10. Сообщение от anon74 (?), 30-Май-24, 15:48   +/
Вопрос такой. Проброс работает только на линии которые идут непосредственно к процессору? Или через чипсет тоже работает?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #13

11. Сообщение от Аноним (-), 31-Май-24, 15:18   +/
Чтото не понятно, пробрасывают встройку (к которой вроде как подключён монитор), и еще добавляют device qxl-vga для эмулируемой видяхи.

Я гдето у буржуев читал что они както прокидывают часть встройки, и вроде как и на хосте ускорение и у виртуалке тоже и всё с одной карты, но так и не понял зачем.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #12

12. Сообщение от anon111212 (-), 02-Июн-24, 00:02   +/
Нет,здесь только про дискретную целиком без sharing (GVT-d, SR-IOV, вроде, так называется). Можно использовать вместо дуалбута, если есть еще встройка, то еще удобнее: не надо пробрасывать клавиатуру и мышь - будет захвачен выводом с qlx (который на весь экран shift-alf-f)
Можно и единственную карту/встройку так прокидывать в гостя целиком (не тестировал), хотя я не ручаюсь за менеджеры дисплея, если их основная карточка вдруг "исчезнет"....
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #16

13. Сообщение от anon111212 (-), 02-Июн-24, 00:03   +/
> Вопрос такой. Проброс работает только на линии которые идут непосредственно к процессору?
> Или через чипсет тоже работает?

Да, работает на линиях чипсета

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

14. Сообщение от anon111212 (-), 02-Июн-24, 00:12   +/
> Oxocпадя, как много букав
> # lspci своей железки, ищем PCI ID, домен, шину и слот
> # modprobe -v vfio-pci ids=1234:9876;
> # qemu-system-x86_64 -boot c -drive file=IMAGE.qcow2 -accel kvm -m 1024 -machine q35,accel=kvm,kernel-irqchip=split
>  -device vfio-pci,host=01:06.0

Касаемо команды qemu: и подключится карточка скорее всего к PCIe the Root Complex и мы не сможем получить HDMI/Displayport Audio функции (addr=00.1), а еще получим код 43(?) на AMD и невозможность запустить GPU...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #17

16. Сообщение от pavlinux (ok), 04-Июн-24, 16:55   +/
>  SR-IOV

это еще не все драйверы умеют

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

17. Сообщение от pavlinux (ok), 04-Июн-24, 16:59   –1 +/
>> Oxocпадя, как много букав
>> # lspci своей железки, ищем PCI ID, домен, шину и слот
>> # modprobe -v vfio-pci ids=1234:9876;
>> # qemu-system-x86_64 -boot c -drive file=IMAGE.qcow2 -accel kvm -m 1024 -machine q35,accel=kvm,kernel-irqchip=split
>>  -device vfio-pci,host=01:06.0
> Касаемо команды qemu: и подключится карточка скорее всего к PCIe the Root
> Complex и мы не сможем получить HDMI/Displayport Audio функции (addr=00.1), а
> еще получим код 43(?) на AMD и невозможность запустить GPU...

Я про главную фичу в "Совете", а это именно использование модуля vfio-pci c параметром ids=1234:9876
или правка соответствующих файлов в sysfs, и параметр qemu  --  -device vfio-pci,host=....

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #18

18. Сообщение от anon111212 (?), 05-Июн-24, 12:54   –1 +/
Не работают ваши советы на 6.8.11-300.fc40.x86_64
https://pastebin.com/E7jDxtVH
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #20, #22

20. Сообщение от pavlinux (ok), 10-Июн-24, 14:00   +/
> Не работают ваши советы

Мне еще изучать ваши железки и подстраиваться под них?  :)

Еще раз, главная фича в новости - Проброс PCI делается через модуль  vfio-pci  

На моей не работает без этой строки  '-machine q35,accel=kvm,kernel-irqchip=split -device intel-iommu,intremap=on'

На хосте нужно в grub:  amd_iommu=force_enable iommu=noagp,pt,noaperture,allowdac,merge,memaper=2 pcie_ports=native amd64_edac_mod.ecc_enable_override=1

У тебя этого нет - "НЕ РАБОТАЮТ ВАШИ СОВЕТЫ" :)

Если спасëт: AMD IOMMU RD890S, AMD RD890 Northbridge, AMD Opteron(tm) Processor 4386



Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18

21. Сообщение от Аноним (21), 12-Июн-24, 13:14   +/
япользовался вот етим гаедом https://github.com/BigAnteater/KVM-GPU-Passthrough

но после обновления железа оно перестало пробрасывать видеошмарту((((

Ответить | Правка | Наверх | Cообщить модератору

22. Сообщение от Аноним (-), 26-Июн-24, 14:29   +/
> Не работают ваши советы на 6.8.11-300.fc40.x86_64

Ничего страшного, зато вон там соседний совет есть, можешь картинку под углом запилить.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18

23. Сообщение от Аноним (-), 01-Авг-24, 02:32   +1 +/
Очевидные косяки статьи:
1) Intel only в ряде мест. Если у вас AMD то ессно специфика интела работать не будет. Уточнить этот момент автор постеснялся. Скажем параметр intel_iommu актуален только для intel.
2) Чертова куча магических констант, при том вон там в скрипте даже переменные есть, а вон там - опять магические константы.
3) У pavlinux то же самое но в 20 раз проще, показывает идею а не прибитое на гвозди к особенностям конкретного локалхоста, а вон то в его изначальном виде - нигде кроме того хоста работать не будет.
Ответить | Правка | Наверх | Cообщить модератору

24. Сообщение от Олег (??), 15-Сен-24, 16:09   +1 +/
В 13-14 серии интелов это изменили и больше не работает
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

25. Сообщение от 6anderlog (?), 25-Окт-24, 19:00   +/
Эти все танцы с бубном для получения хотя бы Opengl  в виндовой ВМ и тупой забив болта интелом на GPU SRIOV в основном кернеле меня порядком утомили и я перешел на китайский mvisor, под который они написали нормальный virtio GPU драйвер использующий /dev/dri рендер хоста и дающий вполне себе веселые FPS.
Ответить | Правка | Наверх | Cообщить модератору

26. Сообщение от Павел (??), 06-Ноя-24, 12:18   +/
У меня 13700 и все работает. Что я телаю не так?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру