Разработчики проекта XCP-NG, развивающего свободную платформу для развертывания и управления работой облачной инфраструктурой, представили проект PV-IOMMU, позволяющий гостевым системам получить доступ к ограниченной функциональности IOMMU, реализованной с использованием инфраструктуры паравиртуализации Xen. На практике PV-IOMMU может применяться для реализации защиты DMA в Dom0 или обеспечения поддержки подсистемы ядра Linux VFIO. Ранее гипервизор Xen использовал IOMMU для проброса доступа к PCI-устройствам и ограничения доступа устройств к памяти, но из соображений стабильности и безопасности гостевые системы не могли напрямую обращаться к предоставляемому оборудованием блоку IOMMU.
IOMMU представляет собой специализированный блок управления памятью, выполняющий трансляцию виртуальных адресов, видимых аппаратным устройством, в физические адреса, позволяющий выполнять и фильтровать операции DMA по виртуальным адресам, а также ограничивать и изолировать операции ввода-вывода. В контексте виртуализации IOMMU позволяет гостевым системам напрямую обращаться к периферийным устройствам, таким как Ethernet-адаптеры, графические карты и контроллеры устройств хранения. Реализация IOMMU от компании Intel предоставляется под именем VT-d (“Virtualization Technology for Directed I/O), AMD – AMD-Vi (I/O Virtualization), а ARM – SMMU (System Memory Management Unit).
Предложенная паравиртуализированная реализация (PV-IOMMU) позволяет гостевым системам использовать базовые возможности IOMMU, но при этом абстрагирует все низкоуровневые аппаратные детали. Для включения в состав Xen предложен новый гипервызов (аналог системного вызова для гипервизоров) HYPERVISOR_iommu_op, который могут использовать гостевые системы для выполнения операций IOMMU. Среди прочего, гостевые системы теперь могут создавать и изменять домены IOMMU (IOMMU domain), именуемые в Xen контекстами IOMMU (IOMMU context) для того чтобы избежать путаницы с термином “домен” в Xen. Контексты IOMMU позволяют организовать доступ гостевой системы к памяти устройств и задавать операции трансляции памяти, применяемые к одному или нескольким устройствам.
На текущей стадии развития в PV-IOMMU поддерживается только технология Intel VT-d, но в скором времени планируется добавить поддержку AMD-Vi и SMMUv3