Поделиться через


Модель GpuMmu

В этой статье описывается модель GpuMmu , представленная в Windows 10 (WDDM 2.0).

В модели GpuMmu GPU имеет собственную единицу управления памятью (MMU), которая преобразует виртуальные адреса GPU для каждого процесса в физические адреса.

Каждый процесс имеет отдельные виртуальные адресные пространства ЦП и GPU, использующие отдельные таблицы страниц. Диспетчер памяти видео (VidMm) управляет виртуальным адресным пространством GPU всех процессов. VidMm также отвечает за выделение, увеличение, обновление, обеспечение расположения и освобождение таблиц страниц. Аппаратный формат таблиц страниц, используемых MMU GPU, неизвестен VidMm и абстрагируется через интерфейсы драйверов устройств (DDIs). Абстракция поддерживает многоуровневую трансляцию, включая таблицу страниц фиксированного размера и таблицу корневых страниц с изменяемым размером.

Хотя VidMm отвечает за управление виртуальным адресным пространством GPU и его базовыми таблицами страниц, VidMm не назначает виртуальные адреса GPU выделениям памяти. Эта ответственность относится к драйверу пользовательского режима (UMD).

VidMm предлагает две основные службы для UMD:

  • Выделение памяти и распределение сделки. UMD может выделить видеопамять через существующий обратный вызов Allocate и освободить эту память с помощью существующего обратного вызова Deallocate. Выделение возвращает дескриптор выделения VidMm в UMD. Движок GPU может работать с этим объектом. Такое выделение относится специально к физической памяти видео, к которой обработчик GPU может получить доступ и обрабатывать через список выделения.

  • Управление виртуальным адресным пространством GPU. Для движков, работающих в виртуальном режиме, виртуальный адрес GPU должен быть явно назначен распределению, прежде чем к нему можно будет получить виртуальный доступ. Для этого VidMm предоставляет службам UMD возможность резервировать или освобождать виртуальные адреса GPU, а также отображать определенные диапазоны распределения в виртуальное адресное пространство GPU процесса. Эти сервисы являются гибкими и позволяют UMD детально контролировать виртуальное адресное пространство GPU процесса. UMD может решить либо назначить определенный виртуальный адрес GPU выделению, либо позволить VidMm автоматически выбрать доступный, при необходимости указав некоторые минимальные и максимальные ограничения виртуального адреса GPU. Одно выделение может иметь несколько сопоставлений виртуальных адресов GPU, а службы предоставляются в UMD для реализации контракта ресурса плитки.

Аналогичным образом, в конфигурации связанного графического адаптера UMD может явно сопоставить виртуальные адреса графического процессора с определенными экземплярами выделения. Для каждого сопоставления UMD может выбрать, должно ли сопоставление выполняться к самому себе или к определенному одноранговому GPU. В этой модели виртуальные адреса ЦП и GPU, назначенные выделению, независимы. UMD может решить сохранить их в обоих адресных пространствах или сохранить их независимо.

Виртуальные адреса GPU управляются логически с фиксированной гранулярностью страницы 4 КБ через интерфейс DDI. Виртуальные адреса GPU могут ссылаться на объекты выделения, которые находятся в памяти сегмента или системной памяти. Системная память управляется с 4 КБ физической степенью детализации, а сегменты памяти управляются с 4 КБ или 64 КБ по выбору драйвера. Все выделения VidMm выровнены, и их размер должен быть кратным размеру страницы, выбранной драйвером.

Доступ к недопустимому диапазону виртуальных адресов GPU приводит к нарушению доступа и прекращению контекста и (или) устройства, вызвавшего сбой доступа. Чтобы восстановиться после такой ошибки, VidMm инициирует сброс движка, который переводится в широкодиапазонное восстановление после тайм-аута адаптера (TDR), если это не удается.

Модель GpuMmu показана на следующей схеме:

Схема, показывающая модель GpuMmu со своими компонентами и взаимодействиями.