PV-IOMMU, un mecanismo de paravirtualización de IOMMU de Xen
Los desarrolladores del proyecto XCP-NG dieron a conocer hace poco, que se encuentran trabajando en un nuevo proyecto el cual tiene como nombre «PV-IOMMU» y que permite que los sistemas invitados accedan a funciones limitadas de la IOMMU implementada a través de la paravirtualización en el entorno Xen.
Básicamente, PV-IOMMU promete habilitar a Dom0 para utilizar un IOMMU paravirtualizado, lo que ofrece diversas ventajas como protección de DMA para Dom0 y soporte para VFIO de Linux.
¿Que es IOMMU?
IOMMU conocido por distintos nombres según el fabricante (VT-d en Intel, AMD-Vi en AMD, SMMU en ARM, entre otros), es un dispositivo especial implementado cuya función principal es traducir o filtrar solicitudes de DMA (Acceso Directo a Memoria) de dispositivos a la memoria física de la máquina. En la virtualización, se utiliza para que los sistemas invitados puedan acceder directamente a dispositivos periféricos como adaptadores de Ethernet, tarjetas gráficas y controladores de almacenamiento.
¿Qué beneficios se obtienen con la paravirualizacion IOMMU?
Anteriormente, el hipervisor Xen utilizaba IOMMU para redirigir el acceso de dispositivos PCI y controlar el acceso de dichos dispositivos a la memoria. Sin embargo, por razones de estabilidad y seguridad, los invitados no podían acceder directamente al bloque IOMMU proporcionado por el hardware.
Presentamos una nueva IOMMU paravirtualizada simplemente llamada PV-IOMMU. Básicamente implementa las características que el huésped espera de una IOMMU, abstrayendo todos los detalles internos del hardware. En Xen, agregamos una nueva hiperllamada para tales operaciones (que es HYPERVISOR_iommu_op) que proporciona varias operaciones de IOMMU que el huésped puede usar (si está permitido).
A pesar de esto, se ha logrado ofrecer una interfaz al invitado para permitirle acceder a IOMMU, utilizando una infraestructura paravirtualizada simplificada de Xen, mientras oculta los detalles del hardware de bajo nivel. Esta interfaz, denominada PV-IOMMU, abstrae todos los detalles internos del hardware y ofrece un conjunto de operaciones IOMMU a las que el invitado puede acceder, si se le permite. Las operaciones en PV-IOMMU se exponen como sub-operaciones en la hiperllamada HYPERVISOR_iommu_op, y están diseñadas de manera que sean prácticas para el invitado.
Una de las características principales que el huésped espera de una IOMMU es la capacidad de crear y modificar «Dominios IOMMU» que es un conjunto de traducciones que hace contexto de memoria y que se puede aplicar a un dispositivo (o múltiples dispositivos). Estos dominios se denominan «Contextos IOMMU» en Xen para evitar confusiones con los dominios Xen que son máquinas virtuales.
Entre los diferentes beneficios que se destacan de la paravirtualización IOMMU, se mencionan los siguientes:
- Protección del DMA para Dom0: La paravirtualización IOMMU permite la protección del acceso directo a memoria (DMA) para el dominio de administración (Dom0) en entornos de virtualización. Esto ayuda a mejorar la seguridad y estabilidad del sistema al evitar que los dispositivos accedan directamente a la memoria del sistema, lo que podría comprometer la integridad de Dom0.
- Soporte para VFIO de Linux: La paravirtualización del IOMMU facilita el soporte para la infraestructura de E/S virtualizada flexible para dispositivos de usuario (VFIO) en entornos de virtualización, permitiendo que aplicaciones de usuario y máquinas virtuales puedan acceder directamente a los dispositivos de hardware.
- Facilita la implementación de SPDK con Xen: La paravirtualización IOMMU también forma parte de un esfuerzo continuo para respaldar SPDK con Xen. Esto abre la puerta a un nuevo datapath rápido para el almacenamiento de máquinas virtuales, lo que potencialmente puede impulsar el rendimiento del almacenamiento en entornos virtualizados.
Ademas de ello, también se planea abordar uno de los problemas de Xen con IOMMU, ya que actualmente no permite la existencia de múltiples contextos IOMMU en un solo dominio Xen. Sin embargo, se está considerando un rediseño del subsistema IOMMU de Xen para tener en cuenta multiples contextos IOMMU y modificar las características existentes para utilizarlos. Aunque se ha implementado un PoC funcional que implementa el primer enfoque, con ciertas limitaciones y soporte incompleto, se menciona que se está trabajando en un rediseño completo del subsistema para el futuro.
Finalmente, cabe mencionar que en la fase actual de desarrollo, PV-IOMMU solo es compatible Intel VT-d, pero se tiene previsto añadir pronto soporte para AMD-Vi y SMMUv3. Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.