IOMMU — что это и зачем нужно для виртуализации | Глоссарий FREEHOSTING

IOMMU

Input Output Memory Management Unit
IOMMU — IOMMU (Input-Output Memory Management Unit) — аппаратный блок, изолирующий доступ устройств ввода-вывода к памяти. Используется для безопасной передачи PCI-устройств виртуальным машинам (PCI Passthrough) и защиты от DMA-атак.

Определение простыми словами

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%.