
En informática , una unidad de gestión de memoria de entrada/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 (DMA) a la memoria principal . Al igual que una MMU tradicional, que traduce las direcciones virtuales visibles para la CPU a direcciones físicas , la IOMMU asigna direcciones virtuales visibles para el dispositivo (también llamadas direcciones de dispositivo o direcciones de E/S mapeadas en memoria en este contexto) a direcciones físicas. Algunas unidades también proporcionan protección de memoria contra dispositivos defectuosos o maliciosos.
Un ejemplo de IOMMU es la tabla de reasignación de direcciones gráficas (GART) utilizada por las tarjetas gráficas AGP y PCI Express en ordenadores 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 Platform Controller Hub (PCH), la virtualización de E/S no la realizaba la CPU, sino el chipset . [ 1 ] [ 2 ]
Ventajas
Las ventajas de tener una IOMMU, en comparación con el direccionamiento físico directo de la memoria (DMA), incluyen :
- 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. De este modo, en ocasiones se puede evitar el uso de E/S vectorizadas ( listas de dispersión-recolección ).
- Los dispositivos que no admiten direcciones de memoria lo suficientemente largas como para acceder a toda la memoria física aún pueden acceder a toda la memoria a través de la IOMMU, evitando así la sobrecarga asociada con la copia de búferes hacia y desde el espacio de memoria direccionable del periférico.
- Por ejemplo, los ordenadores 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 convencional simplemente no puede direccionar la memoria que supera los 4 GiB y, por lo tanto, no puede acceder a ella directamente. Sin una IOMMU, el sistema operativo tendría que implementar búferes de rebote que consumen mucho tiempo (también conocidos como búferes dobles [ 3 ] ).
- La memoria está protegida contra dispositivos maliciosos que intentan ataques DMA y contra dispositivos defectuosos que intentan transferencias de memoria erróneas, ya que un dispositivo no puede leer ni escribir en memoria que no le haya sido asignada explícitamente. Esta protección se basa en el hecho de que el sistema operativo que se ejecuta en la CPU (véase la figura) controla exclusivamente tanto la MMU como la IOMMU. Los dispositivos no pueden eludir ni corromper físicamente las tablas de gestión de memoria configuradas.
- En la virtualización , los sistemas operativos invitados pueden usar hardware que no está diseñado específicamente para la virtualización. El hardware de alto 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 fallos en los dispositivos DMA. La IOMMU gestiona esta reasignación, lo que permite usar los controladores de dispositivo nativos en el sistema operativo invitado.
- En algunas arquitecturas, la IOMMU también realiza una reasignación de interrupciones de hardware , de forma similar a la reasignación estándar de direcciones de memoria.
- La paginación de memoria periférica puede ser compatible con una IOMMU. Un periférico que utilice 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.
En arquitecturas de sistema donde la E/S de puerto constituye un espacio de direcciones distinto al del espacio de direcciones de memoria, no se utiliza una IOMMU cuando la CPU se comunica con los dispositivos a través de los puertos de E/S . En arquitecturas de sistema donde la E/S de puerto y la memoria se asignan a un espacio de direcciones adecuado, una IOMMU puede traducir los accesos a la E/S de puerto.
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 la sobrecarga de traducción y gestión (por ejemplo, recorridos de tablas de páginas).
- Consumo de memoria física para las tablas de páginas de E/S (traducción) añadidas . Esto se puede mitigar si las tablas se comparten 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 memoria (a menudo 4096 bytes). 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 el dispositivo lo vea. 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, lo que reduce 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 desconoce las direcciones físicas de memoria del host a las que accede. Esto dificulta el acceso directo al hardware del ordenador, ya que si el sistema operativo invitado intentara indicarle al hardware que realizara un acceso directo a memoria (DMA) utilizando las direcciones físicas del invitado, probablemente corrompería la memoria, puesto que el hardware desconoce la correspondencia entre las direcciones físicas del invitado y del host para dicha máquina virtual. Esta corrupción puede evitarse si el hipervisor o el sistema operativo anfitrión intervienen en la operación de E/S para aplicar las traducciones. Sin embargo, este método conlleva un retraso en la operación de E/S.
Una 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 direcciones físicas de invitados a direcciones físicas de host. [ 5 ]
Especificaciones publicadas
- AMD ha publicado una especificación para la tecnología IOMMU, llamada AMD-Vi . [ 6 ] [ 7 ]
- IBM ofreció el modo Extended Control Program Support: Virtual Storage Extended (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 ]
- Se ha publicado información sobre la IOMMU de Sun en la sección de Acceso a la 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 el IBM eServer pSeries 690. [ 11 ]
- El PCI-SIG cuenta con 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). Estos temas anteriormente se cubrían 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 administración de memoria del sistema (SMMU) [ 13 ] para complementar su arquitectura de virtualización. [ 14 ]
Véase también
Referencias
- ↑ "Soporte de hardware de la plataforma Intel para virtualización de E/S" . intel.com. 10 de agosto de 2006. Archivado del original el 20 de enero de 2007. Consultado el 7 de junio de 2014 .
- ↑ "Placas base de escritorio: compatibilidad con la tecnología de virtualización de 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" . Centro 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). "El precio de la seguridad: evaluación del rendimiento de IOMMU" (PDF) . Actas del Simposio Linux 2007. Ottawa, Ontario, Canadá: IBM Research . Consultado el 28 de febrero de 2013 .
- ↑ "Preguntas frecuentes sobre Xen: ¿Cómo puedo usar gráficos 3D en DomU?" . Archivado del original el 23 de abril de 2005. Consultado el 12 de diciembre de 2006 .
- ↑ "Especificación de la tecnología de virtualización de E/S de AMD (IOMMU), revisión 2.0" (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 del original (PDF) el 14 de marzo de 2012. Consultado el 30 de junio de 2021 .
- ↑ "Especificación de la arquitectura de la tecnología de virtualización de Intel para E/S dirigidas (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 el IBM eServer pSeries 690" . Archivado del original el 10 de marzo de 2007. Consultado el 30 de abril de 2007 .
- ↑ "Especificación base 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 del original el 3 de mayo de 2013. Consultado el 13 de mayo de 2013 .
Enlaces externos
- Bottomley, James (1 de mayo de 2004). "Uso de DMA" . Linux Journal (121). Consultores de sistemas especializados . Archivado del original el 15 de julio de 2006. Recuperado el 9 de agosto de 2006 .
- Dominando las API de DMA e IOMMU , Conferencia de Linux Embebido 2014, San José, por Laurent Pinchart
- Gestión de la memoria
- Periféricos de computadora