Иногда появляется желание/необходимость прокинуть в виртуальную машину физическое (реальное) железо. Для этого
существует такая технология как IOMMU
. Приступим.
Технические требования
Для работы данной технологии нужна поддержка со стороны:
- процессора;
- материнской платы;
- гипервизора.
Процессоры
Говорить будем только про x86 процессоры (ARM оставим “за бортом”, может быть когда-нибудь потом проверю и попробую).
Для процессоров Intel нам нужны следующие технологии:
Для процессоров AMD нужна поддержка:
Материнская плата
Тут названия настроек, которые нужно включить и информация о поддержке сильно зависит от производителя материнской
платы. Но все это обычно находится в разделе Advanced
, и связано с виртуализацией.
Гипервизор
Собственно Proxmox 8. В нем есть возможность использовать IOMMU
, но по умолчанию она выключена - нужно самому ее
ключить. Этим мы и займемся.
Проверка активности
Для того что бы проверить работает ли сейчас режим IOMMU
нужно в консоли сервера (ssh
или vnc
через веб) выполнить
следующий код:
|
|
В выводе мы ищем упоминание включения режима DMAR: IOMMU enabled
. Если такое сообщение есть - то IOMMU
включен и
можно начинать пользоваться. Если режим не включен, то нужно поменять несколько файлов. Так же стоит проверить, что бы
был включен режим ремапинга прерываний:
|
|
В результате должен быть вывод похожий на:
|
|
Kernel command line
В зависимости от варианта установки нужно будет воспользоваться одним из вариантов и добавить в нужный файл параметры:
|
|
systemd-boot
Файл правится добавлением параметров после quiet
:
|
|
После этого нужно выполнить:
|
|
grub
Файл правится добавлением параметров после quiet
:
|
|
После правок выполнить:
|
|
Модули ядра
так же стоит добавить подгрузку модулей ядра в файле:
|
|
После чего выполнить команду для обновления initramfs
:
|
|
Проверка
После перезагрузки системы результат команды dmesg | grep -e DMAR -e IOMMU
должен быть похож на:
|
|
Разделение по группам
Для возможности проброса конкретных устройств, важно что бы они были разделены по группам. Проверить список групп можно либо в консоли по “pcie адресам” устройств:
|
|
Либо в более красивом виде для текущей ноды Proxmox (можно указать руками имя ноды из кластера):
|
|
Заключени
Теперь можно пробовать “выдавать” виртуалкам настоящие PCIe устройства в пользование. Это могут быть как банальные видеокарты, так и сетевые порты или полноценные NVMe накопители. Именно этим планирую заняться в будущем.