Практикум по виртуализации устройств

Проброс PCIe-устройств: IOMMU, группы и VFIO

Разберите путь прямого назначения PCIe-устройства виртуальной машине: что делает IOMMU, почему важна группа изоляции и где в Linux появляется VFIO. Практикум учит отделять паспортную поддержку от проверенной конфигурации конкретного сервера.

База → пресейл30 минут4 модуля8 вопросов
После курса

Что вы сможете сделать

  1. Объяснять роль IOMMU без подмены её процессорной виртуализацией.
  2. Проверять IOMMU-группу целевого PCIe-устройства целиком.
  3. Разделять VFIO, гипервизор и фактическое владение устройством.
  4. Не обещать проброс и перенос VM по одному флагу в паспорте CPU.
Модуль 1 из 4

1. DMA и граница памяти

Сначала определите, какой механизм ограничивает DMA устройства и какую границу он реально даёт.

  • IOMMU переводит адреса DMA и в современных реализациях может ограничивать доступ устройства к памяти.

  • VFIO использует эту защиту для прямого доступа из пользовательского пространства; назначение устройства VM — один из сценариев.

  • Гранулярность может быть крупнее одного PCIe-устройства из-за свойств устройства, моста и топологии.

  • В IOMMUFD пространство IOAS связывает IOVA с памятью, а ограничения подключённого устройства могут сузить допустимый диапазон адресов.

Модуль 2 из 4

2. Группа важнее одного адреса PCIe

Целевой адрес устройства — только начало проверки. Без состава группы нельзя доказать независимую границу.

  • IOMMU-группа — набор устройств, который можно изолировать от остальных устройств системы.

  • VFIO использует группу как единицу владения, потому что изоляция может быть крупнее одного устройства.

  • В одну группу могут попасть несколько функций из-за устройства, моста, ACS и общей топологии.

  • В legacy VFIO группу с несколькими устройствами подготавливают целиком: соседние устройства не должны оставаться заняты другими драйверами.

  • Device cdev меняет интерфейс, но не отменяет групповое владение DMA.

Модуль 3 из 4

3. Что именно делает VFIO

VFIO, IOMMU и гипервизор выполняют разные роли.

  • VFIO предоставляет Linux-процессу прямой доступ к устройству под защитой IOMMU.

  • Назначение физического устройства виртуальной машине — один из основных сценариев такого доступа.

  • В legacy-модели VFIO работает через подготовленную IOMMU-группу.

  • В device cdev устройство сначала связывают с iommufd и устанавливают владение DMA.

  • У одной IOMMU-группы один владелец DMA.

Модуль 4 из 4

4. Приёмка проброса без лишних обещаний

Запуск гостя, проброс устройства и перенос VM — разные операции.

  • Поддержка SVM или VMX в CPU не доказывает, что IOMMU включена и нужное устройство поддерживается для проброса.

  • Исполнение гостя, прямой проброс устройства и перенос работающей машины требуют разных проверок.

  • После настройки подтвердите устройство внутри гостя, а перезапуск и обслуживание проверяйте отдельными сценариями.

Финишная прямая

Проверьте инженерное мышление

Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.

01CPU поддерживает SVM или VMX. Состав IOMMU-группы сетевой карты и поддержка проброса не проверены. Что уже можно утверждать?
02Функции PCIe 03:00.0 и 03:00.1 находятся в одной IOMMU-группе. Нужно передать только 03:00.0. Какой вывод безопасен?
03Зачем IOMMU нужна в сценарии прямого назначения устройства?
04В legacy VFIO целевая функция и соседнее устройство находятся в одной группе. Соседнее устройство всё ещё занято обычным драйвером. Что это означает?
05Сетевой адаптер стоит в отдельном слоте. Что лучше всего доказывает его фактическую границу изоляции в Linux?
06Две функции находятся в одной IOMMU-группе. Можно ли в модели VFIO device cdev отдать их разным владельцам DMA одновременно?
07Как точнее описать VFIO в этом курсе?
08VM успешно работает с устройством, назначенным через VFIO. Что это само по себе подтверждает о живой миграции?

Следующий шаг

Сформулируйте задачу и уточните требования к своей системе.

Подготовить состав проекта

Откроется черновик вопроса. Отправьте его, когда будете готовы.

Проверяемая база

Источники курса

Ссылки приведены один раз для всего курса, чтобы не мешать чтению каждого тезиса.

  • Официальная документация

    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 может работать без кластера.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие