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 (con capacidad DMA) a la memoria principal . Como una MMU tradicional, lo que se traduce CPU -Visible direcciones virtuales a direcciones físicas , la IOMMU los mapas de direcciones de dispositivos visible virtuales (también llamadas direcciones de los dispositivos o direcciones E / S en este contexto) en direcciones físicas. Algunas unidades también brindan protección de memoria contra dispositivos defectuosos o maliciosos.
Un ejemplo de IOMMU es la tabla de reasignación de direcciones de gráficos (GART) utilizada por las tarjetas gráficas AGP y PCI Express en computadoras con arquitectura Intel y AMD.
En la arquitectura x86, antes de dividir la funcionalidad de northbridge y southbridge entre la CPU y el Platform Controller Hub (PCH), la virtualización de E / S no la realizaba la CPU sino el conjunto de chips . [1] [2]
Ventajas
Las ventajas de tener una 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 la necesidad de estar contiguas en la memoria física: el IOMMU asigna direcciones virtuales contiguas a las direcciones físicas fragmentadas subyacentes. Por lo tanto, en ocasiones se puede evitar el uso de E / S vectorizadas ( listas de dispersión y recopilación ).
- Los dispositivos que no admiten direcciones de memoria el tiempo suficiente para direccionar toda la memoria física pueden seguir direccionando toda la memoria a través de la IOMMU, evitando los gastos generales asociados con la copia de búferes 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 ordinario de 32 bits simplemente no puede direccionar la memoria por encima del límite de 4 GiB y, por lo tanto, no puede acceder directamente a ella. Sin una IOMMU, el sistema operativo tendría que implementar memorias intermedias de rebote que consumen mucho tiempo (también conocidas como memorias intermedias 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 o escribir en la memoria que no se 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 (ver figura) controla exclusivamente tanto la MMU como la IOMMU. Los dispositivos son físicamente incapaces de 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 vuelve a asignar todas las direcciones de memoria, lo que provoca que los dispositivos DMA fallen. La IOMMU maneja 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 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 administración de memoria.
Para arquitecturas de sistema en el que el puerto I / O es un espacio de direcciones diferente del espacio de direcciones de memoria, un IOMMU no se utiliza cuando las comunica CPU con dispositivos a través de los puertos de E / S . En arquitecturas de sistema en las que la E / S de puerto y la memoria se asignan a un espacio de direcciones adecuado, una IOMMU puede traducir los accesos de 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 administración (por ejemplo, recorridos por la tabla de páginas).
- Consumo de memoria física para las tablas de página de E / S agregadas (traducción) . Esto se puede mitigar si las tablas se pueden compartir con el procesador.
Virtualización
Cuando un sistema operativo se ejecuta dentro de una máquina virtual , incluidos los sistemas que usan 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, ya que si el sistema operativo invitado intentara instruir al hardware para que realizara un acceso directo a la memoria (DMA) utilizando direcciones físicas de invitado, probablemente dañaría la memoria, ya que el hardware no conoce el mapeo entre las direcciones físicas del huésped y físicas del host para la máquina virtual dada. La corrupción se puede evitar si el hipervisor o el sistema operativo del host intervienen en la operación de E / S para aplicar las traducciones. Sin embargo, este enfoque incurre en 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 una 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]
- Intel ha publicado una especificación para la tecnología IOMMU como Tecnología de virtualización para E / S dirigida, abreviado VT-d . [8]
- Se ha publicado información sobre Sun IOMMU en la sección Acceso a la memoria virtual del dispositivo (DVMA) de Solaris Developer Connection. [9]
- El IBM entrada de control de la traducción (TCE) ha sido descrita en un documento titulado Seguridad de particiones lógicas en el IBM eServer pSeries 690. [10]
- El PCI-SIG tiene trabajos relevantes bajo los términos de virtualización de E / S (IOV) [11] y servicios de traducción de direcciones (ATS).
- ARM define su versión de IOMMU como System Memory Management Unit (SMMU) [12] para complementar su arquitectura de virtualización. [13]
Ver también
- Arquitectura de sistema heterogénea (HSA)
- Lista de hardware compatible con IOMMU
- E / S mapeadas en memoria
- Protección de la memoria
Referencias
- ^ "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 .
- ^ "Desktop Boards: 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 rendimiento de IOMMU" (PDF) . Actas del Simposio de Linux 2007 . Ottawa, Ontario, Canadá: IBM Research . Consultado el 28 de febrero de 2013 .
- ^ "Preguntas frecuentes de 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 de la especificación 2.0 de la tecnología de virtualización de E / S de AMD (IOMMU)" (PDF) . amd.com. 2011-03-24 . 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 .
- ^ "Tecnología de virtualización Intel para la especificación de arquitectura de E / S dirigida (VT-d)" (PDF) . Consultado el 9 de julio de 2020 .
- ^ "Recursos DVMA y Traducciones IOMMU" . Consultado el 30 de abril de 2007 .
- ^ "Seguridad de partición lógica en IBM eServer pSeries 690" . Consultado el 30 de abril de 2007 .
- ^ "Especificaciones de virtualización de E / S" . Consultado el 1 de mayo de 2007 .
- ^ "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 .
enlaces externos
- Bottomley, James (1 de mayo de 2004). "Utilizando DMA" . Diario de Linux . Consultores de sistemas especializados (121). Archivado desde el original el 15 de julio de 2006 . Consultado el 9 de agosto de 2006 .
- Dominar las API de DMA e IOMMU , Embedded Linux Conference 2014, San José, por Laurent Pinchart