Конфигурация не поддерживается хост не поддерживает проброс устройств pci
Механизм проброса видеокарты на английском называется 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 и чипсета (если есть).
Для самого проброса потребуется произвести следующие действия:
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 заменить
После чего выполнить в терминале
Возможно, что также будет нужно отключить использование системой пробрасываемой видеокарты, но у некоторых работает и без этого.
Мне хотелось бы окончательно избавится от Windows раздела на моем жестком диске и работать с некотрыми Windows программами без костылей (иногда и поиграть) и без необходимости выхода из основной системы. Другими словами иметь виртуалку в которой полноценно работает аппаратное ускорение графики, RAID, USB, а также pci устройства которые не поддерживаются virtualbox.
Исходные данные
Процесс
1 Включаем поддержку IOMMU в ядре. Для этого в файле /etc/default/grub меняю строку
Intel-IOMMU: enabled
DMAR: DRHD base: 0x000000fed90000 flags: 0x0
IOMMU 0: reg_base_addr fed90000 ver 1:0 cap c9008020e30272 ecap 1000
vboxpci: IOMMU found
Если таких или похожих строк нет, то возможно у вас в биосе отключена Vt-d, либо процессор или материнская плата не поддерживает IOMMU.
4 Проверим, есть ли устройства которые можно пробросить. Если нет строк с FLReset+ тогда вряд ли получится. У меня так:
$ sudo lspci -vv | grep -i flreset+
ExtTag- RBE- FLReset+
5 Если функция есть, то ищем устройства которые можно пробросить. В моей системе нашлость только одно такое PCI устройство 00:1b.0 (встроенный в материнку звуковой чип Intel). Я делал с помощью команды:
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06) Subsystem: Micro-Star International Co., Ltd. Device 7636
Kernel driver in use:snd-hda-intel
Kernel modules: snd-hda-intel
7 Запрещаем его загрузку, добавив в /etc/modprobe.d/blacklist.conf строку
8 Перегружаем компьютер и пробрасываем устройство в гостевую:
$lspci -s
01:05 01:05.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06)
Звуковая карта определилась гостевой ОС и что самое главное заработала, т.е. звук гостевой системы выводится на физическое устройство хоста. В ходе моих экспериментов многие устройства успешно пробрасывались (без FLReset+) и виделись ядром гостя, но работать отказывались. Были случаи, что система хоста зависала, так что будьте осторожны (на этапе 9), если будете повторять. К сожалению GPU и USB пока пробросить не удалось, что является моей конечной целью.
Обновления заметки:
Удалось успешно прокинуть USB хоста, причем я пропускал шаги 6 и 7 .
$lspci | grep USB
00:1a.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
00:1d.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)
Флешка видится и нормально работает. Видеокамера работает показывает несколько секунд, а потом изображение пропадает (mplayer tv:// выдает v4l2: select timeout).
Финальный результат будет работать под Xubuntu 20.04 как хостовой системой, а гостевой системой будет Windows 10 2004, которая будет использоваться в основном под игры.
Об этой статье
Это руководство предназначено для Ubuntu 20.04 и основано на моих предыдущих руководствах для хост-систем Ubuntu 18.04 и 16.04.
Однако это руководство должно быть применимо и к Pop!_OS 19.04 и новее. Если вы хотите использовать Pop!_OS как хост-систему вы можете это делать, просто обращайте внимание на пометки специально для Pop!_OS .
Критические изменения для старых настроек проброса для Ubuntu 20.04
Версия ядра
Начиная с версии ядра 5.4, драйвер “vfio-pci” больше не является модулем ядра, он встроен в ядро. Нужно найти другой способ вместо использования конфигурационных файлов initramfs-tools/modules, как я рекомендовал, например, в руководстве для 18.04.
Версия QEMU
Ubuntu 20.04 поставляется с QEMU версии 4.2, где есть некоторые исправления в аудио части. Так что будьте внимательней, когда будете переносить конфигурацию машины со старой системы.
Если же хочется использовать новейшую версию QEMU, то инструкция лежит тут.
Загрузчик
“Проблемой” для Ubuntu 20.04 загрузчик не является, но, по крайней мере, есть некоторые нюансы для одного популярного дистрибутива, который основан на Ubuntu – Pop!_OS 20.04
Я думаю, что начиная с версии 19.04, Pop!_OS использует systemd в качестве менеджера загрузки, а не grub. Это означает, что запуск команд ядра работает по-разному в Pop!_OS
Введение в понятия VFIO, PCI passthrough и IOMMU
Виртуальная функция ввода-вывода (или VFIO) обеспечивает виртуальной машине (ВМ) прямой доступ к аппаратному ресурсу PCI, такому как графический процессор (GPU). Виртуальные машины с настроенным пробросом GPU могут получить близкую к реальному железу производительность, что делает возможным запуск игр на виртуальной машине Windows.
Позвольте сделать следующие упрощения, чтобы утверждение в начале статьи о её дружелюбности к новичкам в Linux не было ложным:
Устройства PCI организованы в так называемые группы IOMMU. Чтобы пробросить устройство в виртуальную машину, мы должны передать все устройства одной и той же группы IOMMU. В идеальном мире каждое устройство имеет свою собственную группу IOMMU. К сожалению, мы живём не в идеальном мире.
Проброшенные устройства изолированы и, таким образом, больше не доступны для хост-системы. Кроме того, одновременно можно изолировать только все устройства одной группы IOMMU.
Это означает, что даже если какое-либо устройство не используется в виртуальной машине, оно всё равно не доступно для хоста, даже если если оно состоит в одной группе IOMMU переданного устройства.
Системные требования
Железо
Чтобы успешно следовать этому руководству, необходимо, чтобы используемое оборудование поддерживало виртуализацию и правильно разделяло группы IOMMU.
- AMD Ryzen7 1800x (CPU)
- Asus Prime-x370 pro (Материнская плата)
- 2x 16 GB DDR4-3200 running at 2400MHz (RAM)
- Nvidia GeForce 1050 GTX (GPU хоста; PCIE слот 1)
- Nvidia GeForce 1060 GTX (GPU для гостя; PCIE слот 2)
- 500 GB NVME SSD (Гостевая ОС; слот M.2)
- 500 GB SSD (Хостовая ОС; SATA)
- 750W БП
При сборе комплектующих системы я стремился избежать необходимости патчинга ядра. Так что, патч переопределения ACS не требуется для указанной комбинации материнской платы и процессора
Если ваша материнская плата не имеет надлежащего разделения IOMMU, вы можете попытаться решить эту проблему с помощью исправленного ядра или пропатчить ядро самостоятельно.
Настройки BIOS
Включите следующие опции в вашем BIOS:
- Advanced \ CPU config - SVM Module -> enable
- Advanced \ AMD CBS - IOMMU -> enable
Я использую версию 4207 (от 2018.12.07)
Настройки операционной системы хоста
Имеется установленная Xubuntu 20.04 x64 в режиме UEFI, взятая отсюда.
Ubuntu 20.04 LTS поставляется с ядром версии 5.4, которое хорошо работает с VFIO. Проверить можно через uname -r
Внимание
Любое ядро, начиная с версии 4.15, работает для проброса для процессоров Ryzen.
За исключением версий ядра 5.1, 5.2 и 5.3, включая все их подверсии.
Прежде чем продолжить убедитесь что ваше ядро хорошо работает в среде VFIO
Установка необходимого ПО
Установите QEMU, Libvirt, менеджер виртуализации и связанное с ним программное обеспечение:
Настройка проброса PCI
Следующие устройства будут проброшены в виртуальную машину:
- 1x GPU: Nvidia GeForce 1060 GTX
- 1x USB host controller
- 1x SSD: 500 GB NVME M.2
Включение функционала IOMMU
Включите функцию IOMMU через конфигурацию grub. В системе с процессором AMD Ryzen запустите следующую команду:
Отредактируйте строку, которая начинается с GRUB_CMDLINE_LINUX_DEFAULT, чтобы она соответствовала этой строке:
В случае если у вас Intel строка должна быть такой:
Как только вы закончите редактирование, сохраните изменения и выйдите из редактора (CTRL+S, CTRL+X).
→ Перезагрузите систему, когда команда будет завершена.
Проверьте, включен ли IOMMU, запустив после перезагрузки следующую команду:
Вывод будет примерно такой:
Настройки для загрузчика в Pop!_OS
Можно использовать модуль kernelstub загрузчика systemd. Используйте его вот так:
Выбор пробрасываемого GPU в гостевую систему
Внимание
После выполнения следующих шагов GPU для гостевой системы будет не виден в хостовой ОС. То есть у вас должен быть второй графический процессор для хостовой ОС.
Здесь мы идентифицируем и изолируем устройства, прежде чем передавать их виртуальной машине. Мы ищем видеокарту и USB-контроллер в подходящих группах IOMMU. Это означает, что либо оба устройства имеют свою собственную группу, либо они совместно используют одну группу.
Сам план состоит в том, чтобы применить драйвер vfio-pci к пробрасываемой видеокарте, прежде чем обычный драйвер видеокарты сможет взять её под контроль.
Можно использовать скрипт bash типа такого для определения устройств и их группировки:
Синтаксис результирующего вывода выглядит следующим образом:
Рис. 1: Описание вывода скрипта IOMMU
Интересующие нас части шины PCI выделены красным на рис.1, а оранжевым выделены идентификаторы устройств.
Вот эти устройства нас интересуют:
Рис. 2: группы IOMMU для проброса устройств в виртуальную машину на ASUS Prime x370-pro
Мы изолируем GTX 1060 (PCI-bus 0c:00.0 и 0c:00.1 ; device id 10de:1b83 , 10de:10f0 )
USB контроллер (Шина PCI 0d:00.3 ; device id 1022:145c ) используется позже
Накопитель NVME может быть проброшен без идентификационных номеров. Однако крайне важно, чтобы у него была своя группа.
Изоляция гостевого GPU
Чтобы изолировать графический процессор, у нас есть два варианта. Выберите устройства по адресу шины PCI (PCI bus address) или по идентификатору устройства (device ID). Оба варианта имеют свои плюсы и минусы.
Применение драйвера VFIO-pci по идентификатору устройства (через загрузчик)
Этот параметр следует использовать только в том случае, если видеокарты в системе различаются по названию.
Обновим grub еще раз и добавьте идентификаторы устройств PCI с параметром vfio-pci.ids
Запустите sudo nano /etc/default/grub и обновите строку GRUB_CMDLINE_LINUX_DEFAULT:
Примечание
Команда “ kvm. ignore_msrs” необходима только для Windows 10 версии выше 1803 (в противном случае получите синий экран).
Сохраните и закройте файл. После этого выполните:
Внимание!
После перезагрузки пробрасываемая видеокарта будет проигнорирована хостовой ОС. Так что вы должны использовать другой графический процессор для хостовой ОС!
Для загрузчика systemd, такой как Pop!_OS 19.04 и новее, вы можете использовать:
Применение драйвера VFIO-pci по идентификатору шины PCI (через скрипт)
Этот метод работает, даже если вы хотите изолировать одну из двух идентичных карт. Однако обратите внимание, что в случае добавления или удаления PCI-оборудования из системы идентификаторы шин PCI будут меняться (также такое будет иногда случаться после обновления BIOS).
Создайте еще один файл с помощью sudo nano /etc/initramfs-tools/scripts/init-top/vfio.sh и добавьте следующие строки:
Спасибо /u/nazar-pc на reddit. Убедитесь, что строка
имеет правильные идентификаторы шины PCI для графического процессора, который вы хотите пробросить. Теперь сохраните и закройте файл.
Сделайте скрипт исполняемым:
Создайте еще один файл с помощью sudo nano /etc/initramfs-tools/modules
И добавьте следующие строки:
Сохраните и закройте файл.
Когда все будет сделано, выполните:
Внимание!
После перезагрузки пробрасываемая видеокарта будет проигнорирована хостовой ОС. Так что вы должны использовать другой графический процессор для хостовой ОС!
Проверка проброса
Для проверки правильного проброса устройства выполните следующие действия:
Поздравляю, самая трудная часть сделана! 🙂
Создание виртуальной машины Windows
Виртуализация осуществляется с помощью эмулятора машины с открытым исходным кодом и виртуализатора под названием QEMU. Можно либо запустить QEMU напрямую, либо использовать графический интерфейс virt-manager для создания машины и её запуска.
Я предпочитаю графический интерфейс. К сожалению, не все настройки поддерживаются в virt-manager. Таким образом, я определяю основные настройки в пользовательском интерфейсе, делаю быстрый запуск виртуальной машины и “принудительно останавливаю” ее сразу после того, как вижу, что графический процессор передан правильно. После этого можно отредактировать недостающие опции в конфигурацию виртуальной машины с помощью virsh edit
Убедитесь, что ваш ISO-файл Windows, а также драйверы virtio для Windows загружены и готовы к установке.
Предварительная настройка
Как я уже говорил, множество разных вариантов настроек может усложнить это руководство. Прежде чем мы сможем продолжить, нужно принять решение о типе хранилища виртуальной машины
Создание образа диска (если нужно)
В этой статье я пробрасываю свой SSD NVME M. 2 виртуальной машине. Еще одним годным решением является использование образа диска в raw-формате, дополнительную информацию смотрите в разделе хранилище данных.
Создание моста Ethernet
Можете посмотреть статью настройки сети здесь.
Создание новой виртуальной машины
Как уже было сказано ранее мы используем графический интерфейс virtual machine manager для создания виртуальной машины с базовыми настройками
Для этого запустите диспетчер и нажмите кнопку “Создать новую виртуальную машину”
Шаг 1
Выберите “Local install media” и продолжайте дальше (см. рис. 3)
Шаг 2
Теперь нам нужно выбрать ISO-файл Windows, который мы хотим использовать для установки (см. рис. 3). Также проверьте автоматическое обнаружение системы. Подсказка: используйте кнопку “browse local” (одна из кнопок на правой стороне), чтобы перейти к местоположению ISO.
Шаг 3
Введите объем оперативной памяти и процессорных ядер, которые вы хотите передать, и продолжите работу с мастером. Я хочу использовать 8 ядер (максимум 16, скриншот показывает 12 по ошибке!) и 16384 Мб оперативной памяти в моей виртуальной машине.
Шаг 4
Если вы используете файл образа, выберите ранее созданный файл и продолжите работу. Я снимаю флажок “Enable storage for this virtual machine” и добавляю свое устройство позже.
Шаг 5
На последних шагах требуется чуть больше кликов
Введите осмысленное имя для виртуальной машины. Оно будет использоваться в имени конфигурационного файла xml. Думаю, что не стоит использовать имя с пробелами в названии. Это конечно не вызовет особых проблем, но я всё же был достаточно осторожен, чтобы так не делать ранее.
Кроме того, убедитесь, что вы установили флажок “Customize configuration before install”.
Замечание! Количество процессоров на рисунке 7 неверно. Он должен быть 8, если вы выполняли инструкции выше.
Первая настройка
После нажатия кнопки “Готово” откроется окно конфигурации виртуальной машины. В левом столбце отображаются все аппаратные устройства, используемые этой виртуальной машиной. Щелкнув по ним левой кнопкой мыши, вы увидите параметры устройства с правой стороны. Вы можете удалить аппаратное обеспечение с помощью щелчка правой кнопкой мыши. Вы можете добавить больше оборудования с помощью кнопки ниже. Обязательно нажимайте кнопку Применить после каждого изменения.
Следующие скриншоты могут немного отличаться от вашего графического интерфейса (так как я добавил и удалил некоторые аппаратные устройства).
Общее
Процессоры
В секции “Model:” нажмите в раскрывающемся списке, как если бы это было текстовое поле, и введите
Это передаст всю информацию о процессоре гостевой машине. Для получения дополнительной информации вы можете прочитать главу информация о модели процессора в руководстве по производительности
Для параметра “Topology” установите флажок “Manually set CPU topology” со следующими значениями:
- Sockets: 1
- Cores: 4
- Threads: 2
Диск 1, гостевой жесткий диск
В зависимости от этапа предварительной настройки хранилища вы должны выбрать подходящий тип хранения для вашего диска (raw формат или проброшенное реальное оборудование). Дополнительные параметры см. в статье Хранение.
Настройка, если выбран raw файл
Когда вы впервые войдете в этот раздел, там будет написано “IDE Disk 1”. Мы должны изменить значение “дисковая шина:” на VirtIO.
Настройка, если выбран проброс диска
Узнайте правильный идентификатор устройства диска через lsblk, чтобы получить имя диска.
При первом редактировании конфигурации виртуальной машины добавьте следующий блок в раздел <devices> (одна строка после </emulator> должна быть подходящей).
Чтобы соответствовать вашему имени диска
VirtIO Драйвер
Далее мы должны добавить драйвер virtIO ISO, чтобы он использовался во время установки Windows. В противном случае установщик не сможет распознать объем хранилища, который мы только что изменили с IDE на virtIO.
Для того чтобы добавить драйвер нажмите кнопку “Добавить оборудование”, выберите пункт “Хранилище”, выберите загруженный файл образа.
В поле “Тип устройства:” выберите устройство CD-ROM. Для параметра “тип шины:” выберите IDE, иначе windows также не найдет компакт-диск (см. рис. 11).
Проброс видеокарты
- 0000:0c:00.0 для GeForce GTX 1060
- 0000:0c:00.1 для GeForce GTX 1060 Audio
- 0000:0d:00.3 для USB контроллера
Примечание: В случае, если вы позже добавите дополнительное оборудование (например, другое устройство PCI-E), эти идентификаторы могут быть изменены. Так что имейте в виду, что если вы измените оборудование, просто повторите этот шаг с обновленными идентификаторами.
Так и должно быть. Подключите вторую мышь и клавиатуру к USB-портам проброшенного контроллера (см. рис. 2).
Если ничего не происходит, убедитесь, что у вас есть оба устройства CD-ROM (по одному для ISO образа Windows 10 и драйвера virtIO) в вашем списке. Также проверьте запись “параметры загрузки”.
Как только вы увидите установку Windows, используйте “force off” из virt-manager, чтобы принудительно остановить виртуальную машину.
Окончательная конфигурация и дополнительные шаги
Для редактирования конфигурации виртуальных машин используйте в консоли: virsh edit your-windows-vm-name
После завершения редактирования вы можете использовать CTRL+S CTRL+X, чтобы сохранить изменения и выйти из редактора.
Я добавил следующие изменения в свою конфигурацию:
Оптимизация процессора AMD Ryzen
(будет дописано позже)
Hugepages для лучшей производительности оперативной памяти
Этот шаг является необязательным и требует предварительной настройки: Подробнее см. Hugepages.
найдите строку, которая заканчивается на </currentMemory>, и добавьте за ней следующий блок:
Примечание: убедитесь, что <memoryBacking> и <currentMemory> имеют одинаковый отступ.
Года два назад я решил перейти полностью на линукс, но необходимость в венде не упала, поэтому всегда держал у себя 2 операционные системы. Около месяца назад попробовал поставить VirtualBox и на нее установить Windows, в общем то работать с 2мя операционными системами мне понравилось, но была одна проблема, я программирую исключительно компьютерную графику и мне нужна была поддержка OpenGL 3.3 и выше, к сожалению VirtualBox не предоставлял мне такой возможности. Погуглив наткнулся на такую штуку как Xen, долго пытался что-то сделать на ней, в итоге ничего не вышло, скорее всего из-за основной видеокарты — nVidia GeForce 580 GTX, гипервизор попросту не хотел запускать даже убунту, не говоря уже об виндовсе. Начал искать другие гипервизоры, и наткнулся на KVM, с ним пришлось повозиться, но в конце концов все заработало.
Конфигурация
- Процессор с поддержкой виртуализации (в Intel — это VT-d, в AMD — AMD-Vi). Важно: чипсет тоже дожен поддерживать эту технологию
- Материнская плата с блоком управления памятью ввода/вывода(IOMMU)
- Две видеокарты, для гостевой ОС желательно использовать AMD видеокарту, т.к. с ней проблем не должно быть. Видеокарты NVidia не работают.
- Процессор AMD Phenom II x4
- Материнская плата ASUS M5A99X EVO R2.0
- Видеокарта для Ubuntu: NVidia GeForce 580 GTX
- Видеокарта для гостевой ОС: AMD Radeon HD 5800
Подготовка
Для начала следует перезагрузиться в биос и включить IOMMU. Чтобы проверить работает ли IOMMU для AMD:
dmesg | grep -iE "(IOMMU|AMD-Vi)"
dmesg | grep -iE "(IOMMU|VT-d)"
Теперь нужно включить iommu в grub. Открываем /etc/default/grub, ищем GRUB_CMDLINE_LINUX, приводим к виду:
GRUB_CMDLINE_LINUX="max_loop=64 iommu=pt iommu=1 amd_iommu=fullflush"
Таким образом мы увеличиваем количество LOOP устройств, включаем поддержку IOMMU для AMD. Если у вас при загрузке операционной системы все стало сплющенным (обычно это из-за 2х видеокарт), то к предыдущей строке добавьте nomodeset, получим:
GRUB_CMDLINE_LINUX="nomodeset max_loop=64 iommu=pt iommu=1 amd_iommu=fullflush"
Так же, для уменьшения глюков, можно запретить скачивание драйверов от AMD (если у вас обе видеокарты от AMD, то не стоит этого делать) добавив их в blacklist. Открываем /etc/modprobe.d/blacklist.conf и добавляем следующее:
blacklist fglrx
blacklist radeon
Теперь нужно подготовить видеокарту для проброса, отключив ее от драйвера на хосте и подключив к pci-stub. Для выбора нашей карты вводим lspci и ищем нашу карту:
02:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Cypress PRO [Radeon HD 5850]
02:00.1 Audio device: Advanced Micro Devices [AMD] nee ATI Cypress HDMI Audio [Radeon HD 5800 Series]
в моем случае это 02:00.0 и 02:00.1. 02:00.1 — это звуковой чип. Видеокарта видна как видео и аудио, поэтому их стоит переносить вместе.
Затем, нам нужны vendor id и device id. посмотреть можно запустив lspci с ключем -n
02:00.0 0300: 1002:6899
02:00.1 0403: 1002:aa50
теперь подключим наши устройства к pci-stub. Видеокарта:
echo "1002 6899" > /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:02:00.0" > /sys/bus/pci/devices/0000\:02\:00.0/driver/unbind
echo "0000:02:00.0" > /sys/bus/pci/drivers/pci-stub/bind
обратите внимание, в между VendorID и DeviceID не ставится двоеточие.
Звуковая карта:
echo "1002 aa50" > /sys/bus/pci/drivers/pci-stub/new_id
echo "0000:02:00.1" > /sys/bus/pci/devices/0000\:02\:00.1/driver/unbind
echo "0000:02:00.1" > /sys/bus/pci/drivers/pci-stub/bind
для удобства, можно написать скрипт и добавить его в автозапуск.
Установка
Для начала вам нужно установить несколько пакетов:
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
это установка на сервер без гуи, для удобной работы с kvm установим также virt-manager:
sudo apt-get install virt-manager
После этого в меню должен появится пункт «Менеджер виртуальных машин» (Virtual Machine Manager)
Далее передадим модулю kvm опцию allow_unsafe_assigned_interrupts=1. Создаем файл в /etc/modprobe.d/kvm.conf с содержанием и перезагружаем моудль.
options kvm allow_unsafe_assigned_interrupts=1
Далее запускаем virt-manager, появится окно:
Нажимаем правой кнопкой по localhost и выбираем New либо жмем на мониторчик слева в панели. Далее по инструкции создаем виртуальную машину. После установки системы можно пробрасывать нужные нам устройства. Войдите в меню View->Details. Должно появиться такое окно:
Жмем на кнопку Add hardware, выбираем PCI Host Device, и ищем нашу видеокарту. Тоже самое стоит проделать и со звуковым чипом от видеокарты. Таким же образом можно пробросить USB хосты, чтобы они заработали, стоит указать в Controller USB в поле Model: USB2.
При запуске в устройствах компьютера должен появиться наш адаптер:
Следущее что нам нужно сделать — это скачать драйвер. Скачиваем с сайта производителя и устанавливаем его в систему. У меня при попытке установить драйвер система отчаяно уходила в BSOD, решил я эту проблему установкой более новой винды. Также можно попробовать установить драйвер через диспетчер устройств, но у меня он просто напросто зависал.
Для завершения выключаем виртуальную машину и производим перезагрузку компьютера, если этого не сделать, при повторном запуске система может уйти в BSOD.
На данный момент, kvm при повторном запуске гостя с проброшенной видеокартой вешает всю систему, поэтому, если вы выключили виртуалку, то придется так же перезагружать весь компьютер.
Теперь, после старта консоль виртуальной машины отключится после загрузки драйвера видеокарты, в случае Windows 7 там остается картинка «Starting Windows», но само изображение должно уже выводится на проброшенную видеокарту. Хотя на коносль и не будет выводится изображение, тем не менее она будет передавать данные от устройств ввода и можно будет управлять гостем с клавиатуры и мыши как обычную виртуалку.
Цепляем второй монитор к проброшенной видеокарте, и любуемся проделанной работой.
На последок скриншот оценки производительности системы:
Читайте также: