Реализация PCI-Passthrough с Linux-KVM в Debian

я пытаюсь использовать 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 etc.)" раздел исходного кода ядра и перекомпиляции.

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

из гидов, на которые я ссылался, только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 - ' uname-r`. Thelinux-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 в качестве параметра ядра для моей host-OS кажется недостаточным.

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

подтверждение поддержки VT-d/IOMMU/KVM

мои исследования показывают, что PCI-Passthrough требует как процессор, так и материнская плата поддерживают VT-d.

VT-d

я подтвердил, что мой процессор, a non-k INTEL i7-3770 (per ark.intel.com/products/65719), поддерживает VT-d:

технология виртуализации Intel® для направленного ввода/вывода (VT-d и) ‡
Да

моя материнская плата ASRock Z77 Extreme4 также поддерживает VT-d (на странице 62 руководства пользователя):

VT-d
Используйте это для включения или отключить Intel
®
Технология VT-d (Intel
®
Виртуализация
Технология направленного ввода / вывода). Значение этой функции по умолчанию - [Disabled].

IOMMU

я проверил, что моя система имеет поддержку IOMMU:

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

KVM

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

и получил следующую ошибку после попытки создать целевую виртуальную машину:

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

я предполагаю, что это потому, что хозяин до сих пор не откажется от контроля над видео вероятно, из-за того, что ядро не компилируется с соответствующими элементами конфигурации.

это новая территория для меня, поэтому, пожалуйста, простите мою неопытность. Я бы значительно ценю любую обратную связь вообще, даже если это просто подтверждение того, что я на правильном пути. Пожалуйста, дайте мне знать, если я сделал вопиющий надзор или я слишком много думаю. Конструктивная критика моего вопроса также приветствуется. Дайте мне знать, если я не предоставил достаточно информация, чтобы "помочь вам помочь мне" (или если я включил слишком много!). Я был бы более чем счастлив помочь сделать мой вопрос более ясным или легче ответить.

спасибо заранее,

16
задан shelladept
26.02.2023 6:59 Количество просмотров материала 3231
Распечатать страницу

1 ответ

статья, упомянутая для PCI-passthrough, требуется конфигурация ядра

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-assign" не может быть инициализировано". Мне удалось загрузить его, выполнив:

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

см. следующее статьи если у вас все еще есть вопросы: http://spica-and-roid.blogspot.com.au/2012/07/howto-kvm-passthrough.html

1
отвечен supmethods 2023-02-27 14:47

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх