LINUX.ORG.RU
ФорумAdmin

KVM проброс видиокарты

 , , , ,


1

3

Здравствуйте,

хочу пробросить видиокарту в гостя под kvm

сделал всё как тут https://bbs.archlinux.org/viewtopic.php?id=162768

в итоге:

qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: error no iommu_group for device
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device initialization failed.
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device 'vfio-pci' could not be initialized

железо vt-d поддерживает ( под xen прокидывалось всё )

в /sys/kernel/iommu_groups пусто

grep -i vfio  /boot/.config
CONFIG_VFIO_IOMMU_TYPE1=m
CONFIG_VFIO=m
CONFIG_VFIO_PCI=m
CONFIG_VFIO_PCI_VGA=y
CONFIG_KVM_VFIO=y
cat /proc/cmdline
BOOT_IMAGE=Linux-KVM ro root=801 pci-stub.ids=1002:6818,1002:aab0

Что у тебя за железо - нам знать необязательно, или мы должны сванговать это самостоятельно?

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

ну железо поддерживает проброс

я не просто так написал

( под xen прокидывалось всё )

Чипсет С226

видиокарта HD 7870

в биосе VT-d включено

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

А зачем в тегах nvidia? Какая видеокарта будет на хосте, а какая - прообрасываться? HD7870 - это intel или amd? Что за проц?

С таким набором информации - вдоль.

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

HD7870 AMD

проц intel

nvidia тоже пробрасывают же)

GGUseR
() автор топика

Для начала нужно пробросить русский язык тебе в голову.

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

там чёто не так со скриптом

#!/bin/bash

modprobe vfio-pci

for dev in "$@"; do
        vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
        device=$(cat /sys/bus/pci/devices/$dev/device)
        if [ -e /sys/bus/pci/devices/$dev/driver ]; then
                echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
        fi
        echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
done

dmesg | grep vfio    
[  205.620264] vfio-pci: probe of 0000:03:00.0 failed with error -22
[  205.662599] vfio-pci: probe of 0000:03:00.0 failed with error -22
[  205.662602] vfio-pci: probe of 0000:03:00.1 failed with error -22

ну и pci-stub цепояет нормально

dmesg | grep pci-stub
[    0.000000] Command line: BOOT_IMAGE=Linux ro root=801 pci-stub.ids=1002:6818,1002:aab0
[    0.000000] Kernel command line: BOOT_IMAGE=Linux ro root=801 pci-stub.ids=1002:6818,1002:aab0
[  437.945811] pci-stub: add 1002:6818 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[  437.945817] pci-stub 0000:03:00.0: claimed by stub
[  437.945820] pci-stub: add 1002:AAB0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[  437.945823] pci-stub 0000:03:00.1: claimed by stu
GGUseR
() автор топика
Ответ на: комментарий от GGUseR

Тут всё-таки ещё не хватает вывода cat /proc/cpuinfo , lspci и lspci -n . Также нужен вывод dmesg | grep -e DMAR -e IOMMU .

С какими параметрами загружается модуль IOMMU?

Следует попробовать передать ядру следующие параметры: intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1 pcie_acs_override=downstream (последний под вопросом, но попробовать стоит, первые два с большой вероятностью обязательны).

К сожалению у меня есть только положительный опыт проброса NVIDIA видеокарты на AMD чипсете и процессоре поэтому для интела могу только это предложить.

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

Вот почему ты себя считаешь умнее всех. Никто тебя не просил анализировать dmesg, нужен был лишь его вывод, анализ сделают другие люди, которые знают, что нужно там искать.

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

Подскажи пожалуйста, я правильно понимаю, что чтобы пробросить видеокарту в виртуалку и пользоваться ею, то нужно 2 монитора?

Например:

  • Встроенный HD8670D в проц, подключен основной монитор для системы.
  • PCI-карта, например R7 250 - подключен монитор для виртуалки.

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

vim
()

Если не секрет, что не понравилось в Xen?

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

У меня один монитор с несколькими видеовходами, которые я могу прекрасно переключать.

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

Все правильно понимаешь, нужен второй монитор. Или монитор с двумя портами VGA(Host) и DVI(Guest).

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

Потому что люди могут ходить в гостевую систему VNC-клиентом, ведь qemu поднимает соответствующий сервер.

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

о, это важный момент о котором я не знал! Спасибо.

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

блин вот это я пропустил:( а там ещё красным выделенно было

сейчас другая ошибка

vfio: error, group 1 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.

это изза чего может быть?

GGUseR
() автор топика
Ответ на: комментарий от vim

А вcтроенное в цп видео сейчас не выключается, если установлена PCI-E карта? Или от проца+мамки зависит? Раньше интеграшки выключались, но тогда они еще не в процах были.

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

в биосе приоритет можно выставить

GGUseR
() автор топика
Ответ на: комментарий от Lavos

не вырубается, но вот многие матери имеют кривые чипсеты, я потому предпочитаю супермикро/intel, асусы я выбросил из списка покупок навсегда.

erzent ☆☆
()
Ответ на: комментарий от GGUseR

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

erzent ☆☆
()
Ответ на: комментарий от GGUseR

во вторых я бы не стал брать плату, в рекоментациях к которой во всю орётся винда 8, а не 2012 сервер.

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

у меня сама по себе вырубается была плата asus 2010 года проблем небыло

эта 2013 тоже переключается на pcie

GGUseR
() автор топика
Ответ на: комментарий от erzent

на десктопном железе делать виртуализацию для продакшена.

С каких пор проброс видеокарты для игрулек стал продакшном?

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

для какого еще продакшена? Мне для графических пакетов нужно.

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

вот у меня ошибку выдаёт

vfio: error, group 1 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.

GGUseR
() автор топика
Ответ на: комментарий от vim

Да, нужен второй монитор. Я бы при наличии лишь одного монитора просто воткнул бы dsub в одну видяху, а vga/dp/hdmi/etс - в другую, и переключал бы видеовход кнопочкой на мониторе.

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

изначально было:

qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: error no iommu_group for device
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device initialization failed.
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device 'vfio-pci' could not be initialized

добавил в загрузчик:

ntel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1

сейчас выдаёт:

<chassis=1,id=root.1 -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on -device vfio-pci,host=03:00.1,bus=root.1,addr=00.1
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: error, group 1 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: failed to get group 1
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device initialization failed.
qemu-system-x86_64: -device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: Device 'vfio-pci' could not be initialized

прокидываю карту вней ещё есть звуковая (03:00.1) вот вывод dmesg | grep pci-stub

                                                                              i,host=03:00.1,bus=root.1,addr=00.1
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.14.21 root=UUID=3e904d07-7ec5-4e48-9016-d89a9c9825b3 ro intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1 pci-stub.ids=1002:6818,1002:aab0
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.14.21 root=UUID=3e904d07-7ec5-4e48-9016-d89a9c9825b3 ro intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1 pci-stub.ids=1002:6818,1002:aab0
[   40.781517] pci-stub: add 1002:6818 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[   40.781528] pci-stub 0000:03:00.0: claimed by stub
[   40.781532] pci-stub: add 1002:AAB0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000

до этого ещё была строчка

[ 437.945823] pci-stub 0000:03:00.1: claimed by stub

щяс её нет

мб изза этого ошибка?

почему её нет не знаю делаю всё также..

GGUseR
() автор топика
Ответ на: комментарий от NeverLoved

Но зачем dsub? Я бы одну воткнул в hdmi, а вторую в dvi.

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

Ещё раз тебе говорю, бросай свой доморощенный анализ. Выкладывай целиком dmesg на pastebin, знающие люди сами разберуться.

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

Ясно, ну тогда куплю б.у. Sapphire HD7790 и буду пробовать пробрасывать в WIN8.1

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

Милок, тебе здесь никто и ничем не обязан.

Теперь по делу:

   0.356145] WARNING: CPU: 3 PID: 1 at drivers/pci/search.c:46 pci_find_upstream_pcie_bridge+0x77/0x90()
[    0.356147] Modules linked in:
[    0.356149] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 3.14.21 #2
[    0.356150] Hardware name: ASUS All Series/P9D WS, BIOS 0902 05/09/2013
[    0.356151]  0000000000000009 ffff8802444fdd08 ffffffff815e4072 0000000000000000
[    0.356154]  ffff8802444fdd40 ffffffff81079d6d ffff880244297098 ffff880244297000
[    0.356156]  ffff880244297098 0000000000000000 ffff8802468058a0 ffff8802444fdd50
[    0.356158] Call Trace:
[    0.356161]  [<ffffffff815e4072>] dump_stack+0x45/0x56
[    0.356164]  [<ffffffff81079d6d>] warn_slowpath_common+0x7d/0xa0
[    0.356166]  [<ffffffff81079e4a>] warn_slowpath_null+0x1a/0x20
[    0.356168]  [<ffffffff813094b7>] pci_find_upstream_pcie_bridge+0x77/0x90
[    0.356171]  [<ffffffff814e210d>] intel_iommu_add_device+0x4d/0x220
[    0.356173]  [<ffffffff814d8660>] ? bus_set_iommu+0x50/0x50
[    0.356175]  [<ffffffff814d868a>] add_iommu_group+0x2a/0x50
[    0.356178]  [<ffffffff813af823>] bus_for_each_dev+0x63/0xa0
[    0.356180]  [<ffffffff814d8658>] bus_set_iommu+0x48/0x50
[    0.356183]  [<ffffffff81907022>] intel_iommu_init+0xc6a/0xd63
[    0.356185]  [<ffffffff8103b5c5>] ? free_init_pages+0x75/0xa0
[    0.356188]  [<ffffffff818c7627>] ? clean_rootfs+0x1b9/0x1b9
[    0.356191]  [<ffffffff818cb202>] ? memblock_find_dma_reserve+0x120/0x120
[    0.356193]  [<ffffffff818cb214>] pci_iommu_init+0x12/0x3c
[    0.356194]  [<ffffffff81000352>] do_one_initcall+0x112/0x160
[    0.356197]  [<ffffffff810998a8>] ? parse_args+0x1e8/0x320
[    0.356199]  [<ffffffff818c5028>] kernel_init_freeable+0x167/0x1ed
[    0.356200]  [<ffffffff818c483d>] ? do_early_param+0x88/0x88
[    0.356203]  [<ffffffff815d7f80>] ? rest_init+0x80/0x80
[    0.356204]  [<ffffffff815d7f8e>] kernel_init+0xe/0xf0
[    0.356207]  [<ffffffff815ebbec>] ret_from_fork+0x7c/0xb0
[    0.356208]  [<ffffffff815d7f80>] ? rest_init+0x80/0x80
[    0.356211] ---[ end trace 8c6ecf81681aef37 ]---
у тебя ядро крашится

что у тебя за дистрибутив? ядро посвежее есть возможность поставить? а биос обновлял?

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

спасибо! за ответ!

1 slackware

2 3.14 недостаточно свежее? (поставлю 3.16)

3 нет

начну с биоса

и мб есть ещё какието варианты изза чего ошибка?

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

WARNING: CPU: 3 PID: 1 at drivers/pci/search.c:46 pci_find_upstream_pcie_bridge+0x77/0x90()

Это исправлено в 3.17, влияет только на проброс PCI устройств (не PCIe).

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

Стоит таки попробовать pcie_acs_override=downstream, настораживает то, что используется nouveau для хостовой системы, оно может давать интересные побочные эффекты вроде тех, что мешают тебе в данный момент.

Однако сообщение «vfio: error, group 1 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.» нагугливает весьма утомительные решения, вроде этого: http://forums.gentoo.org/viewtopic-t-994568.html?sid=9d10dce2cb5294abe24ddf59... .

Всё ещё не помешал бы вывод lspci и lspci -n . Также стоит пока сосредоточиться на пробросе только VGA устройства, без звуковых карт, которые встроены в видеокарту. То есть передавать PCI-Stub только саму видеокарту без дополнительных звуковых и соответственно в Qemu пока тоже пробрасывать только одно устройство. Когда получится пробрасывать это одно то тогда следует браться за следующие.

Также может полезно будет увидеть все параметры, с которыми у тебя запускается qemu-system-x86_64, например такие параметры у меня:

qemu-system-x86_64 -runas feanor -enable-kvm -M q35 -m 4096 -cpu host -smp 6,sockets=1,cores=6,threads=1 -vga none \
-bios /usr/share/qemu/bios.bin \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=06:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \

Запускать машину необходимо от рута, после этого она сама сбросит привилегии из-за опции -runas (сброс привилегий необязателен, но желателен), необходимо использовать чипсет q35, который поддерживает PCI-E, соответственно создается виртуальная PCI-E шина ioh3420, к которой подключается проброшенный через vfio девайс. Здесь также важно указание файла с биосом для виртуальной машины и -vga none, которое отключается дефолтную эмуляцию Cirrus видеокарты в Qemu.

Полная команда выглядит так: http://pastebin.com/EprPywD6 (в данном примере происходит проброс NVIDIA в гостя на хосте с AMD чипсетом), флаг -cpu host,kvm=off - workaround поведения драйвера nvidia и не требуется для других карт (тебе он не нужен).

Основная проблема в том, что вообще проброс VGA PCI-E устройств почти никак не документирован (-device secondary-vga, например, почти нигде не упоминается), настраивается это всё диким гуглением и участием в списках рассылки Qemu, где также можно задавать вопросы (но там естественно надо указывать dmesg, lspci, /proc/config.gz, опции запуска qemu, конфиг загрузчика и т.д.).

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

спасибо!

запускаю с теме параметрами что в https://bbs.archlinux.org/viewtopic.php?id=162768

qemu-system-x86_64 -enable-kvm -M q35 -m 1024 -cpu host \
-smp 6,sockets=1,cores=6,threads=1 \
-bios /usr/share/qemu/bios.bin -vga none \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=03:00.1,bus=root.1,addr=00.1

завтро попробую только видио карту прокинуть

q35 это чипсет чего? мат.платы?

# lspci
00:00.0 Host bridge: Intel Corporation Haswell DRAM Controller (rev 06)
00:01.0 PCI bridge: Intel Corporation Haswell PCI Express x16 Controller (rev 06)
00:01.1 PCI bridge: Intel Corporation Haswell PCI Express x8 Controller (rev 06)
00:01.2 PCI bridge: Intel Corporation Haswell PCI Express x4 Controller (rev 06)
00:02.0 Display controller: Intel Corporation Haswell Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Haswell HD Audio Controller (rev 06)
00:14.0 USB controller: Intel Corporation Lynx Point USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation Lynx Point MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation Lynx Point USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation Lynx Point High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation Lynx Point PCI Express Root Port #1 (rev d4)
00:1c.1 PCI bridge: Intel Corporation 82801 PCI Bridge (rev d4)
00:1c.2 PCI bridge: Intel Corporation Lynx Point PCI Express Root Port #3 (rev d4)
00:1d.0 USB controller: Intel Corporation Lynx Point USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation Lynx Point LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation Lynx Point 6-port SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation Lynx Point SMBus Controller (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [GeForce GT 630] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GF108 High Definition Audio Controller (rev a1)
03:00.0 VGA compatible controller: AMD/ATI [Advanced Micro Devices, Inc.] Pitcairn XT [Radeon HD 7870 GHz Edition]
03:00.1 Audio device: AMD/ATI [Advanced Micro Devices, Inc.] Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series]
05:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 03)
06:02.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6306/7/8 [Fire II(M)] IEEE 1394 OHCI Controller (rev c0)
07:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)


# lspci -n
00:00.0 0600: 8086:0c08 (rev 06)
00:01.0 0604: 8086:0c01 (rev 06)
00:01.1 0604: 8086:0c05 (rev 06)
00:01.2 0604: 8086:0c09 (rev 06)
00:02.0 0380: 8086:041a (rev 06)
00:03.0 0403: 8086:0c0c (rev 06)
00:14.0 0c03: 8086:8c31 (rev 04)
00:16.0 0780: 8086:8c3a (rev 04)
00:1a.0 0c03: 8086:8c2d (rev 04)
00:1b.0 0403: 8086:8c20 (rev 04)
00:1c.0 0604: 8086:8c10 (rev d4)
00:1c.1 0604: 8086:244e (rev d4)
00:1c.2 0604: 8086:8c14 (rev d4)
00:1d.0 0c03: 8086:8c26 (rev 04)
00:1f.0 0601: 8086:8c56 (rev 04)
00:1f.2 0106: 8086:8c02 (rev 04)
00:1f.3 0c05: 8086:8c22 (rev 04)
01:00.0 0300: 10de:0f00 (rev a1)
01:00.1 0403: 10de:0bea (rev a1)
03:00.0 0300: 1002:6818
03:00.1 0403: 1002:aab0
05:00.0 0604: 1b21:1080 (rev 03)
06:02.0 0c00: 1106:3044 (rev c0)
07:00.0 0200: 8086:1533 (rev 03)
GGUseR
() автор топика
Ответ на: комментарий от feanor

совсем мне не везёт :(

обновил биос и система перестала видить мышку и клавиатуру

беда беда

но это поправимо

Спасибо за ответы!

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