Unidad de gestión de memoria de entrada y salida

En informática, una unidad de gestión de memoria de entrada y salida (IOMMU) es una unidad de gestión de memoria (MMU) que conecta un bus de E/S con capacidad de acceso directo a memoria (con capacidad DMA) a la memoria principal. Al igual que una MMU tradicional, que traduce las direcciones virtuales visibles de la CPU a direcciones físicas, la IOMMU asigna direcciones virtuales visibles del dispositivo (también llamadas direcciones de dispositivo o direcciones de E/S asignadas a la memoria en este contexto) a direcciones físicas. Algunas unidades también proporcionan protección de la memoria contra dispositivos defectuosos o maliciosos.
Un ejemplo de IOMMU es la tabla de reasignación de direcciones gráficas (GART) que utilizan las tarjetas gráficas AGP y PCI Express en las computadoras con arquitectura Intel y AMD.
En la arquitectura x86, antes de dividir la funcionalidad del puente norte y el puente sur entre la CPU y el concentrador de controladores de plataforma (PCH), la virtualización de E/S no la realizaba la CPU sino el chipset.
Ventajas
Las ventajas de tener una IOMMU, en comparación con el direccionamiento físico directo de la memoria (DMA), incluyen:
- Grandes regiones de memoria se pueden asignar sin la necesidad de ser contiguas en la memoria física – la IOMMU mapea direcciones virtuales contiguas a las direcciones físicas fragmentadas subyacentes. Por lo tanto, a veces se puede evitar el uso de I/O vectorial (listas de recolección de basura).
- Los dispositivos que no soportan las direcciones de memoria lo suficientemente largas para abordar toda la memoria física todavía pueden abordar toda la memoria a través de la IOMMU, evitando los gastos generales asociados con la copia de los búferes hacia y desde el espacio de memoria direccional del periférico.
- Por ejemplo, las computadoras x86 pueden dirigirse a 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 normal de 32 bits simplemente no puede abordar la memoria por encima del límite de 4 GiB, por lo que no puede acceder directamente a ella. Sin una IOMMU, el sistema operativo tendría que implementar amortiguadores que consumen mucho tiempo (también conocidos como dobles amortiguadores).
- 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 a la memoria que no se ha asignado explícitamente (mapped) para ella. La protección de la memoria se basa en que el sistema operativo que se ejecuta en la CPU (véase la figura) controla exclusivamente tanto el MMU como la IOMMU. Los dispositivos son físicamente incapaces de eludir o corromper tablas de gestión de memoria configuradas.
- En virtualización, invitado los sistemas operativos pueden utilizar hardware que no se hace específicamente para la virtualización. Herrajes de mayor rendimiento como tarjetas gráficas utilizan DMA para acceder directamente a la memoria; en un entorno virtual todas las direcciones de memoria son re-mapped por el software de máquina virtual, lo que hace que los dispositivos DMA fallen. La IOMMU maneja esta remapping, permitiendo que los controladores de dispositivo nativos sean utilizados en un sistema operativo invitado.
- En algunas arquitecturas, IOMMU también realiza re-mapping interrumpido de hardware, de una manera similar a la re-mapping de la dirección de memoria estándar.
- El paging de memoria periférica puede ser apoyado por una IOMMU. Un periférico usando la extensión PCI-SIG PCIe Address Translation Services (ATS) Page Request Interface (PRI) puede detectar y señalar la necesidad de servicios de gestió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:
- Alguna degradación del rendimiento de la traducción y la gestión generales (p. ej., paseos de mesa de página).
- Consumo de memoria física para las tablas agregadas de página I/O (traducción). Esto se puede mitigar si las tablas se pueden compartir con el procesador.
- Con el fin de disminuir el tamaño de la tabla de página la granularidad de muchas IOMMUs es igual a la paging de memoria (a menudo 4096 bytes), y por lo tanto cada pequeño búfer que necesita protección contra el ataque DMA tiene que ser alineado página y cero antes de hacer visible al dispositivo. Debido a la complejidad de la asignación de la memoria del sistema operativo, esto significa que el controlador del dispositivo necesita utilizar buffers de rebote para las estructuras de datos sensibles y, por lo tanto, disminuir 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, normalmente 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 correlación entre las direcciones físicas del invitado y del host para la máquina virtual en cuestión. 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 según la misma tabla de traducción (o una compatible) que se utiliza para asignar las direcciones físicas del huésped a las direcciones físicas del host.
Especificaciones publicadas
- AMD ha publicado una especificación para la tecnología IOMMU, llamada AMD-Vi.
- IBM ofreció Programa de Control Extendido Soporte: Almacenamiento Virtual Extended (ECPS:VSE) modo en su línea 43xx; programas de canales utilizaron direcciones virtuales.
- Intel ha publicado una especificación para la tecnología IOMMU como Tecnología de Virtualización para I/O Dirigido, abreviado VT-d.
- La información sobre el Sol IOMMU ha sido publicada en la sección Acceso Virtual a la Memoria (DVMA) de la Conexión de Desarrolladores Solaris.
- The IBM Translation Control Entry (TCE) has been described in a document entitled Logical Partition Security in the IBM eServer pSeries 690.
- El PCI-SIG tiene trabajo relevante bajo los términos Single Root I/O Virtualization (SR-IOV) y Address Translation Services (ATS). Estos fueron anteriormente cubiertos en especificaciones distintas, pero a partir de PCI Express 5.0 se han trasladado a la especificación de la base de PCI Express.
- ARM define su versión de IOMMU como Unidad de Gestión de la Memoria del Sistema (SMMU) para complementar su arquitectura de Virtualización.
Véase también
- Arquitectura heterogénea del sistema (HSA)
- List of IOMMU-supporting hardware
- Memoria I/O
- Protección de memoria
Referencias
- ^ "Intel soporte de hardware de plataforma para la virtualización I/O". intel.com. 2006-08-10. Archivado desde el original el 30 de enero de 2007. Retrieved 2014-06-07.
- ^ "Desktop Boards: Compatibilidad con Intel Virtualization Technology (Intel VT)". intel.com. 2014-02-14. Retrieved 2014-06-07.
- ^ "Physical Address Extension — PAE Memory and Windows". Microsoft Windows Hardware Development Central. 2005. Retrieved 2008-04-07.
- ^ Muli Ben-Yehuda; Jimi Xenidis; Michal Ostrowski (2007-06-27). "Precio de seguridad: evaluación del rendimiento de IOMMU" (PDF). Procesos del Simposio Linux 2007. Ottawa, Ontario, Canada: IBM Research. Retrieved 2013-02-28.
- ^ "Xen FAQ: En DomU, ¿cómo puedo utilizar gráficos 3D". Archivado desde el original el 30 de marzo de 2012. Retrieved 2006-12.
- ^ "MD I/O Virtualization Technology (IOMMU) Specification Revision 2.0" (PDF)amd.com. 2011-03-24. Retrieved 2014-01-11.
- ^ "MD I/O Virtualization Technology (IOMMU) Especificación" (PDF). amd.com. Retrieved 2020-07-09.
- ^ IBM 4300 Processors Principles of Operation for ECPS:VSE Mode (PDF) (Primera edición). IBM. Enero de 1979. SA22-7070-0. Archivado desde el original (PDF) en 2012-03-14. Retrieved 2021-06-30.
- ^ "Intel Virtualization Technology for Directed I/O (VT-d) Architecture Specification" (PDF). Retrieved 2020-07-09.
- ^ "DVMA Resources and IOMMU Translations". Retrieved 2007-04-30.
- ^ "Logical Partition Security in the IBM eServer pSeries 690". Archivado desde el original el 10 de marzo de 2007. Retrieved 2007-04-30.
- ^ "PCI Express Base Specification". Retrieved 2023-01-18.
- ^ "ARM SMMU". Retrieved 2013-05-13.
- ^ "Extensiones de Virtualización ARM". Archivado desde el original el 2013-05-03. Retrieved 2013-05-13.
Enlaces externos
- Bottomley, James (2004-05-01). "Usando DMA". Linux Journal (121). Consultores especializados de sistemas. Archivado desde el original el 30 de junio de 2006. Retrieved 2006-08-09.
- Mastering the DMA and IOMMU APIs, Insertedded Linux Conference 2014, San Jose, by Laurent Pinchart