Проброс видеокарты в virtualbox windows

в виртуалбокс — ни как. вообще. нет там такой фичи. ни в винде, ни в линуксе
в вмвари — то же самое. ни в винде, ни в линуксе
если у вас один видеоконтроллер — ни как. ни где, ни в винде, ни в линуксе
видеоконтроллер принадлежит одной ОС. если у вас он один, после загрузки основносй ОСи, он принадлежит ей

хотите хост (головная машина) и две виртуалки с проброшенными картами? вам надо три видеоконтроллера
но под виндой все равно — ни как. нет под настольную винду таких гипервизоров

если вы разоритесь на нужное количество видеокарт (может и дешевые найдутся) и в материнке хватит совместимых слотов, вам все рано понадобится серверная операционка:
— Windows Server Hyper-V — https://docs.microsoft.com/en-us/windows-server/vi… только не путайте с Windows Server, там десктопа нет. это специальная редакция для дата-центров, в ней живут только виртуалки
— или загадочный для вас линукс. он и в десктопных вариантах может включать любые свои серверные функции. при этом придется освоить какой либо из взрослых линуксовых гипервизоров

ps кстати. возможно вам проброс то и не нужен. более вероятно игре/боту нужен какой либо 3D ускоритель. а у вас

i7-9700k (с hd630)

. он дает фичи 3Д ускорителя головной системе, и то слабенькие. в ВМВари у вас эмуляция 3Д откажется включаться. в виртуалбоксе может включится, для этого надо экстеншенпак для виртуалбокса загрузить, правильной версии https://www.virtualbox.org/wiki/Downloads
но спасет ли это ваши игры, это уже сами проверяйте. по тому как может все дико тормозить

I realize a few years have passed but wanted to answer since this post shows up pretty high when you google for «virtualbox 3d multiple GPU». In the time that has passed, things have gotten a lot simpler and better.

People that stumble upon this thread will likely land here because they have a laptop or PC that has two GPU’s, which is quite common these days — especially on gaming laptops. The onboard Intel GPU is used for rendering windows and general applications, but applications that make use of GPU 3D functionality should do that via the higher performing Nvidia GPU.

Today, I was building an Ubuntu VM on my laptop to do some cross-platform development, and everything was fine except the guest VM was extremely slow, and there was no explanation for it because CPU, memory, disk were all showing low utilization.

It didn’t take long to figure out it was video performance that was causing the problem. Launching applications, maximizing/minimizing windows — anything that we take for granted in 2019 but needs 3D acceleration to work at any reasonable speed — was using GPU 0.

It was easy to determine this because Windows 10 now has the ability to see GPU utilization using «task manager», then the «performance» tab. And I could see as I moved windows, maximized, minimized, that was being done through GPU on the host. That GPU on the host is the integrated Intel HD GPU, and I wanted to use the NVidia GTX-1050ti, which was GPU1.

After searching around I didn’t really find anywhere where you could specify which GPU to use. But this thread, and some others, reminded me that on these kind of setups you have to go into the NVidia control panel, then «manage 3d settings», then the «Program Settings» tab.

You won’t likely find «Virtualbox» in the list. But you can press the «Add» button, and add virtualbox.exe. You may have to drill down the drive/path where your virtualbox installation is. Once you have added it, in the settings below make sure that item 2. «Select the preferred graphics processor for this program» is set to the GPU that you want it to use, which in my case was «HIgh-performance NVIDIA processor».

Don’t set it to auto, and certainly don’t set it to integrated. Of course, you need the VM settings set with the 3D acceleration box ticked, and you need the guest additions installed on the host. But once you have set the host video 3d settings as described above, shutdown the guest VM, exit virtual box, and then re-launch virtualbox and the VM.

If you use task manager|performacne and look at the «virtualbox manager» process and watch what GPU gets used when you navigate the guest VM’s UI, you should see it using the better GPU now. See the image pasted below.

All that said, don’t expect to be able to run games in a guest VM. 3D acceleration pass thru still is not quite that far along. But you can expect to have a modern OS and UI in your guest, and have an acceptable experience. One would be able to play older games in the guest VM, like anything based on directX9. Unfortunately, as the ability to virtualize GPU eveolves, the 3d gaming technology evolves quicker.

Screenshot


1

1

Добрый день!
Никак не могу разобраться как сделать проброс видеокарты и прочего. Virtualbox последней версии, vt-x и vt-d в биосе включил, хост — windows 10, гостевая Debian 9. lspci выводит такой список:

00:00.0 Host bridge: Intel Corporation 440FX — 82441FX PMC [Natoma] (rev 02)

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]

00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)

00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter

00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)

00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service

00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC’97 Audio Controller (rev 01)

00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB

00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)

00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)

Содержание

  1. Как из домашнего ПК средствами виртуализации сохранить игровую систему
  2. Введение
  3. Требования к железу
  4. Установка и настройки
  5. Проброс видеокарты в виртуальную машину
  6. 1. Вступление
  7. 2. Аппаратная часть
  8. 3. Настройки ОС
  9. 4. Установка софта для виртуализации
  10. 5. Настройки ВМ QEMU-KVM via virt-manager

Как из домашнего ПК средствами виртуализации сохранить игровую систему

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

Введение

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

Достигается как при помощи приложений (например VirtualBox, VMware) так и на уровне систем, поддерживающих аппаратную виртуализацию (например KVM, ESXi, Hyper-V). В последнем случае потери производительности по сравнению с нативными системами минимальна.

Здесь и далее в статье будет описание настроек системы виртуализации с открытым исходным кодом Proxmox потому что она в меру дружелюбна, есть легкий доступ к консоли через веб форму, а так же базируется на связке Debian + kvm, по которым очень много гайдов и описаний в сети, т.е. документации в т.ч. и на русском языке.

Требования к железу

— процессор и материнская плата с поддержкой VT-x, VT-d от Интел или AMD-Vi, IOMMU от АМД. Не поленитесь и уточните поддерживает ли именно Ваш экземпляр данные требования.

Что касается материнских плат. Категорически не рекомендую гнать железо при посредственной разводке на плате питания. По Z270 и Z390 игнорировать оранжевую зону или оставлять работать в стоке.

  • 2 видеокарты, одну игровую (в сети за меньшее количество проблем при пробросах в виртуальную машину хвалят красных, но лично у меня все получилось с видеокартой от зеленых), вторую для хоста. В моем случае это интегрированная в процессор.
  • 1-2 монитора и кабели к ним, для того чтобы
  • пара комплектов клавиатура + мышь, чтобы было удобно работать и настраивать системы
  • второй ПК или планшет подключенный к локальной сети, что бы сделать настройки через вебформу.

Установка и настройки

Мною было использована следующая игровая конфигурация:

— ПК для хоста конфиг был собран на далеко не лучшей материнской плате, но на англоязычных форумах очень часто хвалят эту фирму за то, что ее железо чаще всего подходит для таких вещей:
Процессор — i7 8700k
Мать — ASRock Z390M Pro4
Видеокарта — INNO3D GeForce GTX 1070 iChill X4
— второй ПК (Мини-ПК Morefine-M1s),
— 2 мыши,
— 1 клавиатуру на хосте, на остальных устройствах использовал софтварную,
— 3 подключения к монитору Dell U2713HM (VGA — для интегрированной видеокарты, HDMI — для GTX1070, на DVI находится Мини-ПК. Переключения между видеосигналами осуществлял через меню монитора)

0й этап — На материнской плате включаем VT-d:Enable, Intel Vitrualization Technology:Enable, Primary Graphx adapter:VGA, Above 4G Decoding:Enable. Если есть возможность обязательно выбираем основным графическим адаптером тот, на котором будет работать хост, т.е. более слабую видеокарту и переключаемся на нее.

1й этап — Устанавливаем Proxmox на хост. Для этого:

1.1. Скачиваем образ диска с официального сайта

1.2. Пишем образ на флешку при помощи специальных программ

1.3. Загружаемся с флешки, и производим инсталляцию с указанием на какой жесткий диск ставить, вводим пароль для будущего пользователя root, а так же настройки сети прописываем явно.

2й этап — Подключаемся по сети через веб интерфейс при помощи второго ПК или
планшета (в моем случае это был Мини-ПК) к хосту и настраиваем Proxmox по этому гайду через текстовую консоль.

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

1) Run the «dmesg | grep ecap» command.

2) On the IOMMU lines, the hexadecimal value after «ecap» indicates whether interrupt remapping is supported. If the last character of this value is an 8, 9, a, b, c, d, e, or an f, interrupt remapping is supported. For example, «ecap 1000» indicates there is no interrupt remapping support. «ecap 10207f» indicates interrupt remapping support, as the last character is an «f».

Interrupt remapping will only be enabled if every IOMMU supports it.

Если условие выполняется — продолжаем.

Открываем файл командой из консоли (символ двойной решетки вводить не надо, так я буду разделять в тексте команды от того что необходимо внести в файл)

для процессоров Интел

для процессоров АМД

следом даем команду

после чего перезагружаем хост через веб интерфейс

Добавляем в файл конфигурации загрузку необходимых драйверов

Прописываем в консоли

На экран будет выведен список устройств доступных для проброса, находим интересующий нас блок с видеокартой, в моем случае это 2 устройства в группе видеокарта и звук по адрсам 01:00.0 и 01:00.1, поэтому я прописываю сразу группу.

Прописываем в консоли команду для того что бы определить модель и ее id

## lspci -n -s 01:00
01:00.0 0300: 10de:1b81 (rev a2)
01:00.1 0403: 10de:10f0 (rev a1)

Теперь правим файл под нашу видеокарту (в Вашем случае id будут иные)

Заносим в черный лист драйвера

Теперь создаем через веб интерфейс и правим через консоль файл настроек виртуальной машины. Здесь строка «args:» решает, т.к. без нее драйвер видеокарты обнаружит виртуализацию, но путем подмены наименования оборудования, точнее hv_vendor_id=willitwork, мы снимаем проблему с ошибкой 43, которую может выдать видеодрайвер устройства. Здесь есть номер виртуальной машины в proxmox используемый в качестве имени.

Теперь перезагружаем хост и запускаем виртуальную машину.

3й этап — Через Удаленную видеоконсоль установим Windows и драйвера. В моем случае Windows распознал сперва видео драйвер proxmox для работы через видеоконсоль, потом нашел драйвер для GTX1070, а после обновления через интернет (принудительный поиск драйверов в сети) скачал и установил нужный мне драйвер для игровой видеокарты.

4й этап — Перезапустим Виртуальную машину, переключаем отображение видеопотока на мониторе на разъем видеокарты и… в моем случае все заработало сразу, никаких ошибок 43… При этом рабочий стол определяется как №2.

я попробовал запустить видео Blue-ray — без проблем, задержек и фризов с видеорядом нет, запустил Warhammer online — он завелся и в PvP играть было комфортно, запустил GTA5 у мя выскочила сюжетка, вполне комфортно пострелял. Визуально потерь в производительности нет.

Если нам необходимо пробросить жесткий диск целиком, то в файле настроек виртуальной машины необходимо добавить строку:

Конкретно какой именно sda/sdb/sdc/и т.п. можно уточнить в веб интерфейсе.

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

00:1f.0 ISA bridge: Intel Corporation Device a305 (rev 10)
00:1f.3 Audio device: Intel Corporation Device a348 (rev 10)
00:1f.4 SMBus: Intel Corporation Device a323 (rev 10)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Device a324 (rev 10)
00:1f.6 Ethernet controller: Intel Corporation Device 15bc (rev 10)

Т.е. звук или через видеокабель на монитор или внешняя звуковая карта. Порты USB пробрасываюся без проблем. К сожалению на текущий момент нерешаемо. Есть вариант удаленного подключения с другого ПК к игровому, через RDP или SPICE. В этом случае все будет нормально

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

UPDATE1:
Несколько замечаний по переферии:
1. Как прокинуть в ВМ клавиатуру с порта PS/2:
сперва вводим комманду в консоли
## dmesg | grep input
Ищем в тексте запись навроде

input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2

Запоминаем цифру 2 в конце, она может быть и другой. Потом в файл настроек ВМ в строку добавляем:
args: -object ‘input-linux,id=kbd,evdev=/dev/input/event2,grab_all=on,repeat=on’
вставляя 2 в конец evdev=/dev/input/event2

Для мыши — аналогично.

2. По USB:
Что касается USB устройств там все проще, устройства прокидываются прямо из веб формы по ID или же целиком можно прокинуть порт. Однако есть нюанс — если Вы по каким-либо причинам не можете как и я прокинуть аудиоустройство в ВМ, т.к. оно содержится в группе с ключевыми контроллерами без которых хост не может полноценно работать, то проброс порта/устройства через USB решает эту проблему, но звук может начать отваливаться через некоторое время работы, шипеть/гудеть и прочие… прочее, в то же время на нативной системе все будет замечательно. В этом случае необходимо пробрасывать не порт/устройство, а сам контроллер USB как PCIe устройство по методу указанному в статье. И все резко наладится. Но в то же время через хост после запуска ВМ с такими настройками пробросить другие устройства с этого контроллера больше не получится.

3. Жесткие диски можно пробрасывать как через проброс контроллера как PCIe устройство по методу указанному в статье (не рекомендую пробрасывать контроллер интегрированный в материнскую плату, только подключенные к PCIe), либо напрямую:
заходим в
## cd /dev/disk/by-id
через dir смотрим листинг…
копируем строки вида ata-WDC_WD40EFRX-68WT0N6_WD-WCC4E1АС9SХ9, в которой прописан интерфейс подключения, марка и номер серии жесткого диска. Затем открываем Файл конфигурации ВМ и пишем:
sata1: volume=/dev/disk/by-id/ata-WDC_WD40EFRX-68WT0N6_WD-WCC4E1АС9SХ9
и все работает, при этом учитывайте, что sata0-sata5, т.е. для одной ВМ число подключаемых таким образом дисков, включая виртуальных, не может превышать 6шт.

UPDATE 2
1. На этом видео видно, что для обхода ошибки 43 помогает обманка со следующей строкой в конфигурационном файле ВМ:

www.youtube.com/watch?v=fgx3NMk6F54
Однако там проброс ВК организован с использованием rom файла, что отличается от моего варианта.

2. В связи с тем, что была обновлена версия ProxMox с 5й на 6ю, то что бы система работала с UEFI БИОСом, то необходимо добавить в оборудовании ВМ EFI-диск, иначе не взлетит и не заведется, на 5й версии ProxMox’а этой фичи не было.

Источник

Проброс видеокарты в виртуальную машину

1. Вступление

Две разные системы (win + linux) на одной аппаратной базе — реальность. В этом нет ничего нового или инновационного (на данный момент времени), но если требуется максимальная производительность гостевой системы, то не обойтись без проброса реальных устройств в виртуальную машину. Проброс сетевых карт, usb-контроллеров (etc) экстраординарных особенностей не несёт, а вот попытка «шаринга» ресурсов видеокарты и процессора вполне может принести некоторое количество проблем.

Итак, а для чего, собственного говоря, городить системы с полнофункциональным использованием ресурсов GPU и CPU? Самый простой и очевидный ответ — игры (широко известный факт — если не большинство, то очень многие, написаны под ОС Windows). Другой вариант — полноценное рабочее место с возможностью запуска требовательных приложений (например, CAD-софта), быстрым бэкапом (скопировать файл ВМ куда проще, чем создавать полную копию HDD/SSD) и опцией полного контроля сетевого трафика гостевой системы.

2. Аппаратная часть

Процессор: Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz

Материнская плата: ASRock Z390 Phantom Gaming 4S

Видеокарта 0 (для проброса в ВМ): Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X]

Видеокарта 1 (для хост-системы): Park [Mobility Radeon HD 5430]

USB-контроллер (для проброса в ВМ и последующего подключения периферийных устройств, например, клавиатуры): VIA Technologies, Inc. VL805 USB 3.0 Host Controller

3. Настройки ОС

В качестве хост-системы выбрана ОС AlmaLinux 8 (вариант установки«Server with GUI»). Долгое время пользовался CentOS 7/8, поэтому, думаю, выбор тут очевиден.

Первое, что необходимо сделать, — это ограничить использование видеокарты, предназначенной для использования в ВМ, хост-системой. Для этого применяем ряд команд и настроек:
1) с помощью команды « lspci -nn | grep RX » получаем уникальные идентификаторы видеокарты. Т. к. видеокарта RX-серии, то, соответственно, ищем в выводе lspci (утилита устанавливается посредством команды « dnf install pciutils ») по этим двум символам. Вывод получим примерно такой (выделенные подстроки — это и есть искомые идентификаторы устройств) —

«02:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X] [1002:699f] (rev c7)

02:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X] [1002:aae0] », где 1002:699f — идентификатор VGA-контроллера, а 1002:aae0 — встроенной аудиокарты. Также запоминаем идентификаторы «02:00.0» и «02:00.1»;

2) добавив к команде « lspci -nn » ключ « k » (« lspci -nnk ») находим в выводе устройство «1002:699f» и запоминаем значение «Kernel driver in use» . В моём случае — это « amdgpu »;

3) в файле « /etc/default/grub » находим строку, начинающуюся с « GRUB_CMDLINE_LINUX », и добавляем после « quiet » значения «intel_iommu=on iommu=on rd.driver.pre=pci-stub pci-stub.ids=1002:699f,1002:aae0», где « intel_iommu / iommu » – параметры, отвечающие за поддержку технологии IOMMU (технология взаимодействия виртуальных машин с реальным оборудованием), «rd.driver.pre=pci-stub» — указание на принудительную первоочередную загрузку фиктивного драйвера pci-sub, «pci-stub.ids» — перечисление устройств, для которых при загрузке ядра необходимо использовать фиктивный драйвер (т.е. происходит изоляция устройств для дальнейшего использования в виртуальных машинах). Если на хост-машине используется CPU от AMD, то «intel_iommu» меняем на «amd_iommu»;

4) в файл « /etc/modprobe.d/local.conf » добавляем строки « blacklist amdgpu » и « options pci-stub ids=1002:699f,1002:aae0 », где « blacklist amdgpu » — явное указание на запрет использования драйвера AMD для графических устройств, а « options pci-stub ids=1002:67ff,1002:aae0 » — явное указание на использование фиктивного драйвера для соответствующих идентификаторов устройств;

5) выполняем команду « grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg » (т.е. пересоздаём конфигурационный файл загрузчика GRUB). Если речь не про EFI-загрузку, то команда выглядит так — « grub2-mkconfig -o /boot/grub2/grub.cfg »;

6) выполняем команду « dracut —regenerate-all —force » для пересоздания образа initramfs (initial RAM disk image, загружаемый в оперативную память файл с образом файловой системы), используемого при загрузке Linux в качестве первоначальной корневой файловой системы;

7) перезагружаем хост виртуализации.

Смысл этих настроек в том, чтобы ограничить использование определённых устройств при загрузке. Например, до прописания параметров в выводе команды «lspci -v» для VGA-контроллера будет присутствовать подстрока « Kernel driver in use: amdgpu », а после перезагрузки – « Kernel driver in use: pci-stub ». При старте же ВМ с Windows (и после проброса устройств) – “ Kernel driver in use: vfio-pci ” (в чём можно убедиться после запуска созданной ВМ). Важный момент — используемая для хост-системы видеокарта должна использовать драйвера, отличные от используемых для пробрасываемой видеокарты, например, в моём случае используется «Radeon HD 5430», драйвер для которой — это «radeon» (в выводе « lspci -v » – « Kernel driver in use: radeon »).

4. Установка софта для виртуализации

1) « dnf install epel-release ».

2) « dnf install qemu-kvm qemu-img libvirt virt-install libvirt-client virt-viewer virt-manager seabios numactl perf cockpit cockpit-machines xauth virt-top libguestfs-tools ».

3) « dnf install @virt ».

4) Optional. « dnf install perl » (Perl – one love).

5. Настройки ВМ QEMU-KVM via virt-manager

Предварительно скачиваем iso-образ Windows 10 и драйвера Virtio от RedHat (тоже в виде iso-образа).

При первоначальной установке всегда ставим галочку « Customize configuration before install ».

1) Указываем iso-образ устанавливаемой операционной системы (например, Windows 10). Также добавляем дополнительное устройство вида «CD-ROM» и монтируем в доп. устройство iso-образ с драйверами Virtio.

2) Для виртуального HDD (куда планируется установка ОС) выставляем: « Bus type = Virtio ». Тип виртуального диска — qcow2 или raw.

3) Для более эффективной работы размещаем основной виртуальный диск для ВМ на SSD.

4) Модель сетевой карты — virtio.

5) Overview: chipset = “Q35”, firmware = “UEFI x86_64: /usr/share/OVMF/OVMF_CODE.secboot.fd”.

6) OS Information: Operation System = “Microsoft Windows 10”.

7) CPU (соответствующие блоки в XML должны выглядеть именно так, если речь про аналогичную аппаратную конфигурацию):

Источник

I realize a few years have passed but wanted to answer since this post shows up pretty high when you google for «virtualbox 3d multiple GPU». In the time that has passed, things have gotten a lot simpler and better.

People that stumble upon this thread will likely land here because they have a laptop or PC that has two GPU’s, which is quite common these days — especially on gaming laptops. The onboard Intel GPU is used for rendering windows and general applications, but applications that make use of GPU 3D functionality should do that via the higher performing Nvidia GPU.

Today, I was building an Ubuntu VM on my laptop to do some cross-platform development, and everything was fine except the guest VM was extremely slow, and there was no explanation for it because CPU, memory, disk were all showing low utilization.

It didn’t take long to figure out it was video performance that was causing the problem. Launching applications, maximizing/minimizing windows — anything that we take for granted in 2019 but needs 3D acceleration to work at any reasonable speed — was using GPU 0.

It was easy to determine this because Windows 10 now has the ability to see GPU utilization using «task manager», then the «performance» tab. And I could see as I moved windows, maximized, minimized, that was being done through GPU on the host. That GPU on the host is the integrated Intel HD GPU, and I wanted to use the NVidia GTX-1050ti, which was GPU1.

After searching around I didn’t really find anywhere where you could specify which GPU to use. But this thread, and some others, reminded me that on these kind of setups you have to go into the NVidia control panel, then «manage 3d settings», then the «Program Settings» tab.

You won’t likely find «Virtualbox» in the list. But you can press the «Add» button, and add virtualbox.exe. You may have to drill down the drive/path where your virtualbox installation is. Once you have added it, in the settings below make sure that item 2. «Select the preferred graphics processor for this program» is set to the GPU that you want it to use, which in my case was «HIgh-performance NVIDIA processor».

Don’t set it to auto, and certainly don’t set it to integrated. Of course, you need the VM settings set with the 3D acceleration box ticked, and you need the guest additions installed on the host. But once you have set the host video 3d settings as described above, shutdown the guest VM, exit virtual box, and then re-launch virtualbox and the VM.

If you use task manager|performacne and look at the «virtualbox manager» process and watch what GPU gets used when you navigate the guest VM’s UI, you should see it using the better GPU now. See the image pasted below.

All that said, don’t expect to be able to run games in a guest VM. 3D acceleration pass thru still is not quite that far along. But you can expect to have a modern OS and UI in your guest, and have an acceptable experience. One would be able to play older games in the guest VM, like anything based on directX9. Unfortunately, as the ability to virtualize GPU eveolves, the 3d gaming technology evolves quicker.

Screenshot

… или как из игрового ноутбука средствами виртуализации сохранить игровую систему!
Если Вы рассматриваете ноутбук/ПК не только как игровую станцию, а еще и как хост для виртуальных машин, но при этом иногда нужно поиграть/поработать с 3d, то это возможно!

Добро пожаловать под cut.

Введение

Настоящая статья задумана как инструкция и развитие моей предыдущей статьи (Как из домашнего ПК средствами виртуализации сохранить игровую систему) по настройке хоста под виртуализацию с пробросом видеокарты игровой серий, не профессиональной. О пробросе интегрированной видеокарты будет сказано в конце статьи отдельно.

Ограничения метода

Для проброса именно дискретной видеокарты ноутбука/PCI-Express порт с установленной видеокартой необходимо выполнение следующих условий:

  1. Процессор и материнская плата должны поддерживать VT-x, VT-d от Интел или AMD-Vi, IOMMU от АМД, а так же эти технологии необходимо активировать в BIOS.
  2. После включения технологии IOMMU, о чем будет сказано ниже, необходимо в консоли прописать команду # dmesg | grep ecap, если в полученных строчках ответа последний символ 8, 9, a, b, c, d, e, или f, то поддерживается технология переназначение прерываний, а значит проброс получится, иначе нет.
    Например «ecap 10207f» сигнализирует о том, что результат будет успешным, а «ecap 1000» сигнализирует о том, что можно предаваться унынию.

после активации IOMMU в файле grub

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

root@proxmox:~# dmesg | grep ecap
[ 0.145822] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e
[ 0.145831] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da

Переназначение прерываний работает, т.к. ecap оканчивается на A и E!

root@proxmox:~# lspci
00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 07)
00:01.0 PCI bridge: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) (rev 07)
00:02.0 VGA compatible controller: Intel Corporation CometLake-S GT2 [UHD Graphics 630]
00:12.0 Signal processing controller: Intel Corporation Cannon Lake PCH Thermal Controller (rev 10)
00:14.0 USB controller: Intel Corporation Cannon Lake PCH USB 3.1 xHCI Host Controller (rev 10)
00:14.2 RAM memory: Intel Corporation Cannon Lake PCH Shared SRAM (rev 10)
00:14.3 Network controller: Intel Corporation Wireless-AC 9560 [Jefferson Peak] (rev 10)
00:15.0 Serial bus controller [0c80]: Intel Corporation Cannon Lake PCH Serial IO I2C Controller #0 (rev 10)
00:16.0 Communication controller: Intel Corporation Cannon Lake PCH HECI Controller (rev 10)
00:17.0 SATA controller: Intel Corporation Cannon Lake PCH SATA AHCI Controller (rev 10)
00:1b.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #21 (rev f0)
00:1c.0 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #5 (rev f0)
00:1c.5 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #6 (rev f0)
00:1c.6 PCI bridge: Intel Corporation Cannon Lake PCH PCI Express Root Port #7 (rev f0)
00:1f.0 ISA bridge: Intel Corporation H370 Chipset LPC/eSPI Controller (rev 10)
00:1f.3 Audio device: Intel Corporation Cannon Lake PCH cAVS (rev 10)
00:1f.4 SMBus: Intel Corporation Cannon Lake PCH SMBus Controller (rev 10)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Cannon Lake PCH SPI Controller (rev 10)
01:00.0 VGA compatible controller: NVIDIA Corporation TU116M [GeForce GTX 1660 Ti Mobile] (rev a1)
01:00.1 Audio device: NVIDIA Corporation TU116 High Definition Audio Controller (rev a1)
01:00.2 USB controller: NVIDIA Corporation TU116 USB 3.1 Host Controller (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU116 USB Type-C UCSI Controller (rev a1)
06:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
07:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTL8411B PCI Express Card Reader (rev 01)
07:00.1 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 12)

root@proxmox:~# find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/7/devices/0000:00:16.0
/sys/kernel/iommu_groups/15/devices/0000:07:00.0
/sys/kernel/iommu_groups/15/devices/0000:07:00.1
/sys/kernel/iommu_groups/5/devices/0000:00:14.3
/sys/kernel/iommu_groups/13/devices/0000:00:1f.0
/sys/kernel/iommu_groups/13/devices/0000:00:1f.5
/sys/kernel/iommu_groups/13/devices/0000:00:1f.3
/sys/kernel/iommu_groups/13/devices/0000:00:1f.4
/sys/kernel/iommu_groups/3/devices/0000:00:12.0
/sys/kernel/iommu_groups/11/devices/0000:00:1c.5
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.1
/sys/kernel/iommu_groups/1/devices/0000:01:00.3
/sys/kernel/iommu_groups/1/devices/0000:01:00.2
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:17.0
/sys/kernel/iommu_groups/6/devices/0000:00:15.0
/sys/kernel/iommu_groups/14/devices/0000:06:00.0
/sys/kernel/iommu_groups/4/devices/0000:00:14.2
/sys/kernel/iommu_groups/4/devices/0000:00:14.0
/sys/kernel/iommu_groups/12/devices/0000:00:1c.6
/sys/kernel/iommu_groups/2/devices/0000:00:02.0
/sys/kernel/iommu_groups/10/devices/0000:00:1c.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1b.0

Здесь нас из первого линстинга интересует адрес видеокарты и сопутствующих устройств, видно, что помимо видеокарты в одном блоке идет аудио-контроллер, а так же USB type-C контроллер, а в следующем листинге мы видим что устройства входят сообща в одну и ту же IOMMU-группу и при пробросе физически другим устройствам мешать не будут, следовательно проброс в теории возможен! Дальше только практика.

Что нам потребуется для установки и настройки

  1. ПК Ноутбук с дискретной игровой видеокартой у которого схема подключения к дисплею/монитору типа MUXedimage
  2. Роутер с доступом в интернет (Для настройки и последующего использования я бы рекомендовал подключаться кабелем к роутеру)
  3. Физически выделенный жесткий диск SSD под хост и виртуальные машины объёмом от 250Гб
  4. Загрузочная USB флешка с ProxMox’ом (надстройка над Debian Linux + KVM)
  5. Последняя версия VirtIO драйверов
  6. Дополнительный внешний монитор, подключённый к Вашему ноутбуку кабелем в видео-разъем управляемым напрямую дискретной видеокартой (кроме случаев, если у Вас дисплей ноутбука напрямую подключен к дискретной видеокарте)
  7. Дополнительную мышь и клавиатуру для гостевой системы, по крайней мере для первоначальной настройки
  8. Для удобства — второй ПК/ноутбук в сети на время установки и настройки софта, категорически для Вашего удобства, но это не является необходимым условием работы и дальнейшей эксплуатации такого ноутбука.

Установка ProxMox и настройка хоста

Настоящая настройка софта, нюансы и описание метода будет происходить на примере моего ноутбука от Clevo N957TC (aka Hasee ZX7-ct5da), о котором я уже писал на Хабрахабре статью. Такого рода ноутбуки сейчас продают в России под брендом Dream Machines
Intel Core i7-8700, GTX 1660Ti, 16 Гб ОЗУ, 500Гб SSD, 15,6 дюйма

0-й этап. Проверяем что бы в BIOS’е были включены нужные параметры виртуализации, указанные в требованиях к железу выше в этой статьи.

1-й этап. Устанавливаем ProxMox. Здесь все просто, самое главное аккуратнее с IP, т.к. теперь Ваше устройство по Вами выбранному протоколу (LAN/WiFi) будет работать на статике и именно через него виртуальные машины будут получать интернет. Не всегда это удобно, хотя потом можно будет перенастроить или даже обойти, например пробросив виртуалку напрямую порт с USB — 4G модемом.
После установки на

ПК

ноутбуке будет доступна только консоль, но в локальной сети ProxMox будет доступен через WEB-интерфейс по адресам:
https://"указанный_вами_при_установке_IP:8006
https://127.0.0.1:8006
Login: root
Password: тот_что_вы_указали_при_установке_Proxmox

В случае если нет второго ПК, то перед дальнейшей настройкой необходимо установить графический интерфейс для Linux. Для этого в консоли прописываете поочередно команды обновления репозитория:

# apt-get update
# apt-get dist-upgrade

после чего ставим выбранный GUI Linux (xfce4, gnome, kde, …) на выбор, только ставить нужно полное окружение, иначе может не завестись сеть через браузер

# apt-get install kde-full

Перед тем как перезагрузится нужно создать юзера с обычными правами в системе:

# adduser новое_имя_пользователя

либо, настроить возможность логина в графическое окружение пользователю root, чего я не рекомендую делать, но вдруг!?

После перезагрузки логинимся под тем юзером, кто нам ближе, открываем браузер, вводим в строке адреса сайта адрес WEB-интерфейса ProxMox (см. чуть выше по тексту), прописываем логин и пароль пользователя root и попадаем в меню настроек хоста гипервизора.

image

2-й этап. Настраиваем хост. Открываем консоль хоста под root’ом. Для этого в браузере выбираем слева название Вашего ProxMox сервера, данное Вами при установке, и кликнув на нем правой кнопкой мыши, выбираем меню Shell. В новом окне будем проделывать все настройки, либо можно запустить из графического окружения терминал и прописывать команды добавляя sudo:

# nano /etc/default/grub

и редактируем строку, заменив в ней значения на следующие:

GRUB_CMDLINE_LINUX_DEFAULT=«quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset»

Если у Вас Процессор от AMD, то в строке выше intel_iommu=on меняете на amd_iommu=on. В сети есть свидетельства, что некоторым помогают дополнительные параметры в конце этой строки как video=vesafb:off,efifb:off, но при этом параметре после загрузки экран ноутбука погаснет.

После этой манипуляции необходимо сохранить файл и дать команду, с последующей перезагрузкой хоста:

# update-grub

После чего прописываем следующие команды в консоли

# echo «options vfio_iommu_type1 allow_unsafe_interrupts=1» > /etc/modprobe.d/iommu_unsafe_interrupts.conf
# echo «options kvm ignore_msrs=1» > /etc/modprobe.d/kvm.conf

# echo «softdep nouveau pre: vfio-pci» » /etc/modprobe.d/nvidia.conf
# echo «softdep nvidia pre: vfio-pci» » /etc/modprobe.d/nvidia.conf
# echo «softdep nvidia* pre: vfio-pci» » /etc/modprobe.d/nvidia.conf

Здесь последние три команды отвечают за частичное решение проблем с ошибкой 43, помогает на ряде оборудования, широко известной в узких кругах. А первые две за уменьшение проблем с работой пробрасываемого железа в виртуальную машину.

Прописываем в файле конфигурации # nano /etc/modules загрузку необходимых драйверов:

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

Сохраняем файл и выходим. Затем запрещаем ProxMox’у использовать следующие драйвера видеокарт на хосте:

# echo «blacklist radeon» >> /etc/modprobe.d/blacklist.conf
# echo «blacklist nouveau» >> /etc/modprobe.d/blacklist.conf
# echo «blacklist nvidia» >> /etc/modprobe.d/blacklist.conf

Прописываем следующую команду (здесь 01:00 блок адресов дискретной ВК)

# lspci -n -s 01:00

на что получаем ответ

01:00.0 0300: 10de:2191 (rev a1)
01:00.1 0403: 10de:1aeb (rev a1)
01:00.2 0c03: 10de:1aec (rev a1)
01:00.3 0c80: 10de:1aed (rev a1)

Запоминаем эти значения, после чего открываем для редактирования файл настроек # nano /etc/modprobe.d/vfio.conf и аккуратно прописываем

options vfio-pci ids=10de:2191,10de:1aeb,10de:1aec,10de:1aed disable_vga=1

На этом настройка самого ProxMox у нас закончена, необходимо дать следующие команды

# update-initramfs -u
# reset

и перезагрузить хост. Теперь у нас все готово к тому, что бы приступить к настройке виртуальных машин.

3-й этап. Настраиваем виртуальную машину. Теперь создаем через веб интерфейс шаблон настроек и правим через консоль файл настроек виртуальной машины. Для этого в консоли необходимо ввести # nano /etc/pve/qemu-server/номер_виртуальной_машины_из_WEB-интерфейса.conf, после чего необходимо внести следующие дополнительные строки

args: -cpu ‘host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off’

bios: ovmf

cpu: host,hidden=1,flags=+pcid

machine: pc-q35-3.1

hostpci0: 01:00.0,pcie=1,x-vga=on

Пример файла настроек Виртуальной машины

args: -cpu ‘host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off’
bios: ovmf
boot: order=ide2;sata0;net0
cores: 4
cpu: host,hidden=1,flags=+pcid
efidisk0: local-lvm:vm-100-disk-0,size=4M
hostpci0: 01:00.0,pcie=1,x-vga=on
ide2: none,media=cdrom
machine: pc-q35-3.1
memory: 8196
name: Windows10
net0: virtio=BE:AB:28:39:99:70,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
sata0: local-lvm:vm-100-disk-1,size=100G
scsihw: virtio-scsi-pci
smbios1: uuid=669a38fe-c0f1-481a-aae4-f2444fc2625f
sockets: 1
usb0: host=1-3,usb3=1
vga: none
vmgenid: f2576d2f-629e-4b4e-b9eb-59735c6e3050

Здесь нужно сказать следующее: несмотря на то что в виртуальную машину можно добавить программный видео-адаптер, я бы не рекомендовал это делать, т.к. сейчас важно определить работоспособность видеовывода. Если Ваше железо приняло все текущие настройки на ура, то при старте виртуальной машины с подключенным в правильный порт монитором вы увидите картинку с логотипом ProxMox на заставке. Дальше следуют 3 пути развития событий:

  1. Идеальный — весь процесс установки ОС вы будете наблюдать на внешнем мониторе. Тогда тормозим систему, пробрасываем USB мышь и временно USB клавиатуру. После чего вновь стартуем виртуальную машину и проводим установку до конца.
  2. Дальше логотипа ProxMox ситуация не сдвинется с места, не смотря на то, что если все-таки подключить софтовую видеокарту и подключится к виртуальной машине через видео-консоль, то процессом установки ОС можно будет управлять дальше. Здесь нужно остановиться и воспользоваться поиском, связанным с дополнительными параметрами в настройках файла grub или самого ProxMox. Т.к. если видеосигнал пошел. то и проброс возможен. Здесь нужно понять и определится в чем именно ошибка или нехватка каких-либо параметров.
  3. Черный дисплей и отсутствие видеосигнала на внешнем мониторе. Скорее всего вы потерпели фиаско и, если проблема не в отсутствии контакта, забытом переключателе питания или канале видео вывода на мониторе, то — увы!

Я рекомендую начать установку в виртуальную машину Линукс. Потому что у линуксовых драйверов меньше проблем с ошибкой 43, для чего рекомендую живой образ Garuda Linux, основанный на Arch Linux, если у Вас Live DVD стартовал с включенным видеодрайвером — поздравляю. В Windows Успех гарантирован на 99%. В самой Windows могут быть проблемы, а именно нам потребуется последний видеодрайвер под Вашу видеокарту. Почему-то стандартный видеодрайвер от производителя ноутбука у меня в виртуальной машине не завелся, выдав широко известную ошибку в узких кругах под номером 43. Прежде чем нам удастся скачать их необходимо виртуальной машине с Windows подсунуть диск с драйверами VirtIO и произвести установку. После того как Вы с качаете свежий драйвер пак необходимо будет распаковать драйвера и вручную подсунуть драйвер видеокарты. При этом будьте внимательны, а именно: моя ВК на нативном железе в Windows определяется как GTX1660ti, но на нее драйвер мобильной видеокарты без ошибок не встает, встает только GTX1660ti max-q, т.к. теплопакет у меня 80Вт на ВК.

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

Всем Добра! Берегите себя и Ваши гаджеты! =)

Бывает такой момент, что без Windows никак не обойтись, и даже wine не помогает, и тут к нам на помощь приходят виртуальный машины. Под Linux их хватает, VirtualBox, VMWare, XEN(гипервизор, но все же), qemu с kvm. Иногда нам необходима полноценная 3D графика, на виртуалке, и тут нам поможет проброс(passthrough) видеокарты в виртуалку.

В интернете полно статей, что да как делать, но интернет у нас большой и от еще одной статейки он не лопнет.
Для начала нам необходимо, что бы в компьютере было 2 видеокарты, например встроенная и дискретная. У меня основная видеокарта Geforce GXT 550ti, а прокидывал я GTX 650ti и Ati HD4850 и все успешно работало.
Существует 2 вида проброса, использовать OVMF, данный проект позволяет использовать UEFI в виртуалке, но и видеокарта должна быть не простая, а аж с двумя биосами, это можно выяснить следующим образом [ http://vfio.blogspot.ru/2014/08/does-my-graphics-card-rom-support-efi.html ].
Скачиваем, компилируем

git clone https://github.com/awilliam/rom-parser
cd rom-parser
make

Получаем BIOS видекарты

cd /sys/bus/pci/devices/0000:01:00.0/
echo 1 > rom
cat rom > image.rom
echo 0 > rom

0000:01:00.0 — надо изменить на код вашего девайса.

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

Valid ROM signature found @0h, PCIR offset 190h
 PCIR: type 0, vendor: 10de, device: 1280, class: 030000
 PCIR: revision 0, vendor revision: 1
Valid ROM signature found @f400h, PCIR offset 1ch
 PCIR: type 3, vendor: 10de, device: 1280, class: 030000
 PCIR: revision 3, vendor revision: 0
  EFI: Signature Valid
 Last image

Ваш конфиг виртуалки будет немножко отличаться.

Я поэкспериментировал с ядрами, ни к чему интересному и хорошему это не привело, писали [https://bbs.archlinux.org/viewtopic.php?id=203240] что в ядре 4.2.2-1 поломали проброс, но как оказалось все прекрасно работает.
Но если же у вас все же есть желание, то устанавливайте из AUR’a:
1. [ https://aur.archlinux.org/packages/linux-vfio/ ] — на данный момент типа багнутое ядро, где сломан проброс, но используются полезные патчи для видюх интел и еще что-то там
2. [ https://aur.archlinux.org/packages/linux-vfio-lts/ ] — рабочее ядро, с теми же патчами, что и выше.
Как пользоваться makepkg, разберетесь сами.

1. Устанавливаем необходимый софт pacman -S qemu libvirt synergy
2. Нужно подкорректировать загрузку ядра, что бы не подцеплялась, наша видеокарта которую мы будем прокидывать. Нужно узнать id вендора и кода нашей видеокарты. Для этого выводим lspci

02:00.0 VGA compatible controller: NVIDIA Corporation GK106 [GeForce GTX 650 Ti] (rev a1)
02:00.1 Audio device: NVIDIA Corporation GK106 HDMI Audio Controller (rev a1)

Находим там код видеокарты, запоминаем его, и вводим уже lspci -n

02:00.0 0300: 10de:11c6 (rev a1)
02:00.1 0403: 10de:0e0b (rev a1)

Теперь правим параметры загрузки grub, для этого открываем /etc/default/grub
и добавляем параметр в GRUB_CMDLINE_LINUX_DEFAULT vfio-pci.ids=10de:11c6,10de:0e0b
У меня следующего вида

GRUB_CMDLINE_LINUX_DEFAULT="noresume iommu=noaperture vfio-pci.ids=10de:11c6,10de:0e0b"

Применяем параметры grub-mkconfig -o /boot/grub/grub.cfg, после перезагрузки, должно быть нечто подобное dmesg | grep vfio_pci:

[    0.881226] vfio_pci: add [10de:11c6[ffff:ffff]] class 0x000000/00000000
[    0.881257] vfio-pci 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none
[    0.893270] vfio_pci: add [10de:0e0b[ffff:ffff]] class 0x000000/00000000
[    2.496137] vfio-pci 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=none

Подкорректируем /etc/mkinitcpio.conf:

...
MODULES="vfio vfio_iommu_type1 vfio_pci vfio_virqfd"
...

Применим mkinitcpio -p linux(linux изменить на имя вашего ядра)

3. Настраиваем и создаем виртуалку.
Подправим конфиг qemu
/etc/libvirt/qemu.conf:

...
user = "root"
group = "root"
clear_emulator_capabilities = 0
...
cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc","/dev/hpet", "/dev/vfio/vfio",
    "/dev/vfio/1"
]
...

В принципе действия для того что бы использовать ovmf те же, так вот если вам повезло и у вас видеокарта поддерживает EFI, то следующий конфиг для вас:
pacman -S ovmf

qemu-system-x86_64 -enable-kvm -m 1024 -cpu host,kvm=off  
-smp 4,sockets=1,cores=4,threads=1 
-device virtio-scsi-pci,id=scsi 
-drive file=/Win/windows.img,id=disk,format=raw,if=none -device scsi-hd,drive=disk 
-drive file=/Win/virtio-win.iso.1,id=virtiocd,if=none -device ide-cd,bus=ide.1,drive=virtiocd 
-drive file=/Win/ru_windows_7_3in1_x64_by_AG_09.2015.iso,id=isocd,if=none -device scsi-cd,drive=isocd 
-drive if=pflash,format=raw,readonly,file=/usr/share/ovmf/ovmf_x64.bin 
-vga std 
#-device vfio-pci,host=02:00.0,x-vga=on -device vfio-pci,host=02:00.1 

Если же нет, используем Seabios

qemu-system-x86_64 -enable-kvm -m 1024 -cpu host,kvm=off 
-smp 4,sockets=1,cores=4,threads=1 
-device virtio-scsi-pci,id=scsi 
-drive file=/Win/windows.img,id=disk,format=raw,if=none -device scsi-hd,drive=disk 
-drive file=/Win/virtio-win.iso.1,id=virtiocd,if=none -device ide-cd,bus=ide.1,drive=virtiocd 
-drive file=/Win/windows.iso,id=isocd,if=none -device scsi-cd,drive=isocd 
-vga std 
#-device vfio-pci,host=02:00.0,x-vga=on -device vfio-pci,host=02:00.1 

windows.img — образ жесткого диска, создается командой dd if=/dev/zero of=windows.img bs=1M seek=60000 count=0seek=60000 размер диска в мегабайтах.
virtio-win.iso — образ с драйверами, берется последующей ссылки [ https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso ]
windows.iso — образ диска с Windows, сами разберетесь где его брать, если используете ovmf убедитесь, что образ поддерживает загрузку UEFI. и при загрузке системы скорее всего надо будет ввести команду следующего вида: PS0:/EFI/BOOT/bootx64.efi
Данные конфиги для начальной установки Windows и все должно пройти на отлично.

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

-device vfio-pci,host=02:00.0,x-vga=on -device vfio-pci,host=02:00.1 

и запустим виртуалку.

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

Нужно не забыть установить synergy, без этой программы управление(мышкой и клавиатурой) виртуалкой будет невозможно.
Найдете ее на торрентах или прочих сайтах, там в настройках надо указать client: 10.0.2.2(дефолтный ip хоста) и имя экрана, допустим Windows. Теперь настроим synergy на хосте(компьютер с Linux), создадим конфиг следующего содержания:
synergy.conf

# Example config
section: screens
    Windows:
	halfDuplexCapsLock = false
	halfDuplexNumLock = false
	halfDuplexScrollLock = false
	xtestIsXineramaUnaware = false
	switchCorners = none 
	switchCornerSize = 0
    Linux:
	halfDuplexCapsLock = false
	halfDuplexNumLock = false
	halfDuplexScrollLock = false
	xtestIsXineramaUnaware = false
	switchCorners = none 
	switchCornerSize = 0
end

section: aliases
    Windows:
	10.0.2.15 # default for vm
    Linux:
	10.0.2.2  # default for host
end

section: links
    Windows:
	right = Linux
    Linux:
	left = Windows
end

section: options
    relativeMouseMoves = true
    screenSaverSync = true
    win32KeepForeground = false
    switchCorners = none 
    switchCornerSize = 0
    keystroke(f12) = lockCursorToScreen(toggle)
end

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

4. Прокидываем звук, если вы используете pulseaudio просто укажите перед запуском quemu QEMU_AUDIO_DRV=pa если же ALSA, то предлагаю вам использовать утилиту apulse, она есть в AUR [ https://aur.archlinux.org/packages/apulse/ ] и запуск виртуалки будет следующим QEMU_AUDIO_DRV=pa apulse qemu-system-x86_64.....5. У меня 2 монитора, и при запуске виртуалки на главный монитор(центральный) через vga идет картинка с Windows. а правый становится главным Linux’овым монитором.
К основной видеокарте правый монитор подключен через DVI, центральный монитор подключен к «виртуальной» видюхе через VGA, а к основной через HDMI.
Команда xrandr --output DVI-I-1 --auto && xrandr --output HDMI-0 --offВаши подключенные мониторы и возможные режимы работы можно посмотреть командой xrandr

Выклаываю полный скрипт запуска виртуалки

xrandr --output DVI-I-1 --auto && xrandr --output HDMI-0 --off 
synergys --config synergy.conf -d INFO > synergy.log
apulse qemu-system-x86_64 -enable-kvm -m 3048 -cpu host,kvm=off  
-smp 6,cores=6,threads=1,sockets=1 
-device virtio-scsi-pci,id=scsi 
-drive file=/Win/windows.img,id=disk,format=raw,if=none -device scsi-hd,drive=disk 
-drive file=/Win/virtio-win.iso.1,id=virtiocd,if=none -device ide-cd,bus=ide.1,drive=virtiocd 
-rtc base=localtime 
-soundhw hda 
-vga none 
-device vfio-pci,host=02:00.0,multifunction=on,x-vga=on
xrandr --output HDMI-0 --auto && xrandr --output DVI-I-1 --off
-soundhw hda 
-audiodev pa,id=pa,server=/run/user/1000/pulse/native
kill -9 `pgrep synergys`

Так же рекомендую отключить запрос на восстановление системы при загрузке после сбоев

bcdedit /set {current} bootstatuspolicy ignoreallfailures
bcdedit /set {current} recoveryenabled no

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

UPD 11.10.2016
Сегодня вновь столкнулся с пробросом видеокарты, но теперь мне нужен был еще и звук по hdmi, немного погуглив нашел решение http://vfio.blogspot.ru/2014/09/vfio-interrupts-and-how-to-coax-windows.html?m=1
Что бы нормально работал звук через HDMI проброшенный видюхи нужно включить Message Signaled Interrupts(MSI).
Для этого в реестре Windows необходимо внести правки, а именно в разделе HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnum найти вашу видеокарту, там будет два устройства видео и звук, далее в Device ParametersInterrupt Management создать(если его нет) раздел MessageSignaledInterruptProperties и в нем DWORD параметр MSISupported со значением 1, он включит MSI. После перезагрузки звук должен прекрасно заработать.

UPD 01.06.2019
Обновил компьютер до Ryzen и столкнулся с проблемой

vfio_bar_restore: 0000:0a:00.1 reset recovery - restoring bars
vfio-pci 0000:0a:00.0: enabling device (0000 -> 0003)
qemu-system-x86_64: vfio: Unable to power on device, stuck in D3

Подробности здесь AMD Ryzen и проблемы с пробросом видеокарты в QEMU KVM

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

-audiodev pa,id=pa,server=/run/user/1000/pulse/native

1000 — id вашего юзера, все переменные QEMU_AUDIO можно убрать.

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

pulseaudio: Wrong context state
pulseaudio: Reason: Access denied
pulseaudio: Failed to initialize PA contextaudio: Could not init `pa' audio driver
audio: warning: Using timer based audio emulation

Можно скопировать пользовательские cookie в root

cp ~/.config/pulse/cookie /root/.config/pulse/cookie

На 15.09 проблема с Ryzen еще присутствует, приходится патчить ядро…

  • Печать

Страницы: [1]   Вниз

Тема: Virtual Box + Windows 7 + реальная видеокарта  (Прочитано 25279 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн
Acid Buddha

Возможно ли средствами VirtualBox заставить гостевую виртуальную Windows 7 видеть реальную видеокарту и использовать её ресурсы, в том числе инсталлировав драйвер для этой видеокарты в windows 7? Видел только пост на хабре, как добиться этого результата с помощью другого эмулятора, но к сожалению не существует его версии для линукс.


Оффлайн
soarin

Можно, если есть две видеокарты на компьютере ну и ещё целый ряд условий.
В справке написано.


Оффлайн
Acid Buddha

Не нашёл, дайте ссылку пожалуйста!


Оффлайн
Pilot6

Acid Buddha,
Нельзя. В Win7 в таком случае ставится virtualbox драйвер в виде дополнений гостевой ОС.

Я в личке не консультирую. Вопросы задавайте на форуме.


Оффлайн
soarin

« Последнее редактирование: 05 Ноября 2014, 05:15:47 от soarin »


Оффлайн
Acid Buddha


Оффлайн
ARTGALGANO


  • Печать

Страницы: [1]   Вверх

  • Проверка виндовс на ошибки windows 10
  • Проброс usb по сети windows
  • Проверка винчестера на битые сектора windows 10
  • Проверка windows server 2016 на ошибки
  • Пробный период windows 10 pro