Практикум по виртуализации устройств
Проброс PCIe-устройств: IOMMU, группы и VFIO
Разберите путь прямого назначения PCIe-устройства виртуальной машине: что делает IOMMU, почему важна группа изоляции и где в Linux появляется VFIO. Практикум учит отделять паспортную поддержку от проверенной конфигурации конкретного сервера.
Что вы сможете сделать
- Объяснять роль IOMMU без подмены её процессорной виртуализацией.
- Проверять IOMMU-группу целевого PCIe-устройства целиком.
- Разделять VFIO, гипервизор и фактическое владение устройством.
- Не обещать проброс и перенос VM по одному флагу в паспорте CPU.
1. DMA и граница памяти
Сначала определите, какой механизм ограничивает DMA устройства и какую границу он реально даёт.
IOMMU переводит адреса DMA и в современных реализациях может ограничивать доступ устройства к памяти.
VFIO использует эту защиту для прямого доступа из пользовательского пространства; назначение устройства VM — один из сценариев.
Гранулярность может быть крупнее одного PCIe-устройства из-за свойств устройства, моста и топологии.
В IOMMUFD пространство IOAS связывает IOVA с памятью, а ограничения подключённого устройства могут сузить допустимый диапазон адресов.
2. Группа важнее одного адреса PCIe
Целевой адрес устройства — только начало проверки. Без состава группы нельзя доказать независимую границу.
IOMMU-группа — набор устройств, который можно изолировать от остальных устройств системы.
VFIO использует группу как единицу владения, потому что изоляция может быть крупнее одного устройства.
В одну группу могут попасть несколько функций из-за устройства, моста, ACS и общей топологии.
В legacy VFIO группу с несколькими устройствами подготавливают целиком: соседние устройства не должны оставаться заняты другими драйверами.
Device cdev меняет интерфейс, но не отменяет групповое владение DMA.
3. Что именно делает VFIO
VFIO, IOMMU и гипервизор выполняют разные роли.
VFIO предоставляет Linux-процессу прямой доступ к устройству под защитой IOMMU.
Назначение физического устройства виртуальной машине — один из основных сценариев такого доступа.
В legacy-модели VFIO работает через подготовленную IOMMU-группу.
В device cdev устройство сначала связывают с iommufd и устанавливают владение DMA.
У одной IOMMU-группы один владелец DMA.
4. Приёмка проброса без лишних обещаний
Запуск гостя, проброс устройства и перенос VM — разные операции.
Поддержка SVM или VMX в CPU не доказывает, что IOMMU включена и нужное устройство поддерживается для проброса.
Исполнение гостя, прямой проброс устройства и перенос работающей машины требуют разных проверок.
После настройки подтвердите устройство внутри гостя, а перезапуск и обслуживание проверяйте отдельными сценариями.
Проверьте инженерное мышление
Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.
Следующий шаг
Сформулируйте задачу и уточните требования к своей системе.
Подготовить состав проектаОткроется черновик вопроса. Отправьте его, когда будете готовы.
Источники курса
Ссылки приведены один раз для всего курса, чтобы не мешать чтению каждого тезиса.
- Официальная документация
VFIO - “Virtual Function I/O”
Linux Kernel · Linux 6.12.0 documentation; VFIO; Groups, Devices, and IOMMUs; VFIO Device cdev
Проверены назначение VFIO, роль IOMMU, границы IOMMU-групп, legacy group interface и device cdev. Документ описывает Linux 6.12; поведение других ОС и гипервизоров отдельно не подтверждается.
Открыть первоисточник - Официальная документация
IOMMUFD
Linux Kernel · Linux 6.12.0 documentation; Overview; Key Concepts; IOMMUFD User API
Проверены IOAS, отображение IOVA в память, владение DMA и влияние ограничений подключённых устройств. Это Linux userspace API, а не универсальный интерфейс любой платформы.
Открыть первоисточник - Первичная спецификация
AMD64 Architecture Programmer's Manual, Volume 2: System Programming
AMD · Документ № 24593, том 2; точная редакция PDF требует повторной проверки
Документ № 24593 указан как том 2 System Programming. Точная редакция и разделы для цитирующих утверждений требуют проверки самого PDF; дата прежнего получения не обновлялась. Упоминание другого тома полностью удалено.
Открыть первоисточник - Официальная документация
Guide to Security for Full Virtualization Technologies
National Institute of Standards and Technology · NIST SP 800-125, final от января 2011 года
Определяет full virtualization, VM/guest, hypervisor, bare-metal и hosted architectures, snapshot и isolation boundary.
Открыть первоисточник - Официальная документация
Live Migration Overview
Microsoft · Microsoft Learn, обновлено 17 сентября 2020 года
Отделяет перенос работающей VM без воспринимаемого простоя от automatic failover и показывает, что live migration может работать без кластера.
Открыть первоисточник