Определение простыми словами
IOMMU — это аппаратный компонент процессора или чипсета, который управляет тем, какие области оперативной памяти доступны каждому устройству ввода-вывода (сетевым картам, GPU, NVMe-контроллерам). Без IOMMU любое устройство теоретически может читать и писать в произвольную область RAM через механизм DMA (Direct Memory Access). IOMMU добавляет таблицу трансляции адресов: каждое устройство работает только с разрешёнными регионами памяти.
В контексте виртуализации IOMMU решает ключевую задачу: позволяет гипервизору «пробросить» физическое PCI-устройство напрямую в гостевую ВМ. Гость получает прямой доступ к железу без посредничества хоста, что даёт производительность, близкую к bare-metal. На платформах Intel технология называется VT-d (Virtualization Technology for Directed I/O), на AMD — AMD-Vi (или AMD IOMMU).
Сравнение
| Технология | Изоляция памяти | PCI Passthrough | Поддержка SR-IOV |
|---|---|---|---|
| IOMMU (VT-d / AMD-Vi) | Аппаратная, per-device | Да, через VFIO | Да |
| Virtio (паравиртуализация) | Программная | Нет | Нет |
| Эмуляция устройств (QEMU) | Программная | Нет | Нет |
Кейсы использования
- GPU Passthrough: передача видеокарты NVIDIA/AMD напрямую в ВМ для задач ML-инференса или рендеринга без потерь производительности. На Proxmox VE конфигурируется через параметр
hostpci0: 01:00,pcie=1,x-vga=1в конфиге ВМ. - NVMe Passthrough: проброс NVMe-диска в ВМ для получения латентности менее 100 мкс вместо ~300 мкс при эмуляции через virtio-blk.
- SR-IOV: разделение одной физической сетевой карты на несколько виртуальных функций (VF). Каждая ВМ получает собственный VF с хардварной очередью. Требует SR-IOV-совместимого адаптера и активного IOMMU.
- Защита от DMA-атак: на хостах с ненадёжными PCIe-устройствами IOMMU предотвращает чтение чужой памяти через Thunderbolt/PCIe.
Негативный пример: попытка запустить GPU Passthrough на процессоре без VT-d/AMD-Vi или с отключённым IOMMU в BIOS/UEFI приведёт к ошибке VFIO: failed to set iommu for container: Operation not permitted. Включение IOMMU в ядре без параметра intel_iommu=on в GRUB также не даст результата.
Технические детали
Для активации IOMMU в Linux необходимо:
# Для Intel — добавить в /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# Для AMD:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
# Применить изменения:
update-grub
# После перезагрузки — проверить активацию:
dmesg | grep -e DMAR -e IOMMU
# Просмотр IOMMU-групп:
find /sys/kernel/iommu_groups/ -type l
# Привязка устройства к vfio-pci (например, GPU 01:00.0):
echo '10de 2204' > /sys/bus/pci/drivers/vfio-pci/new_id
Параметр iommu=pt (passthrough mode) снижает накладные расходы трансляции адресов для устройств, которые не передаются в ВМ. Без него возможно падение производительности сети и дисков на хосте до 5–15% из-за лишней трансляции адресов.
Проверка поддержки на уровне CPU выполняется командой grep -E 'vmx|svm' /proc/cpuinfo. Для Intel VT-d дополнительно нужно grep -i dmar /proc/interrupts. Гипервизор KVM использует IOMMU через подсистему VFIO ядра.
🔥 Где это применяется
Частые вопросы
Обязательно ли включать IOMMU для работы KVM?
Нет. KVM работает без IOMMU через паравиртуализацию virtio или программную эмуляцию устройств. IOMMU нужен только для PCI Passthrough и SR-IOV — когда физическое устройство передаётся напрямую в гостевую ВМ.
Что такое IOMMU-группа и почему она важна при Passthrough?
IOMMU-группа — набор устройств, которые аппаратно связаны и не могут быть изолированы друг от друга. Пробросить в ВМ можно только все устройства группы целиком. Если GPU и звуковая карта попали в одну группу, придётся пробрасывать оба устройства одновременно.
Влияет ли включение IOMMU на производительность хоста?
С параметром iommu=pt накладные расходы минимальны — менее 1% для большинства нагрузок. Без pt-режима хост-устройства получают дополнительный уровень трансляции адресов, что может снизить пропускную способность сети и дисков на 5–15%.