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