The OpenNET Project / Index page

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

Проброс графического адаптера в виртуальную машину KVM
Для проброса графического адаптера в виртуальную машину  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-bus-pci
     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
 
17.05.2024 , Автор: anon1233456
Ключи: gpu, boot, kvm / Лицензия: CC-BY
Раздел:    Корень / Безопасность / Виртуализация - Xen, OpenVZ, KVM, Qemu

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним (1), 13:33, 17/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Делал такое, ага, стоило бы упомянуть, что интеловские процы умеют такое начиная с 6го поколения
     
     
  • 2.4, Аноним (4), 09:59, 21/05/2024 [^] [^^] [^^^] [ответить]  
  • +/
    С 6го по 10ое. Дальше штеуд всё переделал, а сообщество не смогло.
     

  • 1.2, Аноним (2), 18:31, 17/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    https://github.com/intel/gvt-linux/wiki/GVTg_Setup_Guide
     
     
  • 2.24, Олег (??), 16:09, 15/09/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В 13-14 серии интелов это изменили и больше не работает
     

  • 1.3, Ananim (?), 04:45, 20/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Неплохо бы ещё добавить, что не во всех ситуациях после проброса куска встройки, виртуальный QXL продолжит функционировать как ожидается - в этом случае можно воспользоваться Looking Glass: https://looking-glass.io/
     
  • 1.5, Gentoofan (?), 20:37, 22/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А что за драйвер vfio-pciwq? Гугл такого не знает... vfio-pci же название?
     
     
  • 2.7, anonanon (?), 19:26, 24/05/2024 [^] [^^] [^^^] [ответить]  
  • +9 +/
    :wq
     

  • 1.8, tonys (??), 10:26, 28/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ультимативная статья. На 15-ом году существования опции проброса устройств в виртуалку. Может автор все-таки пояснит, а что, собственно, случилось?
    Все предыдущие инструкции на просторах интернета стали теперь не актуальными? Только здесь теперь истина? Внесены существенные изменения в код и теперь всё, что работало раньше перестанет работать? А с какого числа, с какой версии ядра или qemu?
     
  • 1.9, pavlinux (ok), 10:18, 30/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +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

     
     
  • 2.14, anon111212 (-), 00:12, 02/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > 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...

     
     
  • 3.17, pavlinux (ok), 16:59, 04/06/2024 [^] [^^] [^^^] [ответить]  
  • –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=....

     
     
  • 4.18, anon111212 (?), 12:54, 05/06/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не работают ваши советы на 6.8.11-300.fc40.x86_64
    https://pastebin.com/E7jDxtVH
     
     
  • 5.20, pavlinux (ok), 14:00, 10/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Не работают ваши советы

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

    Еще раз, главная фича в новости - Проброс 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



     
  • 5.22, Аноним (-), 14:29, 26/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Не работают ваши советы на 6.8.11-300.fc40.x86_64

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

     

  • 1.10, anon74 (?), 15:48, 30/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вопрос такой. Проброс работает только на линии которые идут непосредственно к процессору? Или через чипсет тоже работает?
     
     
  • 2.13, anon111212 (-), 00:03, 02/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Вопрос такой. Проброс работает только на линии которые идут непосредственно к процессору?
    > Или через чипсет тоже работает?

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

     

  • 1.11, Аноним (-), 15:18, 31/05/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чтото не понятно, пробрасывают встройку (к которой вроде как подключён монитор), и еще добавляют device qxl-vga для эмулируемой видяхи.

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

     
     
  • 2.12, anon111212 (-), 00:02, 02/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Нет,здесь только про дискретную целиком без sharing (GVT-d, SR-IOV, вроде, так называется). Можно использовать вместо дуалбута, если есть еще встройка, то еще удобнее: не надо пробрасывать клавиатуру и мышь - будет захвачен выводом с qlx (который на весь экран shift-alf-f)
    Можно и единственную карту/встройку так прокидывать в гостя целиком (не тестировал), хотя я не ручаюсь за менеджеры дисплея, если их основная карточка вдруг "исчезнет"....
     
     
  • 3.16, pavlinux (ok), 16:55, 04/06/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >  SR-IOV

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

     

  • 1.21, Аноним (21), 13:14, 12/06/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    япользовался вот етим гаедом https://github.com/BigAnteater/KVM-GPU-Passthrough

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

     
  • 1.23, Аноним (-), 02:32, 01/08/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Очевидные косяки статьи:
    1) Intel only в ряде мест. Если у вас AMD то ессно специфика интела работать не будет. Уточнить этот момент автор постеснялся. Скажем параметр intel_iommu актуален только для intel.
    2) Чертова куча магических констант, при том вон там в скрипте даже переменные есть, а вон там - опять магические константы.
    3) У pavlinux то же самое но в 20 раз проще, показывает идею а не прибитое на гвозди к особенностям конкретного локалхоста, а вон то в его изначальном виде - нигде кроме того хоста работать не будет.
     
  • 1.25, 6anderlog (?), 19:00, 25/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Эти все танцы с бубном для получения хотя бы Opengl  в виндовой ВМ и тупой забив болта интелом на GPU SRIOV в основном кернеле меня порядком утомили и я перешел на китайский mvisor, под который они написали нормальный virtio GPU драйвер использующий /dev/dri рендер хоста и дающий вполне себе веселые FPS.
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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