Как в Linux пробросить видеокарту с хоста в гостевую виртуальную машину VirtualBox
Механизм проброса видеокарты на английском называется passthrough. Технология лет 7 существует, но до сих пор проще поставить системы параллельно. Поддержка метода развивается очень медленно и существует очень много ограничений. Я собрал и выложил теоретическую информацию которую смог найти. Пробросить свою видеокарту мне не удалось из-за отсутствия аппаратной поддержки.
Для проброса видеокарты с хоста в виртуальную машину VirtualBox нужно:
- Поддержка процессором или чипсетом материнской платы виртуализации VT-d (Intel Virtualization Technology for Directed I/O) или IOMMU у AMD.
- Поддержка видеокартой passtrough. Для старых видеокарт Nvidia заявлялось, что поддерживается линейками Quadro и Tesla. Попадается информация, что можно пробросить GTX 1050. Некоторые видеокарты можно патчить чтобы они видились как поддерживаемые. Для видеокарт AMD обозначают более широкую поддержку оборудования, но нужно проверять. В сети встречаются списки устройств которые удается пробросить, но единого перечня нет. На сайтах производителей GPU точной информации тоже нет.
- Вторая видеокарта. Одна будет работать на хосте, а вторая в ВМ (на хосте ее нельзя будет использовать).
- Виртуальная машина VirtualBox с включенной виртуализацией и установленной операционной системой 🙂
Перед пробросом нужно в BIOS хоста включить виртуализацию в настройках CPU и чипсета (если есть).
Для самого проброса потребуется произвести следующие действия:
- Узнать где на шине физически стоит требуемая видеокарта. В терминале вводим команду “lspci” и смотрим перечень устройств находящихся на PCI шинах. У меня две видеокарты расположены на 00:02.0 и 01:00.0.
00:02.0 Display controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
01:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 710] (rev a1)
2. Пробросить видеокарту в виртуальную машину. Где NameVM – имя виртуальной машины, а 01:00.0 – расположение пробрасываемой видеокарты:
VBoxManage modifyvm “NameVM” –pciattach 01:00.0@01:05.0
Для отсоединения видеокарты нужно использовать команду:
VBoxManage modifyvm “NameVM” –pcidetach 01:00.0
Если вы хотите пробросить одну видеокарту, то вторую вам нужно в BIOS выбрать как основную. Иначе система не сможет пробросить в ВМ основную видеокарту и выведет ошибку доступа.
У меня пробросить не получилось в виду отсутствия у процессора поддержки инструкций VT-d. Встроенная видеокарта от Intel пробрасывалась, но должным образом не работала в виртуальной машине (ошибка 034). А проброс внешней Nvidia приводил к тому, что виртуальная машина отказывалась стартовать. Даже если бы она пробросилась – скорее всего не работала бы в виду ограничений от Nvidia.
Смотрел также в сторону VMWare Workstation – не поддерживает проброс. Поддерживают ESXi и vSphere, но не вижу смысла заморачиваться если можно пробросить в VirtualBox. В нем это делается гораздо проще, но нужно иметь подходящее железо.
Возможно, что вам понадобится еще включить IOMMU в ядре.
В /etc/default/grub заменить
GRUB_CMDLINE_LINUX=””
На
GRUB_CMDLINE_LINUX=”intel_iommu=on”
После чего выполнить в терминале
sudo update-grub
Возможно, что также будет нужно отключить использование системой пробрасываемой видеокарты, но у некоторых работает и без этого.