LINUX.ORG.RU

KVM VGA-Passthrough или проброс видеокарты

 , ,


4

2

Всем привет. Начну с простого: не удается пробросить видеокарту hd6990 на госта. Из железа Asus CROSSHAIR IV FORMULA с процессором Phenom II в биосе необходимая настройка произведена. стоит Arch с ядром pf:

# uname -r
4.8.1-pf

# lspci -nnk
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890 Northbridge only single slot PCI-e GFX Hydra part (rev 02)
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD/ATI] RD890S/RD990 I/O Memory Management Unit (IOMMU)
00:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GFX port 0)
00:04.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 0)
00:05.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 1)
00:06.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 2)
00:07.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 3)
00:0b.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 0)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode] (rev 40)
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 42)
00:14.1 IDE interface: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller (rev 40)
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller (rev 40)
00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 PCI to PCI Bridge (rev 40)
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:16.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:16.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor HyperTransport Configuration
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Address Map
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Link Control
02:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cayman XT [Radeon HD 6970]
02:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cayman/Antilles HDMI Audio [Radeon HD 6900 Series]
03:00.0 USB controller: NEC Corporation uPD720200 USB 3.0 Host Controller (rev 03)
04:00.0 Ethernet controller: Marvell Technology Group Ltd. Yukon Optima 88E8059 [PCIe Gigabit Ethernet Controller with AVB] (rev 11)
05:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6315 Series Firewire Controller (rev 01)
06:00.0 SATA controller: JMicron Technology Corp. JMB363 SATA/IDE Controller (rev 03)
06:00.1 IDE interface: JMicron Technology Corp. JMB363 SATA/IDE Controller (rev 03)
07:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Pitcairn XT [Radeon HD 7870 GHz Edition]
07:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series]
02:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cayman XT [Radeon HD 6970] [1002:6718]
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:2470]
        Kernel driver in use: vfio-pci
        Kernel modules: radeon
02:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Cayman/Antilles HDMI Audio [Radeon HD 6900 Series] [1002:aa80]
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:aa80]
        Kernel driver in use: vfio-pci
        Kernel modules: snd_hda_intel

07:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Pitcairn XT [Radeon HD 7870 GHz Edition] [1002:6818]
        Subsystem: XFX Pine Group Inc. Device [1682:3252]
        Kernel driver in use: radeon
        Kernel modules: radeon
07:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series] [1002:aab0]
        Subsystem: XFX Pine Group Inc. Device [1682:aab0]
        Kernel driver in use: snd_hda_intel
        Kernel modules: snd_hda_intel

Я хочу заметить, что у меня 6990, но показывает 6970

Предыстория: Я провел достаточно много за чтением мануалов, изначально делал по мануалу https://bbs.archlinux.org/viewtopic.php?id=162768 о котором все знают. В тот момент так же стоял арч, с ядром вроде 4.2 (полгода назад было). В тот момент это делалось впервые, у меня вроде как получилось (во всяком случае на втором мониторе, подключенным к проброшенной видеокарте загорелась загрузка гостевой винды). Но, так и не удалось включить поддержку iommu на материнке (пришлось использовать опцию, что сильно бьет по производительности)

vfio_iommu_type1.allow_unsafe_interrupts=1

Сейчас я решил вернуться к этому, но требуется ваша помощь. Повторяя свои действия в прошлом, делал все по мануалу(напомню ссылку): https://bbs.archlinux.org/viewtopic.php?id=162768 В процессе тестирования проброса видеокарточки, по мануалу запустил qemu, но госта я на втором мониторе не увидел, как и не услышал характерного шума вентиляторов видеокарты. Т.е. проброс не удался.

Итак, прежде всего хотелось бы включить нормальную поддержку iommu на материнской плате, но:

[    0.105264] AMD-Vi:   DEV_SPECIAL(HPET[0])           devid: 00:14.0
[    0.105265] AMD-Vi:   DEV_SPECIAL(IOAPIC[7])         devid: 00:00.1
[    0.105266] [Firmware Bug]: AMD-Vi: IOAPIC[6] not in IVRS table
[    0.105272] [Firmware Bug]: AMD-Vi: No southbridge IOAPIC found
[    0.105273] AMD-Vi: Disabling interrupt remapping
[    2.485092] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[    2.485220] AMD-Vi: Lazy IO/TLB flushing enabled
Почитав об этой проблеме, добавил в загрузку ivrs_ioapic[6]=00:14.0 В итоге ядро грузит с множественным сообщением:
Event logged [ INVALID_DEVICE_REQUEST device=00:14.1 adress=*********** flags=0x0a00
Вместо звезд фигурирует некий адресс в памяти, каждый раз разный. Таких сообщений 12 Дальше естественно не находятся жесткие диски и система не грузится. Гуглеж выдал некоторые результаты, я пробовал подставлять этот несчастный 00:14.1 в таблицу, но безрезультатно. Первый важный вопрос - есть ли тут владельцы моей материнской платы(я их где-то видел на лоре)? Как до них достучаться, ибо у них вроде как проброс удавался.

Далее, я полез в глубокие мануалы, начав с https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Isolating_the_GPU опробовал два способа, как результат у меня якобы заработало, во всяком тестовый qemu запустился, но снова проброс не удался с обоими способами из мануала (vfio-pci, pci-stub). =) Вообщем на текущий момент я уже не знаю, куда копать.

PS планирую с чистого qemu пересесть на libvirt в качестве гуи, стоит ли или лучше и дальше использовать qemu? Вроде как libvirt любит сразу «съедать» оперативку под госта

Спасибо всем, кто откликнется


4.8, центос 7 - pci passthrough не работает. пока не разбирался в чём причина, но по факту - 4.7.2 - всё ок, 3 сетевушки раскидываются по машинам и работают, 4.8 - прокидываются, но не пашут из-за проблем с irq. так что может просто попробовать ядро постарее.

у меня сейчас не asus, но: http://extreme.pcgameshardware.de/asus/112556-crosshair-iv-formula-und-iommu.... - включить iommu в биосе. нет опции - обновить биос.

сам пользую либвирт, очень доволен. кстати, это единственный гуй, нормально пробрасывающий устройства в машины. память не ест, или по крайей мере, я не замечаю.

WArYag_Twar ()

или лучше и дальше использовать qemu?

Так libvirt без qemu не работает, ты qemu будешь использовать в любом случае, выражайся точнее.

А в чем смысл треда, какой у тебя вопрос?

  • У тебя машины запускаются без проброса карточки?
  • Как собрано ядро (опции kvm, vfio, iommu)? grep -ie iommu -e kvm -e vfio конфиг_ядра
  • Какая версия qemu?
  • Какой биос используется для проброса, seabios или ovmf? Если ovfm, то какой ревизии.

Приведи полный файл запуска машины (все, что дальше qemu-system-x86_64)

slon ()
Ответ на: комментарий от slon

У меня и с биосом работает, но в параметрах qemu (если libvirt, через <qemu:commandline> в xml-конфиге) vfio-pci,...,multifunction=on,x-vga=on

перешить на uefi.

Фигасе, оказывается, так можно?
Надо попробовать, но боюсь, убью, потом этот биос фиг восстановишь

TheAnonymous ★★★★★ ()
Ответ на: комментарий от TheAnonymous

Фигасе, оказывается, так можно?

Да, я уже на двух стареньких нвидиях перешил.

боюсь, убью, потом этот биос фиг восстановишь

Что значит не восстановишь? Во-первых, оригинальные биосы лежат на https://www.techpowerup.com/vgabios , а во-вторых, самый надежный способ это просто забекапить его, по ссылке выше «Как определить» указано как делается дамп видеобиоса.

Бояться не нужно, там все очень просто с этой перешивкой, нет времени объяснять.

slon ()

iommu=soft

В параметры ядра

А дальше пробуй

Тут ещё тред был в галерее про это все дело
Поищи, там много полезного

smilessss ★★★★★ ()
Ответ на: комментарий от slon

Вот только если прошить какую-нибудь фигню, например, не для той видеокарты, можно ли будет после этого прошить нормальный биос, карточка вообще будет определяться?
Понятно, можно будет выпаять микросхему, как-нибудь прошить на программаторе, но у меня такой возможности нет.

Впрочем, оказывается, конкретно для моей видеокарты есть готовый биос с uefi на сайте ASUS, думаю там то всё должно быть нормально, осталось шиндошс запустить

TheAnonymous ★★★★★ ()

В процессе тестирования проброса видеокарточки, по мануалу запустил qemu, но госта я на втором мониторе не увидел, как и не услышал характерного шума вентиляторов видеокарты. Т.е. проброс не удался.

а он и не должен услышаться сразу, только с драйверами. какой биос? не все биосы умеют включать второй монитор, то есть карту, например ефишный нихрена не умеет. просто установи винду, а потом добавь ей видеокарту. и я не вижу команду, qemu-system-x86_64 **** , с какой запускал всё хозяйство?

darkenshvein ★★★★★ ()
Ответ на: комментарий от darkenshvein

например ефишный нихрена не умеет.

как раз всё ровно наоборот, только ефишный включает монитор с самого начала загрузки системы, ты можешь еще до винды в сам уэфибиос на проброшенном мониторе зайти, чего нельзя сделать на seabios. Или например войти в техническое меню, забыл как называется, по F8 короче перед загрузкой винды.

Ты ведь, помнится, большой любитель обмазываться Xen, там может и по-другому.

slon ()
Ответ на: комментарий от slon

ovmf у меня и не отображал экран на стадии загрузки, только сиабиос)
сразу я видел почти загруженную винду, никаких прелюдий)

darkenshvein ★★★★★ ()
Ответ на: комментарий от TheAnonymous

Вот только если прошить какую-нибудь фигню, например, не для той видеокарты

в вышеуказанном способе это исключено, ведь ты берешь свой видеобиос и патчишь его до состояния uefi, он как бы добавляет эмулирующую часть, благодаря чему практически любую карточку, за исключением совсем дикого старья типа карт конца 90х-начала 20х можно пробросить через vfio ovmf.

В той программе еще защита есть, если он видит, что биос нельзя пропатчить до состояния uefi, он этого не делает, но по конкретно ТС'овой карточке с id 1002:6718 — она в списке поддерживаемых, т.е. уже гарантировано патчилась и запускалась.

slon ()
Ответ на: комментарий от darkenshvein

Начиная где-то с 2011 года на всех выпускаемых с того времени видеокартах не видеобиос, а UEFI-видеобиос, это сделано, очевидно, для беспроблемной работы на UEFI матплатах.

Только видеокарты с UEFI-видеобиосами пробрасываются через ovmf, у меня например была старая GT210, в которой еще простой биос, я пропатчил и смог пробросить без проблем через vfio ovmf.

slon ()

хотелось бы включить нормальную поддержку iommu на материнской плате

ivrs_ioapic[6]=00:14.0 amd_iommu=on iommu=pt

а в биосе у тебя IOMMU включен вообще?

slon ()
Ответ на: комментарий от slon

00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD/ATI] RD890S/RD990 I/O Memory Management Unit (IOMMU)

ну вот же. насколько я понимаю, такое устройство бы не нашлось

darkenshvein ★★★★★ ()
Ответ на: комментарий от slon

1) Использовал чистый qemu без надстроек в виде libvirt. Конфигурация запуска взята из мануала. Seabios:

    qemu-system-x86_64 -enable-kvm -m 1024 -cpu host,kvm=off \
    -smp 4,sockets=1,cores=4,threads=1 \
    -device vfio-pci,host=02:00.0,x-vga=on -device vfio-pci,host=02:00.1 \
    -vga none
OVMF:
    qemu-system-x86_64 -enable-kvm -m 1024 -cpu host,kvm=off  \
    -smp 4,sockets=1,cores=4,threads=1 \
    -drive if=pflash,format=raw,readonly,file=/usr/share/ovmf/x64/ovmf_code_x64.bin \
    -drive if=pflash,format=raw,file=/usr/share/ovmf/x64/ovmf_vars_x64.bin \
    -device vfio-pci,host=02:00.0 -device vfio-pci,host=02:00.1 \
    -vga none
Учитывая предстоящий гемморой, я установил libvirt. Код проброшенной видеокарты:
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x05' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </hostdev>
Предупреждая ваши вопросы, сейчас на госте стоит оригинальный санта-клаус 8.1 (это сборка от монкиуса с популярного торрент трекера), без дров видяшка там определяется. Дрова её вешают при запуске логонскрина (не успел посмотреть, скорее всего бсод ловит). Там ovfm.

2) конфиг ядра

# zcat /proc/config.gz | grep -ie iommu -e kvm -e vfio 
CONFIG_KVM_GUEST=y
# CONFIG_KVM_DEBUG_FS is not set
CONFIG_GART_IOMMU=y
CONFIG_CALGARY_IOMMU=y
CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
CONFIG_IOMMU_HELPER=y
CONFIG_VFIO_IOMMU_TYPE1=m
CONFIG_VFIO_VIRQFD=m
CONFIG_VFIO=m
CONFIG_VFIO_NOIOMMU=y
CONFIG_VFIO_PCI=m
CONFIG_VFIO_PCI_VGA=y
CONFIG_VFIO_PCI_MMAP=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_VFIO_PCI_IGD=y
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y
# Generic IOMMU Pagetable Support
CONFIG_IOMMU_IOVA=y
CONFIG_AMD_IOMMU=y
CONFIG_AMD_IOMMU_V2=m
CONFIG_INTEL_IOMMU=y
CONFIG_INTEL_IOMMU_SVM=y
# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
# CONFIG_IOMMU_DEBUG is not set
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_HAVE_KVM_MSI=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM_COMPAT=y
CONFIG_HAVE_KVM_IRQ_BYPASS=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_MMU_AUDIT=y
CONFIG_KVM_DEVICE_ASSIGNMENT=y
3) Версия qemu
# qemu-x86_64 -version
qemu-x86_64 version 2.7.0, Copyright (c) 2003-2016 Fabrice Bellard and the QEMU Project developers
4) Насчет ревизии ovfm - как посмотреть по-человечески, пока не понял, но в госте пишет (если я правильно понял конечно, что смотреть): UEFI ver 2.60

5) Не uefi - видимо прийдется перепрошивать.

# ./rom-parser /tmp/image.rom
Valid ROM signature found @0h, PCIR offset 1d8h
PCIR: type 0 (x86 PC-AT), vendor: 1002, device: 6718, class: 030000
PCIR: revision 0, vendor revision: d0a
Last image

Rockon ()
Ответ на: комментарий от slon

Забыл добавить, что iommu включен(в биосе). Я об этом в первом посту писал. С параметрами запуска ядра я эксперементировал, изначально было:

iommu=pt iommu=1 amd_iommu=fullflush pci-stub.ids=1002:6718,1002:aa80 ivrs_ioapic[6]=00:14.0 amd_iommu_dump=1 quiet
Сейчас
amd_iommu_dump=1 quiet
и проброс прописан в /etc/modprobe.d/vfio.conf
options vfio-pci ids=1002:6718,1002:aa80

Rockon ()
Ответ на: комментарий от darkenshvein

https://lists.xenproject.org/archives/html/xen-users/2013-07/msg00143.html о, кажется это была бага версии ядра. обновили мажорную версию, попробуй.

Я может чего не понимаю, но у меня 4.8 ядро, неужели дотянулся баг до этой версии? По ссылке ответ - мол проблема с вашим биосом. К слову биос мат платы не самый предпоследний, но в последней версии в логе изменений никаких упоминаний о нужной мне правке, они так, по лайту добавили поддержку новых процов. Так нужно ли это мне? Я потому и спрашивал про тех, кто имеет на борту ту же материнку, что и у меня)

Rockon ()
Ответ на: комментарий от Rockon

Вроде всё правильно и нормально, но есть пару моментов, в строку запуска можно и нужно добавить:

    -machine q35,accel=kvm \
если пробрасываем через ovmf, то нам лучше использовать чипсет q35, а не дефолтный i440fx, и обязательно указать акселерацию через kvm, а не дефолтный tcg.

В строку процессора, раз речь про винду, нужно добавить, kvm при этом не отключается, просто маскируется:

    -cpu host,hv_relaxed,hv_vapic,hv_spinlocks=0x1000,kvm=off \

Ты запускал не чистый OVMF, а hybrid, он не подходит, запускай чисто efi: OVMF-r15214.

    -drive if=pflash,format=raw,readonly,file=/path/to/OVMF-pure-efi.fd \
    -drive if=pflash,format=raw,file=/path/to/OVMF_VARS-pure-efi.fd \
Карточку прописывай так:

   -device vfio-pci,host=02:00.0,multifunction=on,x-vga=on -device vfio-pci,host=02:00.1 \
   -vga none \

Не uefi - видимо прийдется перепрошивать.

Можно не сразу перепрошивать, а протестировать подсунув qemu ромфайл, возможно заведется без перепрошивки, если мне не изменяет память, то у меня так без перепрошивки подсовыванием запускалась Nvidia G210 2007 года, вот так:

   -device vfio-pci,host=02:00.0,multifunction=on,romfile=/path/to/uefi_romfile.rom,x-vga=on -device vfio-pci,host=02:00.1 \
   -vga none \

slon ()
Ответ на: комментарий от slon

Прежде чем залипнуть на пол дня с опытами, сопутствующие вопросы: 1) Всю толпу модулей ядра, связанных с kvm (те, что в конфиге выше указаны) - стоит в виде выносных модулей деражать или запихать в ядро? 2) Вопрос банальный и он много раз обсуждался, но я его повторю: сейчас актуален seabios или стоит забыть о нем, как о страшном сне? Понятно, что с новыми видеокарточками без вопросов стоит использовать OVMF, но с моим случаем? Стоит ли так заморачиватся с перепрошивкой видяшки (своей винды нет, осталась только на флешке из реаниматора hirentboot cd)? К тому же, нагуглив тут минут 5, пока писал этот пост - Автор https://vfio.blogspot.ru/ утверждает, что q35 не самый лучший выбор. Вообщем просьба разъяснить, что реально актуально на 2016 год и почему(если не сложно)

Rockon ()
Ответ на: комментарий от Rockon

как узнать, что проброс успешен, не запуская винду?

когда сможешь видеть меню или консоль uefi биоса на мониторе, подключенном к пробрасываемой карте, сигнал подается и монитор включается сразу, еще до загрузки чего либо, можно даже никакой -drive не подключать, а баловаться с просто биосом.

Всю толпу модулей ядра, связанных с kvm (те, что в конфиге выше указаны) - стоит в виде выносных модулей деражать или запихать в ядро?

Лично у меня так:

# CONFIG_GART_IOMMU is not set
# CONFIG_CALGARY_IOMMU is not set
CONFIG_IOMMU_HELPER=y
CONFIG_VFIO_IOMMU_TYPE1=y
CONFIG_VFIO_VIRQFD=y
CONFIG_VFIO=y
# CONFIG_VFIO_NOIOMMU is not set
CONFIG_VFIO_PCI=y
CONFIG_VFIO_PCI_VGA=y
CONFIG_VFIO_PCI_MMAP=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_VFIO_PCI_IGD=y
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y
# Generic IOMMU Pagetable Support
CONFIG_AMD_IOMMU=y
CONFIG_AMD_IOMMU_V2=y
# CONFIG_INTEL_IOMMU is not set
# CONFIG_IOMMU_STRESS is not set
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_HAVE_KVM_MSI=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM_COMPAT=y
CONFIG_HAVE_KVM_IRQ_BYPASS=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
# CONFIG_KVM_MMU_AUDIT is not set
CONFIG_KVM_DEVICE_ASSIGNMENT=y

Вопрос банальный и он много раз обсуждался, но я его повторю: сейчас актуален seabios или стоит забыть о нем, как о страшном сне? Понятно, что с новыми видеокарточками без вопросов стоит использовать OVMF, но с моим случаем?

Нет, не актуален, если мы говорим в контексте проброса и особенно для виндовых гостей, что через pci-assign, что через vfio наилучшим образом (стабильнее работа, больше очков в бенчмарках и сам факт проброса) пробрасывается только через ovmf.

Твой случай (6990) это конец 2010 начало 2011 годов, а одна из моих карточек, которые удалось пробросить (G210) это 2009 год, и её никак без ovmf и uefi-видеобиоса пробросить не удавалось, что через pci-assign, что через vfio.

У тебя дел на пару минут: сдампить видеором, натравить прогу, получить uefi-видеором и подсунуть его qemu, это 10 минут дел.

Автор https://vfio.blogspot.ru/ утверждает, что q35 не самый лучший выбор

Я знаю, я и сам был сторонником этого и приводил его цитаты и здесь и там, но объективно через q35 (эмуляция 2009 года) лучше i440fx (эмуляция 1996 года чипсета) лучше в плане отсутствия бсодов во время установки видеодрайверов на госте, более стабильной работе самой карты, на официальной вики сказано:

This will allow for better support of PCI-E passthrough since ICH9 uses a PCI-E bus whereas the I440FX only supports a PCI bus

slon ()
Ответ на: комментарий от Rockon

Стоит ли так заморачиватся с перепрошивкой видяшки

Тебе не нужно перепрошивать видяшку. Виртуализация позволяет скормить виртуалке патченый ROM карты из файла.

А вообще у меня лично и HD6950 и GTX260 работают нормально в госте с UEFI даже без поддержки EFI вообще: просто драйвера должны быть установлены уже и тогда карта заводится после старта виртуалки.

Вообщем просьба разъяснить, что реально актуально на 2016 год и почему

Честно я топик не очень внимательно читал так как времени особо нет, но вообще для начала тебе нужно взять и пробросить в виртуалку че попроще: USB, SATA или Ethernet контроллер.

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

o- ()
Ответ на: комментарий от Rockon

в чейнджлоге биоса вообще мало чего напишут, он для виндузятников, а потом смотришь, производительность виртуалки то поменялась!

darkenshvein ★★★★★ ()
Ответ на: комментарий от slon

вот мой. звук можно не пробрасывать.

qemu-system-x86_64 -enable-kvm -boot menu=on,strict=on -M q35 -bios /usr/share/OVMF/efi-bios.bin -device piix3-usb-uhci,id=usb -device ahci,id=ahci0 -m 10000 -cpu host -smp 4,cores=4,threads=1,sockets=1 -drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd -drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd -device virtio-serial-pci,id=virtio-serial0  -vga none -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 -device piix4-ide,bus=pcie.0,id=piix4-ide  -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on -device vfio-pci,host=01:00.1,bus=pcie.0 -drive file=/media/windows/win8.ssd,id=disk,format=raw -drive file=/media/gs/win/steam_storage,id=disk1 -usbdevice host:062a:3633 -usbdevice host:04f2:0116  -device intel-hda,id=sound0 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0

darkenshvein ★★★★★ ()
Последнее исправление: darkenshvein (всего исправлений: 1 )
Ответ на: комментарий от Rockon

модули это драйвер отдельно от ядра. монолит - монолитно встроенные в ядро, не отдельно. Y, да

darkenshvein ★★★★★ ()
Ответ на: комментарий от Rockon

Отвечаю на удаленный коммент, но ты наверное все уже понял где была ошибка.

ну не компилить же ядро сразу с прописанным параметром?

я делаю именно так и делаю, поскольку у меня нет груба, у меня ядро напрямую через UEFI автоматически загружается, указываю в опции:

CONFIG_CMDLINE="root=PARTUUID=9963e5e1-2112-4a4a-823c-7ca1a9016130 net.ifnames=0 vfio-pci.ids=10de:0a60,10de:0be3,13f6:0111 amd_iommu=on iommu=pt"

amd_iommu_dump=1 iommu=pt iommu=1 amd_iommu=fullflush

а зачем тебе такой большой набор, не будет ли мешать? Мне всегда хватало вышеуказанных двух опций.

а вижу(точнее не вижу ничего):

и соотв. у меня работает:

[    0.507071] VFIO - User Level meta-driver version: 0.3
[    0.507327] vfio_pci: add [10de:0a60[ffff:ffff]] class 0x000000/00000000
[    0.507346] vfio_pci: add [10de:0be3[ffff:ffff]] class 0x000000/00000000
[    0.507365] vfio_pci: add [13f6:0111[ffff:ffff]] class 0x000000/00000000

Но через груб тоже можно наверное настроить как-то.

Ааа, это, у тебя же ошибка «vdio-pci», а не «vfio-pci», исправь и проверь, должно работать.

slon ()
Ответ на: комментарий от slon

Итак, победа, господа. Во всяком случае на втором мониторе наконец то зажегся свет. В двух словах 1) проблему с материнской платой(была последняя stable версия биоса 2101) я разрешил при помощи самой последней БЕТА версии биоса(3029).

[    2.534306] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[    2.534307] AMD-Vi: Interrupt remapping enabled
[    2.534444] AMD-Vi: IO/TLB flush on unmap enabled

2) Ядро 4.8.1-pf

3) Т.к. все модули для проброса вкомпилены(=y), их опции были вписаны в строку запуска ядра в grub

4) Тестово запустил qemu

qemu-system-x86_64 -enable-kvm -m 1024 -cpu host,hv_relaxed,hv_vapic,hv_spinlocks=0x1000,kvm=off  \
-machine q35,accel=kvm \
-smp 4,sockets=1,cores=4,threads=1 \
-drive if=pflash,format=raw,readonly,file=/path/to/OVMF-pure-efi.fd \
-drive if=pflash,format=raw,file=/path/to/OVMF_VARS-pure-efi.fd \
-device vfio-pci,host=02:00.0,multifunction=on,romfile=/path/to/bios6970_updGOP.rom,x-vga=on -device vfio-pci,host=02:00.1 \
-vga none
Где bios6970_updGOP.rom - это сдампеный видеором, патченный под uefi

За эту маленькую победу огромные благодарности ув. darkenshvein, slon, TheAnonymous, а так же smilessss за ссылки в галереи. Познавательно :)

Rockon ()
Ответ на: комментарий от slon

Я в мак за кофе съездил, ошибка как то сразу нашлась) Сейчас в grub прописано так:

amd_iommu_dump=1 iommu=pt iommu=1 amd_iommu=fullflush vfio_pci.ids=1002:6718,1002:aa80 quiet
Но буду менять. Это остатки от моих прошлых неудачных попыток. С таким «набором» проброс удался. В любом случае еще предстоит вытянуть максимум из видеокарты.

Rockon ()
Ответ на: комментарий от slon

Подниму тему. Винда завелась без проблем, к моему конфигу просто добавил hdd. Решил не использовать libvirt, ибо много времени уходит на чтение мануалов. Мб потом. Но теперь возникает несколько вопросов:

1)Т.к. второй монитор мне нужен для других нужд, я хочу отправить окно с эмулятором на отдельный рабочий стол. Впринцепи это synergy (для мыши с клавиатурой), а вот как быть с дисплеем? Тут бы хотелось поподробнее узнать, что нынче в моде. Я пробовал запустить стримилку - она «кушает» много ресурсов, не подходит. Вроде как есть -vga qxl -sdl Но все же не очень понятно, как это сделано: https://youtu.be/VW7nOySw18M 2) Вывод звука, как это реализовать? Нужен «общий» с хостом звук

Rockon ()
Ответ на: комментарий от Rockon

Вроде как есть -vga qxl -sdl

ничего из этого не работает с проброшенной картой

как это сделано: https://youtu.be/VW7nOySw18M

это его: Проброс видеокарты (комментарий)

2) Вывод звука, как это реализовать? Нужен «общий» с хостом звук

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

Я решил проблему просто: пробрасываю кроме видеокарты еще и PCI аудиокарту (Manli C-Media M-CMI8738-4CH), копеешную, но прекрасно пробрасываемую и работающую.

Также я перепробовал 3шт. USB-аудиокарт, все пробрасываются, но либо задержки, либо адские помехи и в таком духе, уже после страданий с usb-карточками купил PCI за $5 и забыл про проблемы со звуком.

slon ()
Ответ на: комментарий от slon

Это крайне плохо для меня) PCI карточки у меня не влезут (все занято двумя видеокартами) а OBS я и пробовал. Нагрузка на проц в предпросмотре колосальная. Я вот сейчас расковыриваю конфиг виртуалки из libvirt - там звук работает. Но вот что делать с видео - не представляю

Rockon ()
Ответ на: комментарий от Rockon

Вариантов видеть картинку с проброшенной картой всего один: на отдельном мониторе.

Еще есть костыли: стриминг, включая vnc/TeamViewer и костыль Новелыча.

Это всё.

// я проблему решил тем, что у меня отдельный монитор hdmi/DVI, так я проброшенную карточку подключаю через hdmi, а хост через DVI, и когда нужно просто переключаю кнопкой на мониторе.

slon ()
Ответ на: комментарий от slon

Если интересно, вот что у меня в конечном итоге вышло:

QEMU_AUDIO_DRV=alsa QEMU_ALSA_DAC_BUFFER_SIZE=512 QEMU_ALSA_DAC_PERIOD_SIZE=170 qemu-system-x86_64 \
-nodefaults \
-nodefconfig \
-serial none \
-parallel none \
-name Windows8 \
-enable-kvm -m 4096 -cpu host,hv_relaxed,hv_vapic,hv_spinlocks=0x1000,kvm=off  \
-machine q35,accel=kvm \
-smp 4,sockets=1,cores=4,threads=1 \
-rtc base=localtime,clock=host \
-drive if=pflash,format=raw,readonly,file=/path/to/OVMF-pure-efi.fd \
-drive if=pflash,format=raw,file=/path/to/OVMF_VARS-pure-efi.fd \
-soundhw hda \
-netdev tap,id=virbr2 -device e1000,netdev=virbr2,mac=52:54:00:fa:a3:8c \
-device vfio-pci,host=02:00.0,multifunction=on,romfile=/path/to/bios6970_updGOP.rom,x-vga=on -device vfio-pci,host=02:00.1 \
-drive file=/path/to/win8.1.raw,if=virtio,id=c,format=raw,cache=writeback,aio=threads \
-vga none
впринцепи, вроде как, звук в адеквате (долго не проверял), включается и работает без задержек. Производительность графики буду смотреть уже завтра. Либ вирт - это конечно здорово, когда помимо qemu есть что-то еще или когда есть острая необходимость плодить виртуальные машины.

Мышь и клавиатура проброшены с помощью synergy. пс а как свои сообщения редактировать?

Rockon ()
Ответ на: комментарий от slon

У меня еще один вопрос: насчет файловой системы, по горячим следам как говорится. По ощущениям - работает быстро, но диск постоянно занят операциями = хрустит. И в диспетчере задач показывает нагрузку 100%. Под рукой было место на btrfs, причем с первым рейдом, понятно что не самый лучший выбор для образов виртуальных машин. На самом диске файловая шара, и виртуалка с микротиком. Т.е. диск почти не используется.

Что лучше? Там явно узкое место. Опыт подсказывает zfs, здравый смысл - пару дисков прямо в винду пробросить, но софтово-виндовый рейд, это много нехороших слов и потерянная информация. И как настроить qemu в данном случае?

Rockon ()
Ответ на: комментарий от slon

Забыл добавить. Он загружен на 100% с каким то диким временем ответа в 7000 мс, как при записи чтении ~5мб\сек, так и 100 мб\сек)) Что это такое?

Rockon ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.