Для проброса графического адаптера в виртуальную машину 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
Делал такое, ага, стоило бы упомянуть, что интеловские процы умеют такое начиная с 6го поколения
С 6го по 10ое. Дальше штеуд всё переделал, а сообщество не смогло.
У меня 13700 и все работает. Что я телаю не так?
https://github.com/intel/gvt-linux/wiki/GVTg_Setup_Guide
В 13-14 серии интелов это изменили и больше не работает
Неплохо бы ещё добавить, что не во всех ситуациях после проброса куска встройки, виртуальный QXL продолжит функционировать как ожидается - в этом случае можно воспользоваться Looking Glass: https://looking-glass.io/
А что за драйвер vfio-pciwq? Гугл такого не знает... vfio-pci же название?
:wq
Ультимативная статья. На 15-ом году существования опции проброса устройств в виртуалку. Может автор все-таки пояснит, а что, собственно, случилось?
Все предыдущие инструкции на просторах интернета стали теперь не актуальными? Только здесь теперь истина? Внесены существенные изменения в код и теперь всё, что работало раньше перестанет работать? А с какого числа, с какой версии ядра или qemu?
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
> 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...
>> 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=....
Не работают ваши советы на 6.8.11-300.fc40.x86_64
https://pastebin.com/E7jDxtVH
> Не работают ваши советыМне еще изучать ваши железки и подстраиваться под них? :)
Еще раз, главная фича в новости - Проброс 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
> Не работают ваши советы на 6.8.11-300.fc40.x86_64Ничего страшного, зато вон там соседний совет есть, можешь картинку под углом запилить.
Вопрос такой. Проброс работает только на линии которые идут непосредственно к процессору? Или через чипсет тоже работает?
> Вопрос такой. Проброс работает только на линии которые идут непосредственно к процессору?
> Или через чипсет тоже работает?Да, работает на линиях чипсета
Чтото не понятно, пробрасывают встройку (к которой вроде как подключён монитор), и еще добавляют device qxl-vga для эмулируемой видяхи.Я гдето у буржуев читал что они както прокидывают часть встройки, и вроде как и на хосте ускорение и у виртуалке тоже и всё с одной карты, но так и не понял зачем.
Нет,здесь только про дискретную целиком без sharing (GVT-d, SR-IOV, вроде, так называется). Можно использовать вместо дуалбута, если есть еще встройка, то еще удобнее: не надо пробрасывать клавиатуру и мышь - будет захвачен выводом с qlx (который на весь экран shift-alf-f)
Можно и единственную карту/встройку так прокидывать в гостя целиком (не тестировал), хотя я не ручаюсь за менеджеры дисплея, если их основная карточка вдруг "исчезнет"....
> SR-IOVэто еще не все драйверы умеют
япользовался вот етим гаедом https://github.com/BigAnteater/KVM-GPU-Passthroughно после обновления железа оно перестало пробрасывать видеошмарту((((
Очевидные косяки статьи:
1) Intel only в ряде мест. Если у вас AMD то ессно специфика интела работать не будет. Уточнить этот момент автор постеснялся. Скажем параметр intel_iommu актуален только для intel.
2) Чертова куча магических констант, при том вон там в скрипте даже переменные есть, а вон там - опять магические константы.
3) У pavlinux то же самое но в 20 раз проще, показывает идею а не прибитое на гвозди к особенностям конкретного локалхоста, а вон то в его изначальном виде - нигде кроме того хоста работать не будет.
Эти все танцы с бубном для получения хотя бы Opengl в виндовой ВМ и тупой забив болта интелом на GPU SRIOV в основном кернеле меня порядком утомили и я перешел на китайский mvisor, под который они написали нормальный virtio GPU драйвер использующий /dev/dri рендер хоста и дающий вполне себе веселые FPS.