Modelo de IoMmu
En esta página se describe el modelo de IoMmu introducido en WDDM 2.0. Consulte Aislamiento de GPU basado en IOMMU y Reasignación de DMA de IOMMU para obtener las actualizaciones más recientes de IOMMU.
Información general
Una unidad de administración de memoria de entrada y salida (IOMMU) es un componente de hardware 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.
El controlador de pantalla en modo kernel (KMD) expresa la compatibilidad con el modelo de IoMmu estableciendo los límites de 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 mostrarlas, 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.
- Admita el modelo de uso compartido de recursos de DirectX.
- Garantiza que las superficies principales sean visibles para el kernel y se asignen 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.