Las ventajas de tener una IOMMU, en comparación con el direccionamiento físico directo de la memoria (DMA), incluyen [ cita necesaria ] :
Se pueden asignar grandes regiones de memoria sin necesidad de que sean contiguas en la memoria física: la IOMMU asigna direcciones virtuales contiguas a las direcciones físicas fragmentadas subyacentes. Por lo tanto, a veces se puede evitar el uso de E/S vectorizadas ( listas de dispersión ).
Los dispositivos que no admiten direcciones de memoria durante el tiempo suficiente para direccionar toda la memoria física aún pueden direccionar toda la memoria a través de IOMMU, evitando los gastos generales asociados con la copia de buffers hacia y desde el espacio de memoria direccionable del periférico.
Por ejemplo, las computadoras x86 pueden direccionar más de 4 gigabytes de memoria con la función de extensión de dirección física (PAE) en un procesador x86. Aún así, un dispositivo PCI normal de 32 bits simplemente no puede direccionar la memoria por encima del límite de 4 GiB y, por lo tanto, no puede acceder a ella directamente. Sin una IOMMU, el sistema operativo tendría que implementar buffers de rebote que consumen mucho tiempo (también conocidos como buffers dobles [3] ).
La memoria está protegida contra dispositivos maliciosos que intentan ataques DMA y dispositivos defectuosos que intentan transferencias de memoria erróneas porque un dispositivo no puede leer ni escribir en una memoria que no ha sido asignada (asignada) explícitamente para él. La protección de la memoria se basa en el hecho de que el sistema operativo que se ejecuta en la CPU (ver figura) controla exclusivamente tanto la MMU como la IOMMU. Los dispositivos no pueden físicamente eludir o corromper las tablas de administración de memoria configuradas.
En la virtualización , los sistemas operativos invitados pueden utilizar hardware que no está diseñado específicamente para la virtualización. El hardware de mayor rendimiento, como las tarjetas gráficas, utiliza DMA para acceder a la memoria directamente; En un entorno virtual, el software de la máquina virtual reasigna todas las direcciones de memoria, lo que provoca que los dispositivos DMA fallen. IOMMU maneja esta reasignación, permitiendo que los controladores de dispositivo nativos se utilicen en un sistema operativo invitado.
En algunas arquitecturas, IOMMU también realiza una reasignación de interrupciones de hardware , de manera similar a la reasignación de direcciones de memoria estándar.
La paginación de memoria periférica puede ser compatible con una IOMMU. Un periférico que utiliza la extensión PCI-SIG PCIe Address Translation Services (ATS) Page Request Interface (PRI) puede detectar y señalar la necesidad de servicios de administrador de memoria.
Para arquitecturas de sistema en las que el puerto de E/S es un espacio de direcciones distinto del espacio de direcciones de memoria, no se utiliza una IOMMU cuando la CPU se comunica con dispositivos a través de puertos de E/S . En arquitecturas de sistemas en las que las E/S de puertos y la memoria están asignadas a un espacio de direcciones adecuado, una IOMMU puede traducir los accesos de E/S de puertos.
Desventajas
Las desventajas de tener una IOMMU, en comparación con el direccionamiento físico directo de la memoria, incluyen: [4]
Cierta degradación del rendimiento debido a los gastos generales de traducción y gestión (p. ej., recorridos por tablas de páginas).
Consumo de memoria física para las tablas de páginas de E/S (traducción) agregadas . Esto se puede mitigar si las tablas se pueden compartir con el procesador.
Para disminuir el tamaño de la tabla de páginas, la granularidad de muchas IOMMU es igual a la paginación de la memoria (a menudo 4096 bytes) y, por lo tanto, cada pequeño búfer que necesita protección contra ataques DMA debe alinearse con la página y ponerse a cero antes de hacerlo visible para el dispositivo. Debido a la complejidad de la asignación de memoria del sistema operativo, esto significa que el controlador del dispositivo necesita usar buffers de rebote para las estructuras de datos confidenciales y, por lo tanto, disminuye el rendimiento general.
Virtualización
Cuando un sistema operativo se ejecuta dentro de una máquina virtual , incluidos los sistemas que utilizan paravirtualización , como Xen y KVM , generalmente no conoce las direcciones físicas del host de la memoria a la que accede. Esto dificulta el acceso directo al hardware de la computadora, porque si el sistema operativo invitado intentara indicarle al hardware que realice un acceso directo a la memoria (DMA) utilizando direcciones físicas invitadas, probablemente dañaría la memoria, ya que el hardware no sabe nada de ello. el mapeo entre las direcciones física del invitado y del host para la máquina virtual dada. La corrupción se puede evitar si el hipervisor o el sistema operativo host interviene en la operación de E/S para aplicar las traducciones. Sin embargo, este enfoque genera un retraso en la operación de E/S.
Una IOMMU resuelve este problema reasignando las direcciones a las que accede el hardware de acuerdo con la misma tabla de traducción (o compatible) que se utiliza para asignar la dirección física del huésped a las direcciones físicas del host. [5]
Especificaciones publicadas
AMD ha publicado una especificación para la tecnología IOMMU, denominada AMD-Vi . [6] [7]
IBM ofreció soporte del programa de control extendido: modo de almacenamiento virtual extendido (ECPS:VSE) [8] en su línea 43xx ; Los programas de canal utilizaban direcciones virtuales.
Intel ha publicado una especificación para la tecnología IOMMU como Tecnología de virtualización para E/S dirigida, abreviada VT-d . [9]
La información sobre Sun IOMMU se ha publicado en la sección Acceso a memoria virtual del dispositivo (DVMA) de Solaris Developer Connection. [10]
La entrada de control de traducción (TCE) de IBM se ha descrito en un documento titulado Seguridad de partición lógica en IBM eServer pSeries 690. [11]
El PCI-SIG tiene trabajos relevantes bajo los términos Virtualización de E/S de raíz única (SR-IOV) y Servicios de traducción de direcciones (ATS). Anteriormente, estos estaban cubiertos en especificaciones distintas, pero a partir de PCI Express 5.0 se han trasladado a la especificación básica PCI Express. [12]
ARM define su versión de IOMMU como System Memory Management Unit (SMMU) [13] para complementar su arquitectura de virtualización. [14]
^ "Soporte de hardware de plataforma Intel para virtualización de E/S". Intel.com. 2006-08-10. Archivado desde el original el 20 de enero de 2007 . Consultado el 7 de junio de 2014 .
^ "Placas de escritorio: compatibilidad con la tecnología de virtualización Intel (Intel VT)". Intel.com. 2014-02-14 . Consultado el 7 de junio de 2014 .
^ "Extensión de dirección física: memoria PAE y Windows". Central de desarrollo de hardware de Microsoft Windows. 2005 . Consultado el 7 de abril de 2008 .
^ Muli Ben-Yehuda; Jimi Xenidis; Michal Ostrowski (27 de junio de 2007). "Precio de la seguridad: evaluación del desempeño de IOMMU" (PDF) . Actas del Simposio de Linux 2007 . Ottawa, Ontario, Canadá: IBM Research . Consultado el 28 de febrero de 2013 .
^ "Preguntas frecuentes sobre Xen: en DomU, ¿cómo puedo utilizar gráficos 3D?". Archivado desde el original el 2 de octubre de 2008 . Consultado el 12 de diciembre de 2006 .
^ "Revisión 2.0 de la especificación de la tecnología de virtualización de E/S AMD (IOMMU)" (PDF) . amd.com. 24 de marzo de 2011 . Consultado el 11 de enero de 2014 .
^ "Especificación de la tecnología de virtualización de E/S AMD (IOMMU)" (PDF) . amd.com . Consultado el 9 de julio de 2020 .
^ Principios de funcionamiento de los procesadores IBM 4300 para ECPS: modo VSE (PDF) (Primera ed.). IBM. Enero de 1979. SA22-7070-0. Archivado desde el original (PDF) el 14 de marzo de 2012 . Consultado el 30 de junio de 2021 .
^ "Especificación de arquitectura de tecnología de virtualización Intel para E/S dirigidas (VT-d)" (PDF) . Consultado el 9 de julio de 2020 .
^ "Recursos DVMA y traducciones IOMMU" . Consultado el 30 de abril de 2007 .
^ "Seguridad de particiones lógicas en IBM eServer pSeries 690" . Consultado el 30 de abril de 2007 .
^ "Especificación básica de PCI Express" . Consultado el 18 de enero de 2023 .
^ "BRAZO SMMU" . Consultado el 13 de mayo de 2013 .
^ "Extensiones de virtualización ARM". Archivado desde el original el 3 de mayo de 2013 . Consultado el 13 de mayo de 2013 .