Общие сведения о месте расположения
Обзор
Сегодня драйвер пользовательского режима создает сведения о распределении и расположении исправлений вместе с каждым буфером команд, который он создает. Эти сведения используются диспетчером видеопамяли для двух целей:
- Список выделения и список расположений исправлений используются для исправления буферов команд с фактическими адресами сегментов перед их отправкой в обработчик графического процессора (GPU). Поддержка виртуальных адресов GPU в модели драйвера дисплея Windows (WDDM) версии 2 устраняет необходимость установки исправлений.
- Список выделения и список расположения исправлений используются диспетчером видеопамяти для управления местом размещения выделения. Диспетчер видеопамяти гарантирует, что все выделения, на которые ссылается буфер команд, будут выполняться до отправки буфера команд на выполнение для определенного подсистемы.
С появлением новой модели расположения место расположения перемещается в явный список на устройстве, а не в список буфера для каждой команды. Диспетчер видеопамяти гарантирует, что все выделения в определенном списке требований к месту расположения устройств будут отображаться до того, как будут запланированы на выполнение любых контекстов, принадлежащих этому устройству.
Для управления местом расположения драйвер пользовательского режима будет иметь доступ к двум новым интерфейсам драйвера устройств (DID), MakeResident и Evict, а также потребуется реализовать новый обратный вызов TrimResidency . MakeResident добавит одно или несколько выделений в список требований к месту расположения устройств. Выселение приведет к удалению одного из дополнительных выделений из этого списка. Обратный вызов TrimResidency будет вызываться диспетчером видеопамяти, когда ему требуется драйвер пользовательского режима для снижения требований к месту расположения.
MakeResident и Evict также были обновлены для сохранения внутреннего количества ссылок, то есть для нескольких вызовов MakeResident потребуется равное количество вызовов вытеснения для фактического вытеснения выделения.
В новой модели расположения список выделения буфера и расположения исправлений для каждой команды постепенно завершается. Хотя эти списки будут существовать в некоторых сценариях, они больше не будут иметь никакого контроля над местом проживания.
Важно Расположение в WDDM версии 2 контролируется исключительно списком требований к месту расположения устройств. Это верно для всех подсистем GPU и для каждого API.
Список фазовых выделений и расположений исправлений
Роль списка размещения и размещения исправлений будет значительно сокращена с появлением новой модели резидентства и фактически полностью уйдет с внедрением аппаратного планирования.
В модели планирования на основе пакетов список распределения будет по-прежнему существовать следующим образом:
- Для подсистем, которые не поддерживают виртуальные адреса GPU, список выделения и список расположения исправлений будут существовать, однако они будут использоваться исключительно для исправлений и больше не будут иметь никакого контроля над местом расположения. Список выделения и список расположений исправлений будут предоставляться как драйверу пользовательского режима, так и драйверу режима ядра в различных обычных DDIs, но любые ссылки на выделения, которые не являются резидентными, приведут к тому, что планировщик GPU отклонит отправку и приведет к ошибке (потеря) устройства. Этот режим работы считается устаревшим, и мы ожидаем, что все подсистемы GPU получат поддержку виртуальной адресации GPU в будущих выпусках оборудования. Ожидается, что этот режим работы будет удален в будущих версиях WDDM.
- Для подсистем, поддерживающих виртуальную адресацию GPU, добавляется новый флаг создания контекста (DXGK_CONTEXTINFO_NO_PATCHING_REQUIRED), указывающий, что для конкретного контекста не требуется исправление. Если этот флаг указан, список расположений исправлений не будет выделен, и будет выделен только очень небольшой список выделения (16 записей). Список выделения будет использоваться для отслеживания ссылок на запись на первичные поверхности и без каких-то других целей. Планировщик GPU должен знать, когда определенный буфер команд записывает данные на основную поверхность, чтобы он мог правильно синхронизировать выполнение этого буфера в отношении переворачивания, потенциально происходящего с основной поверхностью.
Аналогичным образом, список выделения используется в режиме ядра путь Present сегодня для передачи драйверу сведений об источнике и назначении операции Present . В этом контексте список распределения будет по-прежнему существовать для передачи параметров вокруг, однако он не будет использоваться для расположения. В GPU, для которых требуется установка исправлений, список выделения Present будет содержать сведения о предварительном исправлении, как это делается сегодня, и пакет Present будет повторно исправлен перед планированием, если какие-либо из ресурсов перемещаются в памяти между временем их постановки в очередь в планировщик и временем их выполнения на GPU.
В приведенной ниже таблице приведены сведения о том, когда драйвер WDDM версии 2 должен получать список расположений выделения и исправлений в различных DDIS драйвера и драйвера в режиме ядра.
Ядро GPU | Список распределения? | Список расположений исправлений? |
---|---|---|
Нет поддержки виртуальных адресов GPU (требуется установка исправлений, по умолчанию) | Да, полный размер, но чисто использовать для исправлений. Любая ссылка на выделение, которая не является резидентной, приведет к ошибке отправляющего устройства (потере) и отправке отклонено планировщиком. |
Да, полный размер. |
Поддержка виртуальных адресов GPU (DXGK_CONTEXTINFO_NO_PATCHING_REQUIRED флага) | Да, 16 записей. Ссылается на основную поверхность, если она есть, в которую записывается буфер команд. Используется планировщиком GPU для синхронизации с губами, происходящими на контроллере дисплея. Основная поверхность уже должна находиться в списке требований к месту расположения устройств, иначе ссылка будет отклонена. |
Нет |
Поддержка виртуальных адресов GPU + планирование оборудования | Нет | Нет |