Иногда появляется желание/необходимость прокинуть в виртуальную машину физическое (реальное) железо. Для этого
существует такая технология как 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 накопители. Именно этим планирую заняться в будущем.