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


Модель GpuMmu

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

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

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

Диспетчер видеопаметь предлагает два набора служб для драйвера пользовательского режима. Во-первых, драйвер пользовательского режима может выделять видеопамяти через существующий обратный вызов Allocate и освобождать эту память с помощью существующего обратного вызова Отмены выделения . Как и в настоящее время, это возвращает драйвер пользовательского режима дескриптор для выделения диспетчера видеопамяти, с которым может работать обработчик GPU. Такое выделение представляет только физическую часть выделения, на которое может ссылаться подсистема, работающая физически, с помощью ссылки на список выделения.

Для ядров, работающих в виртуальном режиме, виртуальный адрес GPU необходимо явно назначить выделению, прежде чем к нему можно будет получить виртуальный доступ. Для этого диспетчер видеопаметь предлагает службы драйвера пользовательского режима для резервирования или освобождения виртуальных адресов GPU, а также для сопоставления определенных диапазонов выделения с виртуальным адресным пространством GPU процесса. Эти службы являются очень гибкими и позволяют драйверу пользовательского режима точно контролировать виртуальное адресное пространство ПРОЦЕССА GPU. Драйвер пользовательского режима может либо назначить выделение определенного виртуального адреса GPU, либо позволить диспетчеру видеопаметь автоматически выбрать доступный, возможно, указав минимальный и максимальный виртуальный адрес GPU. Одно выделение может иметь несколько сопоставлений виртуальных адресов GPU, и службы предоставляются драйверу пользовательского режима для реализации контракта ресурса плитки.

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

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

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

Модель GpuMmu показана ниже.

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