Las ventajas de tener un IOMMU, en comparación con el direccionamiento físico directo de la memoria (DMA), incluyen [ cita requerida ] :
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 y recolección ).
Los dispositivos que no admiten direcciones de memoria lo suficientemente largas como para direccionar toda la memoria física aún pueden direccionar toda la memoria a través de IOMMU, evitando sobrecargas asociadas 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. Sin embargo, un dispositivo PCI de 32 bits común 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 realizar ataques DMA y dispositivos defectuosos que intentan realizar transferencias de memoria erróneas porque un dispositivo no puede leer ni escribir en una memoria que no se le ha asignado (mapeado) explícitamente. La protección de la memoria se basa en el hecho de que el sistema operativo que se ejecuta en la CPU (consulte la figura) controla exclusivamente tanto la MMU como la IOMMU. Los dispositivos no pueden eludir ni corromper físicamente 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 directamente a la memoria; 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. La IOMMU se encarga de esta reasignación, lo que permite que los controladores de dispositivos nativos se utilicen en un sistema operativo invitado.
En algunas arquitecturas, IOMMU también realiza la 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 unidad de memoria interna (IOMMU). Un periférico que utilice la extensión de interfaz de solicitud de páginas (PRI) de servicios de traducción de direcciones (ATS) PCIe PCI-SIG puede detectar y señalar la necesidad de servicios de administración de memoria.
En las arquitecturas de sistemas en las que la E/S del puerto es un espacio de direcciones distinto del espacio de direcciones de la memoria, no se utiliza una IOMMU cuando la CPU se comunica con dispositivos a través de puertos de E/S . En las arquitecturas de sistemas en las que la E/S del puerto y la memoria se asignan a un espacio de direcciones adecuado, una IOMMU puede traducir los accesos de E/S del puerto.
Desventajas
Las desventajas de tener una IOMMU, en comparación con el direccionamiento físico directo de la memoria, incluyen: [4]
Alguna degradación del rendimiento debido a la sobrecarga de traducción y gestión (por ejemplo, recorridos por las 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 reducir 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 que sea 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 búferes de rebote para las estructuras de datos sensibles 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 memoria (DMA) utilizando direcciones físicas del invitado, probablemente dañaría la memoria, ya que el hardware no conoce la asignación entre las direcciones físicas 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 intervienen 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.
Un IOMMU resuelve este problema reasignando las direcciones a las que accede el hardware de acuerdo con la misma tabla de traducción (o una compatible) que se utiliza para asignar direcciones físicas del huésped a direcciones físicas del host. [5]
Especificaciones publicadas
AMD ha publicado una especificación para la tecnología IOMMU, llamada AMD-Vi . [6] [7]
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]
Se ha publicado información sobre Sun IOMMU 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 en los términos Single Root I/O Virtualization (SR-IOV) y Address Translation Services (ATS). Estos se cubrían anteriormente en especificaciones distintas, pero a partir de PCI Express 5.0 se han trasladado a la especificación base de PCI Express. [12]
ARM define su versión de IOMMU como Unidad de Gestión de Memoria del Sistema (SMMU) [13] para complementar su arquitectura de virtualización. [14]
^ "Compatibilidad de hardware de la plataforma Intel con virtualización de E/S". intel.com. 10 de agosto de 2006. Archivado desde el original el 20 de enero de 2007. Consultado el 7 de junio de 2014 .
^ "Placas base para PC de escritorio: compatibilidad con la tecnología de virtualización Intel (Intel VT)". intel.com. 14 de febrero de 2014. Consultado el 7 de junio de 2014 .
^ "Extensión de dirección física: memoria PAE y Windows". Microsoft Windows Hardware Development Central. 2005. Consultado el 7 de abril de 2008 .
^ Muli Ben-Yehuda; Jimi Xenidis; Michal Ostrowski (27 de junio de 2007). "Price of Safety: Evaluating IOMMU Performance" (PDF) . Actas del Simposio Linux 2007. Ottawa, Ontario, Canadá: IBM Research . Consultado el 28 de febrero de 2013 .
^ "Preguntas frecuentes de Xen: ¿Cómo puedo usar gráficos 3D en DomU?". Archivado desde el original el 23 de abril de 2005. 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 de 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 de AMD (IOMMU)" (PDF) . amd.com . Consultado el 9 de julio de 2020 .
^ Principios de funcionamiento de los procesadores IBM 4300 para el modo ECPS: VSE (PDF) (Primera edición). IBM. Enero de 1979. SA22-7070-0. Archivado desde el original (PDF) el 2012-03-14 . Consultado el 2021-06-30 .
^ "Especificación de la arquitectura de la tecnología de virtualización Intel para E/S dirigida (VT-d)" (PDF) . Consultado el 9 de julio de 2020 .
^ "Recursos de la DVMA y traducciones de la IOMMU" . Consultado el 30 de abril de 2007 .
^ "Seguridad de particiones lógicas en IBM eServer pSeries 690". Archivado desde el original el 10 de marzo de 2007. Consultado el 30 de abril de 2007 .
^ "Especificación básica de PCI Express" . Consultado el 18 de enero de 2023 .
^ "ARM 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 .