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


Виртуальная память GPU в WDDM 2.0

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

Введение

Прежде чем модель драйвера windows (WDDM) 2.0, интерфейс драйвера устройства (DDI) был создан таким образом, что обработчики GPU, как ожидается, будут ссылаться на память через физические адреса сегмента. Так как сегменты были общими для приложений и чрезмерно зафиксированы, ресурсы перемещены через свое время существования и их назначенные физические адреса изменились. Этот процесс требует отслеживания ссылок на память внутри буферов команд путем выделения и списков расположений исправлений. Затем эти буферы должны быть исправлены с правильной ссылкой на физическую память перед отправкой в обработчик GPU. Это отслеживание и исправление было дорогостоящим. По сути, он ввел модель планирования, в которой диспетчер памяти видео (VidMm) должен был проверить каждый пакет, прежде чем он может быть отправлен в подсистему.

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

Для этого WDDM поддерживает виртуальную адресацию GPU, начиная с WDDM 2.0. В этой модели каждый процесс получает уникальное пространство виртуального адреса GPU (GPUVA), в которое может выполняться каждый контекст GPU. Выделение, созданное или открытое процессом, получает уникальный GPUVA в виртуальном адресном пространстве GPU этого процесса. Эта назначенная GPUVA остается постоянной и уникальной для времени существования выделения. Таким образом, драйвер отображения в пользовательском режиме (UMD) может ссылаться на выделения через виртуальный адрес GPU, не беспокоясь о базовой физической памяти, изменяющейся в течение своего существования.

Отдельные подсистемы GPU могут работать в физическом или виртуальном режиме:

  • В физическом режиме модель планирования остается той же, что и с WDDM версии 1.x. UMD продолжает создавать списки расположений выделения и исправлений. Эти списки выделения отправляются с помощью буфера команд и используются для исправления буферов команд на фактические физические адреса перед отправкой в подсистему.

  • В виртуальном режиме подсистема ссылается на память с помощью виртуальных адресов GPU. UMD создает буферы команд непосредственно из пользовательского режима и использует новые службы для отправки этих команд в ядро. UMD не создает списки распределения или размещения исправлений, хотя она по-прежнему отвечает за управление расположением выделений. Дополнительные сведения об местонахождении водителя см. в разделе "Место жительства водителя" в WDDM 2.0.

Модели памяти GPU

WDDM версии 2 поддерживает две разные модели для виртуальной адресации GPU, GpuMmu и IoMmu. Драйвер должен принять участие в поддержке любой из моделей или обоих моделей. Один узел GPU может поддерживать оба режима одновременно.

Модель GpuMmu

В модели GpuMmu VidMm управляет единицей управления памятью GPU и базовыми таблицами страниц. VidMm также предоставляет службы UMD, которые позволяют управлять сопоставлением виртуальных адресов GPU с выделениями. GpuMmu подразумевает, что GPU использует таблицы страниц GPU для доступа к данным. Таблицы страниц могут указывать на системную память или локальную память устройства.

Дополнительные сведения см. в разделе "Модель GpuMmu".

Модель IoMmu

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

Дополнительные сведения см. в модели IoMmu.