Proxmox как пробросить pci устройство в виртуальную машину

Обновлено: 06.07.2024

При указании параметров конфига /etc/modprobe.d/vfio.conf после перезагрузки система зависает. ( помогает только hardreset )

Если не прописать туда параметры видео карты, то загрузка проходит. Более того в виртуальной машине я могу увидеть видео карту и даже могу попытаться поставить на неё драйвера, но потом будет BSOD ( то-ли не так версия драйвера то-ли видео карта не до конца проброшена ( скорее всего последнее ))

в BIOS активны vt-d опции и intel_iommu включен

На сколько понял на материнской плате и у процессора есть возможность проброса, но не уверен есть ли она у самой видео карты. ( не понял как проверить , буду рад если подскажите )

Характеристики:
OS: proxmox 6.3-2 ( debian 10 )
CPU: Intel(R) Xeon(R) CPU E5-2628 v3
MB: QIYIDA X99-H9
RAM: 8GB

тестируемые видео карты:

Можете подсказать в чем проблема или подсказать направление для решения ? Или данные видеокарты не поддерживают возможность проброса в виртуалки?

Нашел решение ) , как оказалось все было достаточно глупо.
Не знаю на что я рассчитывал, но прокидывать единственную видеокарту в системе, наверное было не лучшей идеей) скорее всего у меня из-за этого зависало при старте Debian.


  Я купил себе еще одну дешевую видео карту и т.к. на моей материнской плате отсутствовал второй слот купил еще и расширение ( за 300р ) для подключения второй видиокарты.
  В райзер я подключил видео карту которую я буду пробрасывать в виртуалку, а в слот видео карты на метеринке воткнул дешевую видео карту в качестве затычки.
После через web proxmox добавил видео карту в виртуалку, уже в самой виртуалке доставил драйвера и поставил галочку Primiry GPU. Все видео карта успешно проброшена.
Проброс успешно удался, в качестве теста запустил Portal 2 через steam link, все ок без проседаний.

В самом низу прикрепил фото с помощью чего я подключил вторую видео-карту.

Итоговые конфиги: /etc/pve/qemu-server/350.conf - конфиг машин

/etc/modprobe.d/vfio.conf - id устройства видео карты

фото платы-расширения для подключения второй видео-карты ( райзер для видео карты )

Не вполне стандартные задачи, с которыми мне приходится сталкиваться по работе и способы их решения.

среда, 31 марта 2021 г.

Руководство администратора Proxmox VE R 6.3 Глава 10.9

Виртуальные машины Qemu/KVM

  1. Эмулированные устройства и паравиртуализированные устройства
  2. Параметры Виртуальных Машин
  3. Миграция
  4. Копии и клоны
  5. Шаблоны виртуальных машин
  6. Generation ID виртуальной машины
  7. Импорт ВМ и образов дисков
  8. Поддержка Cloud-Init
  9. Проброс PCI(e)
  10. Hookscripts
  11. Гибернация
  12. Управление VM с помощью qm
  13. Конфигурация
  14. Блокировки

Проброс PCI(e)

Общие требования

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

Аппаратное обеспечение
Ваше "железо" должно поддержать IOMMU (I/O Memory Management Unit) прерывания переназначения, это касается CPU и материнской платы.
Как правило, его поддерживают системы Intel с VT-d и системы AMD с AMD-Vi. Но не гарантируется, что все будет работать из коробки из-за плохой аппаратной реализации и отсутствия или низкого качества драйверов.
Кроме того, оборудование серверного уровня часто имеет лучшую поддержку, чем оборудование потребительского уровня, но даже в этом случае, многие современные системы могут его поддерживать.
Обратитесь к поставщику оборудования, чтобы проверить, поддерживается ли этот функционал в Linux для вашей конкретной сборки.

Конфигурация
Убедившись, что ваше оборудование поддерживает проброс, вам нужно будет выполнить некоторую настройку, чтобы включить проброс PCI(e).

Проброс устройств хост системы

Наиболее часто используемый вариант проброса PCI(e) - это проброс всей карты PCI(e), например, GPU или сетевой карты.

  • передать идентификаторы устройств в параметры модулей vfio-pci, добавив в файл .conf в /etc/modprobe.d/, где 1234:5678 и 4321:8765 - идентификаторы поставщика и устройства, полученные:
  • полностью занести драйвер в черный список на хосте, гарантируя, что он может быть свободно проброшен, с помощью: в файле .conf в /etc/modprobe.d/.

Проверка конфигурации
Чтобы проверить, были ли ваши изменения успешными, вы можете использовать и проверьте запись вашего устройства. Если вывод сообщает: или строка 'in use' полностью отсутствует, устройство готово к использованию для проброса.

Настройка ВМ
Для проброса устройства вам необходимо установить опцию hostpciX в конфигурации виртуальной машины, например, выполнив: Если ваше устройство имеет несколько функций (например, '00:02.0' и '00:02.1'), вы можете передавать их все вместе с сокращенным синтаксисом '00:02'

  • x-vga=on|off отмечает устройство PCI(e) как основной графический процессор виртуальной машины. Если он включен, vga-configuration параметр будет проигнорирован
  • pcie=on|off указывает Proxmox VE использовать порт PCIe или PCI. Некоторым комбинациям гостей/устройств требуется PCIe а не PCI. PCIe доступен только для машин типа q35.
  • rombar=on|off делает ПЗУ прошивку устройства видимой для гостя. По умолчанию включено. Некоторым устройствам PCI(e) требуется его отключение.
  • romfile=<path> это необязательный путь к файлу ROM, который будет использовать устройство. Используется относительный путь от /usr/share/kvm/.

SR-IOV

Другим вариантом проброса устройств PCI(e) - использование функций аппаратной виртуализации вашего устройства, если таковые имеются.

SR-IOV (Single-Root Input/Output Virtualization) позволяет использовать одно устройство для предоставления нескольких VF (Virtual Functions) в системе. Каждый из этих VF может использоваться в другой виртуальной машине с полным набором аппаратных функций и так же улучшая производительность и уменьшая задержки, по сравнению с виртуализированными устройствами.

В настоящее время наиболее распространенным примером использования этого являются сетевые адаптеры (Network Interface Card) с поддержкой SR-IOV, которые могут предоставлять несколько VF на физический порт. Это позволяет использовать такие функции, как выгрузка контрольной суммы и т.д., для использоваться внутри виртуальной машины, уменьшая накладные расходы CPU (хоста).

    иногда есть опция для модуля драйвера, например, для некоторых устройств Intel который может быть помещен в файл с расширением .conf, находящийся в /etc/modprobe.d/. (Не забудьте обновить initramfs после того)

Устройства-посредники (vGPU, GVT-g)

Устройства-посредники - это еще один метод доступа к функциям и производительности физического оборудования для виртуализированных устройств. Они чаще всего встречаются в виртуализированных конфигурациях графических процессоров, таких как Intel GVT-g и Nvidia vGPU, используя их технологии GRID.

При этом физическая карта может создавать виртуальные карты, аналогичные SR-IOV. Разница в том, что устройства не отображаются непосредственно на хосте как устройства PCI(e) и подходят только для использования в виртуальных машинах.

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

Драйверы Intel для GVT-g интегрированы в ядро и должны работать с Intel Core процессорами 5-го, 6-го и 7-го поколений, а также с процессорами Xeon E3 v4, E3 v5 и E3 v6.
Чтобы включить его для Intel Graphics, вы должны обязательно загрузить модуль kvmgt (например, через /etc/modules) и включить его в командной строке ядра раздел 3.11.5 добавив следующий параметр: После этого не забудьте обновить initramfs раздел 10.9.1., и перезагрузите ваш хост.

Мой опыт проброса 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 так же более подробная инструкция есть, по ней попробовать.

Здравствуйте, господа. Имеется материнка ASRock J5005-ITX, где установлен Proxmox 6 поверх Debian 10. Осваимваю виртуализацию и пытаюсь пробросить интегрированную карточку Intel UHD Graphics 605 внутрь гостевой ОС Windows 10.

В /etc/default/grub прописал:

В /etc/modules прописал:

В /etc/modprobe.d/pve-blacklist.conf добавил:

В /etc/modprobe.d/vfio.conf добавил:

И, наконец, выполнил:

Подскажите, пожалуйста, почему не создаётся директория mdev_supported_types по пути /sys/bus/pci/devices/0000:00:02.0/?




TheAnonymous ★★★★★ ( 18.11.19 11:24:44 )
Последнее исправление: TheAnonymous 18.11.19 11:27:08 (всего исправлений: 1)

пытаюсь пробросить интегрированную карточку

Брось эту затею. Даже если получится, после очередного обновления развалится.


Мне нужно, чтобы в гостевой ОС видеокарточка работала с аппаратным ускорением и с максимальной производительностью. Быть может, я неправ в своём предположении, но мне почему-то кажется, что второй вариант у меня не прокатит, поскольку камень, скорее всего, GVT-g не поддерживает. Повторюсь: это всего лишь предположение. Посему остаётся 1-й вариант. Но и в нём сложность: по ходу мануала не удаётся извлечь ROM:

Ладно, Бог с ним пока что, может быть это необязательный шаг. Далее создаю виртуалку. Вывод cat /etc/pve/qemu-server/100.conf:

Должно же быть изображение в noVNC

Нет, noVNC только с виртуальной видяхи работает.


А каким образом, в таком случае, добиться изображения на реальной (проброшенной) видюхе?


подключить к ней настоящий монитор


Монитор по HDMI и так подключен настоящий. При запуске виртуалки изображение, передаваемое по HDMI пропадает (до запуска выводился syslog). No Signal и всё. Не пойму, в какую сторону копать.



1. Скачал с официального сайта архив с той же версией UEFI, которая зашита в материнку.
2. С помощью утилиты MMTool из UEFI извлёк дамп vBIOS интегрированной видюхи (8086:0406)
3. С помощью утилиты rom-parser/rom-fixer изменил VID\PID в извлечённом дампе на реальные (8086:3184)
4. С помощью rom-parser выяснилось, что видюха не поддерживает режим OVMF (UEFI), посему пришлось настроить виртуалку под SeaBIOS.
5. Скормил ранее извлечённый и модифицированный дамп vBIOS виртуалке:

VMware

У меня есть новый гипервизор ESXi 7.0 U2 на сервере HP ProLiant DL360 Gen9. Внутри сервера есть USB контроллер. Задача — пробросить USB контроллер с хоста на виртуальную машину.

usb

Переводим гипервизор в режим обслуживания, Maintenance Mode.

В vCenter 7 кликаем на наш гипервизор. Configure > PCI Devices.

vmware

Пока нет устройств в списке Passthrough-enabled. Нажимаем CONFIGURE PASSTHROUGH.

vmware

Находим в списке нужное нам устройство и выделяем галкой. Я нахожу ASMedia ASM1142 USB 3.1 Host Controller. OK.

vmware

В списке Passthrough-enabled появляется PCI устройство. Может потребоваться перезагрузка хоста.

Прокинем PCI устройство на виртуальную машину. Выбираем виртуалку, нажимаем Edit Settings. И добавляем новое устройство PCI Device. ADD NEW DEVICE > PCI Device.

vmware

Если у нас только один контроллер, то в списке от подставляется автоматически. Оставляем по умолчанию DirectPath IO. Читаем предупреждение о том, что на виртуалке с прокинутым PCI устройством нельзя делать некоторые вещи. Насколько я помню, нельзя ставить виртуалку на паузу, мигрировать на другой хост, использовать снапшоты. По идее виртуальная машина должна ещё зарезервировать оперативную память, раньше это нужно было делать вручную. OK.

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