Как пробросить видеокарту в virtualbox

Обновлено: 30.06.2024

В Панели управления NVIDIA я явно выбрал высокопроизводительный процессор NVIDIA для:

Когда VirtualBox работает, программное обеспечение NVidia не отображает его как приложение, использующее графический процессор NVidia. Поэтому я предполагаю, что VirtualBox действительно не использует графический процессор Nvidia.

Windows 7 x64 (то же самое, что и хост)

Гостевые дополнения установлены

3D-ускорение включено в настройках VirtualBox: Дисплей / Видео / Включить 3D-ускорение

Что Rhinoceros , приложение с поддержкой OpenGL, сообщает как видеоадаптер:

Мне кажется, что виртуальная машина использует аппаратное ускорение 3D хоста, но, к сожалению, Intel.

@ernie VirtualBox может предоставить гостям прямой доступ к API OpenGL графического процессора хоста. Насколько я могу сказать, что работает на моей машине. Только VirtualBox использует графический процессор Intel вместо графического процессора NVidia. Цитата из руководства VirtualBox : «С этой функцией, если приложение внутри вашей виртуальной машины использует 3D-функции через программные интерфейсы OpenGL или Direct3D 8/9, вместо того, чтобы эмулировать их в программном обеспечении (что будет медленным), VirtualBox попытается использовать 3D-оборудование вашего хоста. " @feklee Название вопроса вводит в заблуждение: вы хотите использовать графический процессор nVidia для VBox. «От» также возможно, но означает что-то другое: аппаратное обеспечение, т.е. Доступ к графическому процессору хоста напрямую из VBox.

Я понимаю, что прошло несколько лет, но я хотел ответить, так как этот пост показывается довольно высоко, когда вы используете Google для «virtualbox 3d множественный GPU». За прошедшее время все стало намного проще и лучше.

Люди, которые натыкаются на этот поток, скорее всего, окажутся здесь, потому что у них есть ноутбук или ПК с двумя графическими процессорами, что довольно распространено в наши дни, особенно на игровых ноутбуках. Встроенный графический процессор Intel используется для рендеринга окон и обычных приложений, но приложения, использующие 3D-функциональность графического процессора, должны делать это с помощью высокопроизводительного графического процессора Nvidia.

Сегодня я собирал виртуальную машину Ubuntu на своем ноутбуке для кроссплатформенной разработки, и все было хорошо, за исключением того, что гостевая виртуальная машина была очень медленной, и этому не было никакого объяснения, потому что процессор, память и диск демонстрировали низкую загрузку.

Не потребовалось много времени, чтобы понять, что именно видео было причиной проблемы. Запуск приложений, максимизация / минимизация окон - все, что мы считаем само собой разумеющимся в 2019 году, но нуждающееся в 3D-ускорении для работы на любой разумной скорости - использовало графический процессор 0.

Это было легко определить, потому что Windows 10 теперь может видеть использование графического процессора с помощью «диспетчера задач», а затем вкладки «производительность». И я мог видеть, как я двигал окна, развернул, свернул, что это было сделано через GPU на хосте. Этот графический процессор на хосте является встроенным Intel HD GPU, и я хотел использовать NVidia GTX-1050ti, который был GPU1.

После поисков я не нашел нигде, где можно было бы указать, какой графический процессор использовать. Но эта ветка и некоторые другие напомнили мне, что при таких настройках нужно перейти в панель управления NVidia, затем «управлять настройками 3d», а затем вкладка «Настройки программы».

Вы вряд ли найдете «Virtualbox» в списке. Но вы можете нажать кнопку «Добавить» и добавить virtualbox.exe. Возможно, вам придется детализировать диск / путь, где находится ваша установка Virtualbox. После того, как вы добавили его, в настройках ниже убедитесь, что пункт 2. «Выберите предпочтительный графический процессор для этой программы» установлен на графический процессор, который вы хотите использовать, который в моем случае был «Высокопроизводительный процессор NVIDIA» ,

Не устанавливайте его в автоматический режим и, конечно, не устанавливайте его в интегрированный режим. Конечно, вам нужно, чтобы настройки виртуальной машины были установлены с установленным флажком 3D-ускорения, и вам необходимо установить гостевые дополнения на хосте. Но после того, как вы установили параметры 3d видео для хоста, как описано выше, выключите гостевую виртуальную машину, выйдите из виртуальной коробки, а затем перезапустите virtualbox и виртуальную машину.

Если вы используете диспетчер задач | performancemacne и посмотрите на процесс «менеджер виртуальных ящиков» и посмотрите, какой графический процессор используется при навигации по интерфейсу гостевой виртуальной машины, вы должны увидеть его, используя лучший графический процессор сейчас. Смотрите изображение, вставленное ниже.

Все это говорит, не ожидайте, что сможете запускать игры в гостевой виртуальной машине. Проход 3D ускорения до сих пор не так уж далеко впереди. Но вы можете ожидать, что у вас в гостях будет современная ОС и пользовательский интерфейс, и у вас будет приемлемый опыт. Можно было бы играть в более старые игры на гостевой виртуальной машине, как и все, что основано на DirectX9. К сожалению, по мере развития возможности виртуализации графических процессоров технология 3D-игр развивается быстрее.

Механизм проброса видеокарты на английском называется passthrough. Технология лет 7 существует, но до сих пор проще поставить системы параллельно. Поддержка метода развивается очень медленно и существует очень много ограничений. Я собрал и выложил теоретическую информацию которую смог найти. Пробросить свою видеокарту мне не удалось из-за отсутствия аппаратной поддержки.

Для проброса видеокарты с хоста в виртуальную машину VirtualBox нужно:

  1. Поддержка процессором или чипсетом материнской платы виртуализации VT-d (Intel Virtualization Technology for Directed I/O) или IOMMU у AMD.
  2. Поддержка видеокартой passtrough. Для старых видеокарт Nvidia заявлялось, что поддерживается линейками Quadro и Tesla. Попадается информация, что можно пробросить GTX 1050. Некоторые видеокарты можно патчить чтобы они видились как поддерживаемые. Для видеокарт AMD обозначают более широкую поддержку оборудования, но нужно проверять. В сети встречаются списки устройств которые удается пробросить, но единого перечня нет. На сайтах производителей GPU точной информации тоже нет.
  3. Вторая видеокарта. Одна будет работать на хосте, а вторая в ВМ (на хосте ее нельзя будет использовать).
  4. Виртуальная машина VirtualBox с включенной виртуализацией и установленной операционной системой 🙂

Перед пробросом нужно в BIOS хоста включить виртуализацию в настройках CPU и чипсета (если есть).

Для самого проброса потребуется произвести следующие действия:

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)

Для отсоединения видеокарты нужно использовать команду:

Если вы хотите пробросить одну видеокарту, то вторую вам нужно в BIOS выбрать как основную. Иначе система не сможет пробросить в ВМ основную видеокарту и выведет ошибку доступа.

Возможно, что вам понадобится еще включить IOMMU в ядре.

В /etc/default/grub заменить

После чего выполнить в терминале

Возможно, что также будет нужно отключить использование системой пробрасываемой видеокарты, но у некоторых работает и без этого.

Проверяем BIOS ./rom-parser image.rom
Если вы видите подобное PCIR: type 3(EFI ROM), то ваша видеокарта поддерживает OVMF.
Ваш конфиг виртуалки будет немножко отличаться.

1. Устанавливаем необходимый софт pacman -S qemu libvirt synergy
2. Нужно подкорректировать загрузку ядра, что бы не подцеплялась, наша видеокарта которую мы будем прокидывать. Нужно узнать id вендора и кода нашей видеокарты. Для этого выводим lspci Находим там код видеокарты, запоминаем его, и вводим уже lspci -n Теперь правим параметры загрузки grub, для этого открываем /etc/default/grub
и добавляем параметр в GRUB_CMDLINE_LINUX_DEFAULT vfio-pci.ids=10de:11c6,10de:0e0b
У меня следующего вида
Применяем параметры grub-mkconfig -o /boot/grub/grub.cfg , после перезагрузки, должно быть нечто подобное dmesg | grep vfio_pci :
Подкорректируем /etc/mkinitcpio.conf:
Применим mkinitcpio -p linux (linux изменить на имя вашего ядра)

3. После окончания установки, настало время прокинуть видеокарту.
Раскоментируем строку в конфиге
и запустим виртуалку.

Если все прошло хорошо, должно определиться новое устройство, скачиваем и устанавливаем драйвера для видеокарты, я не ставил никакого лишнего софта, только драйвера, пишут что Catalyst control center да и nvidia experience загоняет в синий экран, не проверял.

Нужно не забыть установить synergy, без этой программы управление(мышкой и клавиатурой) виртуалкой будет невозможно.
Найдете ее на торрентах или прочих сайтах, там в настройках надо указать client: 10.0.2.2(дефолтный ip хоста) и имя экрана, допустим Windows. Теперь настроим synergy на хосте(компьютер с Linux), создадим конфиг следующего содержания:
synergy.conf
Windows и Linux это имена экранов, измените на ваши
Запустим synergy synergys --config synergy.conf --debug INFO , и при передвижение мышки за левую часть экрана, она должна переходить на виртуалку.
Если все получилось, выключаем виртуальную машину, в конфиге меняем строку -vga std на -vga none , подключаем к выходу проброшенной видеокарты кабель к монитору, запускаем виртуалку и у нас на экране должна появится картинка с процессом загрузки. Проверяем функциональность synergy, кнопка F12 блокирует курсор на текущем экране.


Выклаываю полный скрипт запуска виртуалки
Так же рекомендую отключить запрос на восстановление системы при загрузке после сбоев
В данную тему я нырнул лишь ради интереса и возможности поиграть в ММО Black Desert, отлично кстати работает.

UPD 01.06.2019
Обновил компьютер до Ryzen и столкнулся с проблемой
Подробности здесь AMD Ryzen и проблемы с пробросом видеокарты в QEMU KVM

UPD 15.09.2019
После очередного обновления начались неприятности, qemu падал в core-dump при попытке издать малейший звук, решилась эта проблема добавлением строки
1000 — id вашего юзера, все переменные QEMU_AUDIO можно убрать.

Если будет писать что нет доступа

Можно скопировать пользовательские cookie в root
На 15.09 проблема с Ryzen еще присутствует, приходится патчить ядро.

Мой опыт проброса PCI видеокарты на виртуальную машину с Windows 10. Для вдохновения и информации использовал следующие ресурсы:

1. Установка видеокарты


ASUS GeForce GTX 1060 (PH-GTX1060-3G)

Данная видеокарта ранее использовал на домашнем ПК. После переустановки на Серверный ПК(Proxmox) перестали работать сетевые порты.

Как только начинается грузится Proxmox на сетевых адаптерах даже индикаторы перестают моргать. Оказалось дело в том что сбилась нумерация, проверить это можно так:

2. Настройка Proxmox

2.1 GRUB

Первым делом необходимо активировать модуль IOMMU

Привести строку к следующему виду (для AMD amd_iommu=on):

2.2 Необходимые модули

Перезапускаю сервер PVE


3. Создание и настройка VM (Виртуальной машины)

3.1 Создание VM

Создаю виртуальную машину:




Основные моменты это UEFI и Machine q35 (остальное по желанию)

Подключил 2 CD диска:

  1. Windows 10 install (.iso)
  2. virtio-win-0.1.185.iso (драйвера)

Установил ОС, драйвера с диска и qemu-agent (там же в диске с драйверами \guest-agent\qemu-ga-x86_64.msi)

3.2 Настройка VM

Редактирую строку CPU

При выполнении команды lspci вижу устройства

Здесь видео и аудио разделены как отдельные подинтерфейсы. Сам корневой интерфейс можно указывать как 1:00

Здесь видео и аудио разделены как отдельные под интерфейсы. Сам корневой интерфейс можно указывать как 1:00

Добавляю PCI Device на VM


Еще раз открываю файл конфигурации

Редактирую строку hostpci

3.2 Настройка Windows

Запускаю ОС и устанавливаю последние драйвера nVidia. Проверяю:


Включаю RDP, ставлю необходимые программы

4. Тестирование



Видеокарта проброшена и работает. Можно использовать для вычислений, майнинга и игр.

RDP Gaming

Вопрос: Возможно ли и как играть на виртуальной машине по RDP?

Ответ: Да возможно, не во все игры

Многие шутеры и игры от 3 лица по простому не получится управлять мышкой. Другого виды игры (стратегии, мобы и т.п.) еще есть возможность попробовать. На самом деле протокол RDP достаточно быстро, плавно, качественно передают изображение, что позволяет запускать многие проекты.

Тут уперся в ОЗУ (надо выделить больше), заметные микролаги, но в целом играть можно.

Как играть на виртуальной машине?

Искал разные сервисы для GameStreaming-а и удаленных игр. Больше всего понравился MoonLight (официальный сайт)

Виртуальная машина будет Хостом (Необходимо установить GEFORCE EXPERIENCE) и включить SHIELD


Установил программу для Hosta (добавить разрешения в брандмауэр) и запускаю её

На удаленном компьютере скачиваю программу для Клиента запускаю. Добавляю по IP адресу и вижу игры установленные на виртуальной машине.




Настройки максимальные, играть гораздо комфортнее.

4. Итоги

Удалось полноценно пробросить видеокарту как PCI устройство.

Играть на виртуальной машине вполне реально если задержка до сервера небольшая.

Сервис MoonLight позволяет с любых устройств и операционных систем спокойно подключаться и запускать игры на виртульной машине.


Хороший мануал, пиши еще.

Добрый день. В пункте 1 вы указали о том что у сетевого интерфейса сменился идентификатор (нумерация). Каким образом решили эту проблему? Заранее спасибо.

Сдвиг нумерации вроде такой был enp6s0 стал enp7s0

Спасибо) я так же решил проблему))))

Если видеокарту туда сюда не таскать то проще так и сделать, а еще можно через udev забиндить названия по маку сетевушек:

а если карта не стартует? в диспетчере с восклицательным знаком висит, типа устройство сообщило об ошибке..

Нужно будет детальнее смотреть, какая версия Proxmox? Возможно в новых версиях какие то нюансы добавились, какая модель видеокарты? По пунктам в инструкции все точь в точь прошло по плану? Для таких ошибок причин множество нужно методом исключения идти. Для начало советую на другом полноценном ПК с Win10 проверить видеокарту, затем с нуля начать по инструкции уже на виртуальной машине. Далее на wiki proxmox так же более подробная инструкция есть, по ней попробовать.

Читайте также: