Модель IoMmu
На этой странице описывается модель IoMmu , представленная в WDDM 2.0. Дополнительные сведения о последних обновлениях IOMMU см. в разделе изоляции GPU на основе IOMMU и переназначивания IOMMU DMA.
Обзор
Единица управления памятью ввода-вывода (IOMMU) — это аппаратный компонент, который подключает шину ввода-вывода с поддержкой DMA к системной памяти. Он сопоставляет видимые устройства виртуальные адреса с физическими адресами, что делает его полезным в виртуализации.
В модели WDDM 2.0 IoMmu каждый процесс имеет одно виртуальное адресное пространство, то есть:
- Общий доступ между ЦП и GPU.
- Управляется диспетчером памяти ОС.
Для доступа к памяти GPU отправляет запрос данных в соответствующий IOMMU. Запрос включает общий виртуальный адрес и идентификатор адресного пространства процесса (PASID). IOMMU выполняет преобразование адресов с помощью общей таблицы страницы. Это действие показано на следующей схеме.
Драйвер отображения в режиме ядра (KMD) выражает поддержку модели IoMmu, задав DXGK_VIDMMCAPS::IoMmuSupported caps. Если этот флаг установлен, диспетчер памяти видео (VidMm) автоматически регистрирует любой процесс с помощью GPU с IOMMU и получает PASID для этого адресного пространства процесса. PASID передается драйверу во время создания устройства.
VidMm сопоставляет основные выделения в сегмент диафрагмы перед отображением, обеспечивая физический доступ контроллера дисплея к этим выделениям.
В модели IoMmu драйвер отображения пользовательского режима (UMD) продолжает выделять память видео для GPU с помощью службы "Выделение VidMm". Этот процесс позволяет UMD:
- Следуйте модели расположения.
- Поддержка модели общего доступа к ресурсам DirectX.
- Убедитесь, что первичные поверхности видны ядру и сопоставляются с диафрагмой перед отображением.
UMD полностью управляет первым уровнем перевода (адрес ресурса плитки на общий адрес ЦП или GPU) в пользовательском режиме.