Черный список NVIDIA GPU для сквозной передачи QEMU / KVM
Я пытаюсь запустить Windows на виртуальной машине, одновременно предоставляя виртуальную машину прямой проход к графическому процессору для повышения производительности.
У меня есть интегрированный графический процессор Intel (я буду использовать этот для хоста) и Nvidia GTX980 (я хочу этот для ВМ). Я использую Elementary OS 0.3.2 Freya 64 bit.
Я следовал этому руководству, но теперь застрял на шаге 2. Я не могу включить графический процессор Nvidia в черный список.
Для начала я делаю lspci -nn | grep NVIDIA
Это приводит к следующему выводу
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:13c0] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fbb] (rev a1)
Затем я добавил эту строку в /etc/initramfs-tools/modules
файл.
pci_stub ids=10de:13c0,10de:0fbb
И я затем перезагрузил с помощью update-initramfs -u
и после перезагрузки.
После перезагрузки при запуске dmesg | grep pci-stub
Я получаю следующий вывод:
[ 2.029626] pci-stub: add 10DE:13C0 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[ 2.029630] pci-stub: add 10DE:0FBB sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[ 2.029637] pci-stub 0000:01:00.1: claimed by stub
Как вы можете видеть, ни аудио, ни видео не заявлены заглушкой.
Я также попытался добавить эту опцию прямо в файл grub в etc/default/grub
Итак GRUB_CMDLINE_LINUX_DEFAULT
линия выглядит так:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on pci-stub.ids=10de:13c0,10de:0fbb"
Но это также привело к тому, что карта Nvidia не попала в черный список.
Кто-нибудь понял, что может быть причиной этого?
5 ответов
Я столкнулся с такими же проблемами, как вы (Lubuntu 16.04). Это происходит из-за драйверов / модулей, привязывающих устройства к ним до того, как pci-заглушка сможет это сделать. У вас есть как минимум два варианта здесь:
Первым и самым простым будет занести в черный список модули, которые претендуют на устройство. Введите lspci -knn | grep VGA -A 5
чтобы увидеть все ваши устройства VGA pci и их номер устройства и их модули ядра.
01: 00.0 VGA-совместимый контроллер [0300]: устройство корпорации NVIDIA [10de:128b] (версия a1) Подсистема: Micro-Star International Co., Ltd. Устройство [MSI] [1462:8c93] Используемый драйвер ядра: nouveau Модули ядра: nvidiafb, nouveau 01:00.1 Аудиоустройство [0403]: NVIDIA Corporation GK208 Аудио контроллер HDMI/DP [10de:0e0f] (версия a1) Подсистема: Micro-Star International Co., Ltd. [MSI] GK208 Аудио контроллер HDMI/DP [1462:8c93] - 02:00.0 VGA-совместимый контроллер [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (версия a1) Подсистема: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [19da:1366] Используемый драйвер ядра: nouveau Модули ядра: nvidiafb, nouveau 02:00.1 Аудиоустройство [0403]: NVIDIA Corporation GM204 Аудио контроллер высокой четкости [10de:0fbb] (rev a1) Подсистема: ZOTAC International (MCO) Ltd. GM204 Аудио контроллер высокого разрешения [19da: 1366]
Теперь вам нужно проверить, какой драйвер используется. Например, nouveau схватил мое VGA-устройство 02: 00.0, которое я хочу использовать для своей виртуальной машины, поэтому я внес его в черный список:
sudo nano /etc/modprobe.d/blacklist.conf
blacklist nouveau
и вы сделали.
В моем случае это вызвало бы проблему, так как у меня установлено два nVidia VGA (01:00.0 и 02:00.0), которые работают с одним и тем же драйвером. В моем случае я не заносить драйвер в черный список.
Я вручную отсоединяю nouveau от моей карты VGA 02: 00.0, так как я хотел использовать эту карту для моей виртуальной машины и VGA 01: 00.0 для моего хоста Linux. Благодаря этому руководству я узнал, как это сделать: https://lwn.net/Articles/143397/
Введите sudo tree /sys/bus/pci/drivers/nouveau
, Обмен nouveau с любым модулем захватил ваше устройство.
Вы должны получить список, как это:
/ SYS / автобус / PCI / драйверы / нуво 0000── 0000: 01: 00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0 0000── 0000:02:00.0 -> ../../../../devices/pci0000:00/0000:00:05.0/0000:02:00.0 Ind── связать ├── модуль -> ../../../../module/drm New── new_id Remove── remove_id E── событие B── убрать
Мы видим, что драйвер nouveau имеет к устройствам привязку к нему: 0000: 01: 00.0 и 0000:02:00.0
Чтобы отсоединить и связать мою графическую карту, мне сначала нужно отключить lightdm.service. Для этого я, например, открываю консоль вне рабочей среды с помощью сочетания клавиш CTRL+ALT+F2. Войдите в систему как root и введите systemctl stop lightdm.service
Теперь я могу отсоединить модуль от видеокарты:
echo -n "0000:02:00.0" > /sys/bus/pci/drivers/nouveau/unbind
и связать его с любым модулем, который я хочу (pci-заглушка или vfio-pci). Я использовал vfio-pci.
echo -n "0000:02:00.0" > /sys/bus/pci/drivers/vfio-pci/bind
После этого вы можете снова запустить ваш desktopmanager: systemctl start lightdm.service
Если все работает, вы должны найти ваше устройство привязанным к модулю, который вы указали, посмотрев с lspci -knn | grep VGA -A 5
снова.
01: 00.0 VGA-совместимый контроллер [0300]: устройство NVIDIA Corporation [10de:128b] (rev a1) Подсистема: Micro-Star International Co., Ltd. Устройство [MSI] [1462:8c93] Используемый драйвер ядра: модули ядра nouveau: nvidiafb, nouveau 01: 00.1 Аудиоустройство [0403]: NVIDIA Corporation GK208 Аудио контроллер HDMI/DP [10de:0e0f] (rev a1) Подсистема: Micro-Star International Co., Ltd. [MSI] GK208 Аудио контроллер HDMI/DP [1462:8c93] - 02:00.0 VGA-совместимый контроллер [0300]: NVIDIA Corporation GM204 [GeForce GTX 970] [10de:13c2] (rev a1) Подсистема: ZOTAC International (MCO) Ltd. GM204 [GeForce GTX 970] [ 19da: 1366] Используемый драйвер ядра: vfio-pci Модули ядра: nvidiafb, nouveau 02: 00.1 Аудиоустройство [0403]: NVIDIA Corporation GM204 Аудио контроллер высокой четкости [10de:0fbb] (rev a1) Подсистема: ZOTAC International (MCO) Ltd. GM204 Аудио контроллер высокого разрешения [19da: 1366]
К сожалению, этот обходной путь теряет эффект после перезагрузки. И все же я не узнал, как сделать это постоянным. Может быть, кто-нибудь еще может дать мне подсказку. Полагаю, что-то вроде стартового сценария возможно. Но было бы лучше иметь возможность привязать устройство к определенному модулю без необходимости сначала отсоединять его. Представьте, что я хотел бы использовать драйвер NVIDIA однажды. В этом случае открепление от nouveau будет бесполезным, поскольку графическая карта будет привязана к модулю nvidia.
Я также настраиваю переход через QEMU-KVM, и у меня была такая же проблема, как и у вас. Я использую встроенную графическую карту Intel в качестве основного графического процессора, поэтому я открыл настройки nvidia и отключил гибридную графику, чтобы карта nvidia не использовалась: (рис.)
После этого у меня не было проблем с привязкой карты к vfio-pci.
Возможно, что модули nvidia каким-то образом вызовут у вас проблемы при запуске qemu, или у вас нет возможности отключить гибридную графику. В этом случае вы также можете попробовать то же, что и я, и вручную отключить модули nvidia, используя скрипт, подобный этому, в режиме консоли (CTRL+ALT+F1):
#!/bin/bash
sudo service lightdm stop
sudo rmmod nvidia_uvm
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
sudo service lightdm start
Это останавливает диспетчер отображения (в моем случае lightdm), отключает модули nvidia по порядку и впоследствии перезапускает диспетчер отображения. Обязательно запустите это в консольном режиме, так как запуск этого с рабочего стола, скорее всего, прервет выполнение скрипта после первой строки.
Модули nvidia будут автоматически загружаться снова при перезагрузке, но вы также можете загрузить их снова вручную с помощью:
modprobe nvidia nvidia_modeset nvidia_drm nvidia_uvm
Надеюсь это поможет.
Деактивируйте nvidia/nuveau, используя конфигурацию grub.
Есть возможность сдать module_blacklist=<module1>[,<module2>]
(документация) к ядру через командную строку grub2. я смог деактивировать драйверы nuveau и nvidia со следующим дополнением к GRUB_CMDLINE_LINUX_DEFAULT
в /etc/default/grub
(не забудьте оформить sudo update-grub
):
module_blacklist=nvidia,nvidia_uvm,nvidia_drm,nvidia_modeset,nouveau
Также есть возможность автоматически генерировать записи Grub с и без этой опции для каждого ядра: https://unix.stackexchange.com/questions/24670/choose-at-grub-menu-whether-nvidia-driver-should-be-used (первый ответ). Но это оказалось более громоздким, чем ожидалось. Конфигурация Ubuntu Grub очень сложна. Обязательно сделайте резервную копию, прежде чем возиться с ней.
Это особенно полезно, если вы хотите использовать мощную карту NVIDIA для игр на виртуальной машине с использованием VGA Passthrough, но при этом имеете возможность использовать ее для глубокого изучения, например tensorflow
, Только перезагрузка требуется для переключения между этими двумя.
Вы пробовали это руководство https://forum.level1techs.com/t/play-games-in-windows-on-linux-pci-passthrough-quick-guide/108981?:) Это совсем новее:)
Ваш звук был востребован заглушкой
[ 2.029637] pci-stub 0000:01:00.1: claimed by stub
Видео нет. У меня такая же проблема, я попал в черный список Nvidia и / или Nouveau. Я использую Ubuntu Server 15.10, поэтому не совсем то же самое, но у меня та же проблема. Я искал в сети несколько недель и ничего.
Редактировать Наконец исправил, я нашел это здесь: https://forum.level1techs.com/t/pci-stub-not-claming-secondary-graphics-card/88728
Поэтому я занес в черный список модули Nvidia и Nouveau и перезагрузился. Надеюсь, поможет
отредактируйте снова:
Мои текущие шаги, которые я предпринял, чтобы связать карты pci с pci-заглушкой на arch с ядром 4.10.1-1.
Я отредактировал / etc / default / grub, чтобы он выглядел следующим образом: GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu= на pci-stub.ids=1002:6798,1002:679a,1002:aaa0,1106:3483"
Затем я создаю новый файл конфигурации grub
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Затем перезагрузите компьютер.
В /etc/mkinitcpio.conf я добавил pci-заглушку в модули, чтобы она выглядела так: MODULES="pci-stub"
тогда беги
$ sudo mkinitcpio -P
восстановить все ваши изображения initramfs. Затем перезагрузите компьютер.
Тогда эта команда просто для того, чтобы убедиться, что они были заявлены pci-grub
$ dmesg | grep pci-stub