Реалізація PCI-Passthrough з Linux-KVM на Debian


10

Я намагаюся використовувати PCI-Passthrough для приєднання старої відеокарти (Radeon 4770) до віртуальної машини. Я використовую Linux-KVM для запуску своїх віртуальних машин на хості Debian Linux (Wheezy, 3.2.0-4-amd64).

Питання

Для уточнення, я не впевнений, який правильний "шлях" для імплементації PCI-Passthrough з Linux KVM. На цьому етапі я підозрюю, що правильною дією є додавання CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONта CONFIG_PCI_STUBдо розділу "Параметри шини (PCI тощо)" джерела ядра та перекомпіляції.

Але я не впевнений, чи це вичерпний перелік необхідних доповнень перед повторним складанням. Або якщо необхідна перекомпіляція ядра - можливо, є більш простий метод?

З посилань, на які я посилався, лише компіляція linux-kvm.org чітко згадує компіляцію. Linux-KVM вже встановлений і працює як гіпервізор.

Дослідження

На даний момент я думаю, що моя проблема пов'язана з моїм ядром. Моїм основним ресурсом був путівник на linux-kvm.org ( http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM ). Однак я знайшов інші ресурси, які вказують на дещо інші методи, які (начебто) є розподільними:

Fedora-- https://docs.fedoraproject.org/en-US/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html

SUSE - "openSUSE: віртуалізація з KVM" (Посилання пропущено через низьку релевантність та обмеження 2-ланки)

Посібник Fedora працює до посилання, setseboolяке, схоже, є специфічним для RedHat. Посібник SUSE вказує, що призначення графічної картки не підтримується SUSE, однак я також CONFIG_DMAR_DEFAULT_ONпосилаюсь на це, тому що він вказав, що я повинен знайти рядок у / boot / config-`name -r`. Сайт linux-kvm.org також посилається CONFIG_DMAR_DEFAULT_ON, тому це, здається, є загальним і необхідним компонентом.

Примітка. Я не знайшов обмежень щодо відеокарт у посібниках для Fedora чи Debian. Посилання на документ SUSE датується 2006-2013 роками.

Я не можу знайти CONFIG_DMAR_DEFAULT_ONв / boot / config-`uname -r` у своїй системі. Подальші дослідження говорять про те, що вони є CONFIG_DMAR, CONFIG_DMAR_DEFAULT_ONі CONFIG_PCI_STUBє елементами конфігурації ядра Linux, відповідні інструкціям на linux-kvm.org . Я вважаю, що мені потрібно перекомпілювати ядро ​​свого хоста з цими 3 (принаймні) елементами конфігурації ядра. Завантаження з intel_iommu=onпараметром ядра для моєї хост-ОС видається недостатньою.

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

Підтвердження підтримки VT-d / IOMMU / KVM

Моє дослідження показує, що PCI-Passthrough потребує підтримки процесора та материнської плати для VT-d.

VT-d

Я підтвердив, що мій процесор, не k k INTEL i7-3770 (за ark.intel.com/products/65719), підтримує VT-d:

Технологія віртуалізації Intel® для спрямованого вводу / виводу (VT-d) ‡ Так

Моя материнська плата Asrock Z77 Extreme4 також підтримує VT-d (на стор. 62 Посібника користувача):

VT-d Використовуйте це, щоб увімкнути або відключити технологію Intel ® VT-d (технологія віртуалізації Intel ® для спрямованого вводу / виводу). Значенням цієї функції за замовчуванням є [Disabled].

МОММУ

Я переконався, що в моїй системі є підтримка IOMMU:

dmesg | grep -e DMAR -e IOMMU | grep -e "DRHD base" -e "enabled"
[    0.000000] Intel-IOMMU: enabled

КВМ

KVM встановлений та функціональний, окрім підтримки PCI-Passthrough:

lsmod | grep kvm
kvm_intel             121968  0 
kvm                   287749  1 kvm_intel

Я переконався, що VT-d увімкнено через BIOS моєї материнської плати. Як такий, я не підозрюю проблеми апаратного / BIOS, які б перешкоджали використанню VT-d. Незважаючи на те, я не в змозі успішно від'єднати свою відеокарту від свого хоста та передати її на віртуальну машину .

Заключні думки

Наостанок хотілося б зазначити, що я також спробував тестування:

echo "8086 10b9" \> /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:01:00.0" \> /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" \> /sys/bus/pci/drivers/pci-stub/bind
echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
kvm -m 512 -boot c -net none -hda debian-7.1.0-amd64-netinst.iso -device pci-assign,host=01:00.0

і отримала таку помилку після спроби створити цільовий VM:

Failed to assign device "(null)" : Device or resource busy
*** The driver 'pci-stub' is occupying your device 0000:01:00.0.
***
*** You can try the following commands to free it:
***
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/unbind
*** $ echo "0000:01:00.0" > /sys/bus/pci/drivers/pci-stub/bind
*** $ echo "8086 10b9" > /sys/bus/pci/drivers/pci-stub/remove_id
***
kvm: -device pci-assign,host=01:00.0: Device 'pci-assign' could not be initialized

Я здогадуюсь, це тому, що хост все ще не відмовиться від управління відеокартою, і це, ймовірно, через те, що ядро ​​не буде зібране з відповідними елементами конфігурації.

Це нова територія для мене, тому, будь ласка, пробачте моє недосвідчення. Я дуже вдячний за будь-які відгуки, навіть якщо це просто підтвердження того, що я на вірному шляху. Будь ласка, дайте мені знати, чи я здійснив кричущий нагляд, чи надмірно думаю. Конструктивна критика мого питання також вітається. Повідомте мене, якщо я не надав достатньо інформації, щоб "допомогти вам допомогти мені" (або якщо я занадто багато включив!). Я був би більш ніж радий допомогти зробити своє запитання зрозумілішим чи простішим у відповіді.

Заздалегідь спасибі,


Що трапляється, якщо ви взагалі не дозволяєте відеокарті приєднуватися до хоста (наприклад, завантажувати, не приєднуючи цю відеокартку до свого хоста. Або не надаючи / відключаючи драйвер, або використовуючи параметр завантаження ядра, щоб він пропускався під час завантаження) ?
Hennes

Відповіді:


1

Стаття, згадана для проходження PCI, потрібна конфігурація ядра

make menuconfig
set "Bus options (PCI etc.)" -> "Support for DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "Enable DMA Remapping Devices" to "*"
set "Bus options (PCI etc.)" -> "PCI Stub driver" to "*"

optional setting: 
set "Bus options (PCI etc.)" -> "Support for Interrupt Remapping" to "*"

Однак я не зміг знайти ці параметри в розділі "Параметри шини", а замість цього в розділі "Драйвери пристроїв -> апаратне забезпечення IOMMU".

Дотримуючись вказаної статті, у мене все ще виникли проблеми із завантаженням гостьової машини та помилками, які "pci-призначити" пристрою неможливо було ініціалізувати ". Мені вдалося отримати його завантаження, виконавши:

 echo 1 > /sys/module/kvm/parameters/allow_unsafe_assigned_interrupts

Якщо у вас все ще виникають проблеми, зверніться до наступної статті: http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.