Unidad de gestión de memoria de entrada/salida

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda
Comparación de la unidad de gestión de memoria de E/S (IOMMU) con la unidad de gestión de memoria (MMU).

En informática, una unidad de gestión de memoria de entrada y salida (input–output memory management unit, acrónimo IOMMU) es una unidad de gestión de memoria (MMU) que conecta un bus de E/S con capacidad de acceso directo a memoria (compatible con DMA) a la memoria principal. Al igual que una MMU tradicional, que traduce direcciones virtuales visibles de CPU a direcciones físicas, IOMMU correlaciona direcciones virtuales visibles de dispositivo (también llamadas direcciones de dispositivo o direcciones de E/S en este contexto) a direcciones físicas. Algunas unidades también brindan protección de memoria contra dispositivos defectuosos o maliciosos.

AGP y PCI Express en Intel Architecture y las computadoras AMD.Un ejemplo de IOMMU es la tabla de reasignación de direcciones gráficas (GART) utilizada por las tarjetas gráficas

En la arquitectura x86, antes de dividir la funcionalidad de northbridge y southbridge entre la CPU y Platform Controller Hub (PCH), la virtualización de E/S no fue realizada por la CPU, sino por el conjunto de chips.[1][2]

Ventajas[editar]

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 la necesidad de que sean contiguas en la memoria física: el 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.
  • 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 la IOMMU, evitando los gastos indirectos asociados con la copia de almacenamientos intermedios hacia y desde el espacio de memoria direccionable del periférico.
    • Por ejemplo, las computadoras x86 pueden administrar más de 4 gigabytes de memoria con la función Extensión de dirección física (PAE) en un procesador x86. Aun así, un dispositivo PCI ordinario de 32 bits simplemente no puede direccionar la memoria por encima del límite 4 GiB, y por lo tanto no puede acceder directamente a él. Sin una IOMMU, el sistema operativo tendría que implementar bounce buffers que consumen tiempo (también conocidos como búfers dobles[3]​).
  • La memoria está protegida contra los 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 memoria se basa en el hecho de que el SO 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 dañar las tablas configuradas de administración de memoria.
    • En virtualización, los sistemas operativos invitados pueden usar hardware que no está específicamente diseñado para la virtualización. El hardware de mayor rendimiento, como las tarjetas gráficas, usa DMA para acceder directamente a la memoria; en un entorno virtual, todas las direcciones de memoria son reasignadas por el software de la máquina virtual, lo que hace que los dispositivos DMA fallen. IOMMU maneja esta reasignación, permitiendo que los controladores de dispositivos nativos se usen en un sistema operativo invitado.
  • En algunas arquitecturas, IOMMU también realiza reasignaciones de interrupciones de hardware, de forma similar a la reasignación de direcciones de memoria estándar.
  • La paginación de la memoria periférica puede ser apoyada por un IOMMU. Un periférico que usa 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.

Para las arquitecturas de sistema en las que los puertos 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 E/S. En las arquitecturas de sistema en las que los puertos E/S y la memoria se asignan en un espacio de direcciones adecuado, una IOMMU puede traducir las direcciones de puerto E/S.

Desventajas[editar]

Las desventajas de tener una IOMMU, en comparación con el direccionamiento físico directo de memoria, incluyen:[4]

  • Degradación del rendimiento por sobrecarga de traducción y administración (por ejemplo, paseos de tablas de paginación).
  • Consumo de memoria física para las tablas página E/S añadidas. Esto puede mitigarse si las tablas se pueden compartir con el procesador.

Virtualización[editar]

Cuando un sistema operativo se ejecuta dentro de una máquina virtual, incluidos los sistemas que utilizan paravirtualización, como Xen, por lo general no conocen las direcciones físico-host de la memoria a las que accede. Esto dificulta el acceso directo al hardware, ya que si el sistema operativo invitado intenta instruir al hardware para que realice un acceso directo a la memoria (DMA) usando direcciones físicas de invitado, es probable que corrompa la memoria, ya que el hardware no lo sabe. la asignación entre las direcciones físico-huésped y física del host para la máquina virtual dada. La corrupción se evita porque el hipervisor o el sistema operativo host interviene en la operación de E / S para aplicar las traducciones, lo que provoca un retraso en la operación de E/S.

Un IOMMU puede resolver este problema reasignando las direcciones a las que accedió 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 invitado a las direcciones físicas del host.[5]

Publicaciones específicas[editar]

  • AMD ha publicado una especificación para la tecnología IOMMU.[6][7]
  • Intel ha publicado una especificación para tecnología IOMMU como Virtualization Technology for Directed I/O (VT-d).[8]
  • Se ha publicado información sobre el IOMMU de Sun IOMMU en la sección Acceso a la memoria virtual del dispositivo (DVMA) de Solaris Developer Connection.[9]
  • IBM Translation Control Entry (TCE) se ha descrito en un documento titulado Seguridad de partición lógica en IBM eServer pSeries 690.[10]
  • El PCI-SIG tiene un trabajo relevante bajo los términos I/O Virtualization (IOV)[11]​ y Address Translation Services (ATS).
  • ARM define su versión de IOMMU como System Memory Management Unit (SMMU)[12]​ para complementar su arquitectura de virtualización[13]

Véase también[editar]

Referencias[editar]

  1. «Intel platform hardware support for I/O virtualization». intel.com. 10 de agosto de 2006. Archivado desde el original el 20 de enero de 2007. Consultado el 7 de junio de 2014. 
  2. «Desktop Boards: Compatibility with Intel Virtualization Technology (Intel VT)». intel.com. 14 de febrero de 2014. Consultado el 7 de junio de 2014. 
  3. «Physical Address Extension — PAE Memory and Windows». Microsoft Windows Hardware Development Central. 2005. Consultado el 7 de abril de 2008. 
  4. Referencia vacía (ayuda) 
  5. «Xen FAQ: In DomU, how can I use 3D graphics». Archivado desde el original el 2 de octubre de 2008. Consultado el 12 de diciembre de 2006. 
  6. «AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.0» (PDF). amd.com. 24 de marzo de 2011. Consultado el 11 de enero de 2014. 
  7. «AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.62» (PDF). amd.com. 2 de marzo de 2015. Consultado el 5 de enero de 2016. 
  8. «Intel Virtualization Technology for Directed I/O (VT-d) Architecture Specification» (PDF). Consultado el 17 de febrero de 2016. 
  9. «DVMA Resources and IOMMU Translations». Consultado el 30 de abril de 2007. 
  10. «Logical Partition Security in the IBM eServer pSeries 690». Consultado el 30 de abril de 2007. 
  11. «I/O Virtualization specifications». Consultado el 1 de mayo de 2007. 
  12. «ARM SMMU». Consultado el 13 de mayo de 2013. 
  13. «ARM Virtualization Extensions». Archivado desde el original el 3 de mayo de 2013. Consultado el 13 de mayo de 2013. 

Enlaces externos[editar]