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


Обзор резидентуры

Обзор

Сегодня драйвер пользовательского режима создает список сведений о выделении и расположении правок вместе с каждым командным буфером, который он формирует. Эти сведения используются диспетчером памяти видео для двух целей:

  • Список распределения и список мест исправлений используются для исправления буферов команд с фактическими адресами сегментов перед отправкой в графический процессор (GPU). Поддержка виртуального адреса GPU в модели драйвера Windows (WDDM) версии 2 устраняет необходимость в этом исправлении.
  • Список выделения и список местоположений патчей используются диспетчером памяти видео для управления размещением выделенных ресурсов. Диспетчер видеопамяти гарантирует, что все выделения памяти, на которые ссылается буфер команд, делаются резидентными перед его отправкой на выполнение для конкретного движка.

При внедрении новой модели управления резидентами, резидентность переносится в явный список на вычислительном устройстве вместо списка буферов команд. Диспетчер видео памяти гарантирует, что все выделения в списке требований к резидентности для устройства будут резидентными перед тем, как любые контексты, принадлежащие этому устройству, будут запланированы на выполнение.

Для управления размещением драйвер пользовательского режима будет иметь доступ к двум новым интерфейсам драйверов устройств (DDIs), MakeResident и Evict, а также потребуется реализовать новый обратный вызов TrimResidency. MakeResident добавит одно или несколько выделений в список требований к резидентности устройства. вытеснение приведет к удалению одного из нескольких выделений из этого списка. Обратный вызов TrimResidency будет вызываться диспетчером видеопамяти, когда необходимо, чтобы драйвер пользовательского режима уменьшил свои требования к резидентности памяти.

MakeResident и Evict также были обновлены, чтобы сохранить внутреннее число ссылок, то есть для нескольких вызовов MakeResident потребуется равное количество вызовов Evict для фактического освобождения памяти.

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

Важное резиденции в WDDM версии 2 управляется исключительно списком требований к месту размещения устройства. Это верно для всех движков GPU и для каждого API.

Постепенный отказ от списка размещений выделения и исправлений

Роль списка выделения и расположения патчей значительно сокращается с введением новой модели резидентности и фактически полностью исчезнет с введением аппаратного планирования.

В модели планирования на основе пакетов список выделений будет продолжать существовать следующим образом:

  • Для двигателей, которые не поддерживают виртуальную адресацию GPU, список выделения памяти и список мест исправлений будут продолжать существовать, однако они будут использоваться исключительно для исправления и больше не будут иметь никакого контроля над жизненным циклом в памяти. Список выделений и список расположений исправлений будет предоставлен как драйверу пользовательского режима, так и драйверу режима ядра в различных стандартных интерфейсах DDI, но любые ссылки на выделения, которые не являются резидентными, заставят планировщик GPU отклонить отправку и перевести устройство в состояние ошибки (утеряно). Этот режим работы считается устаревшим, и мы ожидаем, что все подсистемы GPU будут поддерживать виртуальную адресацию GPU в будущих аппаратных выпусках. Ожидается, что этот режим операции будет удален в будущих версиях WDDM.
  • Для обработчиков, поддерживающих виртуальную адресацию GPU, добавляется новый флаг создания контекста (DXGK_CONTEXTINFO_NO_PATCHING_REQUIRED) для указания того, что конкретный контекст не требует исправления. Если этот флаг указан, список расположений исправлений не будет выделен, и будет выделен только очень небольшой список распределения (16 записей). Список выделения будет использоваться для отслеживания ссылок на запись на первичные поверхности и не для других целей. Планировщику GPU необходимо знать, когда конкретный буфер команд записывает данные в основную поверхность, чтобы он мог правильно синхронизировать выполнение этого буфера с возможным обновлением экрана основной поверхности.

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

В таблице ниже приводится информация о том, когда драйвер WDDM версии 2 должен ожидать получения списка размещений и списков мест исправлений в различных DDIs драйверов пользовательского режима и драйверов режима ядра.

Обработчик GPU Список распределения? Список местоположений патчей?
Нет поддержки виртуальных адресов GPU (требуется патчинг, по умолчанию)

Да, полный размер, но исключительно используется в целях исправления.

Любая ссылка на выделение, которое не находится в памяти, приведет к тому, что устройство будет переведено в состояние ошибки (потеряно), а отправка будет отклонена планировщиком.
Да, полный размер.
Поддержка виртуальных адресов GPU (флагDXGK_CONTEXTINFO_NO_PATCHING_REQUIRED установлен)

Да, 16 записей.

Ссылается на основную поверхность, если она есть, в которую записываются данные с помощью буфера команд. Используется планировщиком GPU для синхронизации с губами, происходящими на контроллере дисплея. Основная поверхность должна уже быть в списке требований к местоположению устройства, иначе ссылка будет отклонена.
Нет
Поддержка виртуальных адресов GPU и планирование оборудования Нет Нет