Compartir a través de


Modelo de IoMmu

En esta página se describe el modelo de IoMmu introducido en WDDM 2.0. Consulte El aislamiento de GPU basado en IOMMU y la reasignación de IOMMU DMA para obtener actualizaciones más recientes de IOMMU.

Información general

Una unidad de administración de memoria de entrada y salida (IOMMU) es un componente MMU que conecta un bus de E/S compatible con DMA a la memoria del sistema. Asigna direcciones virtuales visibles para dispositivos a direcciones físicas, por lo que resulta útil en la virtualización.

En el modelo de IoMMu de WDDM 2.0, cada proceso tiene un único espacio de direcciones virtuales que es:

  • Compartido entre la CPU y la GPU.
  • Administrado por el administrador de memoria del sistema operativo.

Para acceder a la memoria, la GPU envía una solicitud de datos a una IOMMU compatible. La solicitud incluye una dirección virtual compartida y un identificador de espacio de direcciones de proceso (PASID). La IOMMU realiza la traducción de direcciones mediante la tabla de páginas compartidas. Esta acción se ilustra en el diagrama siguiente.

Diagrama que muestra la traducción del espacio de direcciones del proceso IOMMU en WDDM 2.0.

El controlador de visualización en modo kernel (KMD) expresa la compatibilidad con el modelo ioMmu estableciendo los límites DXGK_VIDMMCAPS::IoMmuSupported. Cuando se establece esta marca, el administrador de memoria de vídeo (VidMm) registra automáticamente cualquier proceso mediante la GPU con la IOMMU y obtiene un PASID para ese espacio de direcciones de proceso. El PASID se pasa al controlador durante la creación del dispositivo.

VidMm asigna asignaciones principales en el segmento de apertura antes de mostrarse, asegurándose de que el controlador de pantalla tiene acceso físico a estas asignaciones.

En el modelo de IoMmu, el controlador de pantalla en modo de usuario (UMD) continúa asignando memoria de vídeo para la GPU mediante el servicio Allocate de VidMm. Este proceso permite que el UMD:

  • Siga el modelo de residencia.
  • Admite el modelo de uso compartido de recursos de DirectX.
  • Asegúrese de que las superficies principales son visibles para el kernel y se asignan a la apertura antes de mostrarse.

El UMD administra completamente el primer nivel de traducción (dirección de recurso de mosaico a la dirección de CPU o GPU compartida) en modo de usuario.