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

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

Введение

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

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

Для этого WDDM поддерживает виртуальную адресацию GPU, начиная с WDDM 2.0. В этой модели каждый процесс получает уникальное пространство виртуального адреса GPU (GPUVA), в которое может выполняться каждый контекст GPU. Выделение, созданное или открытое процессом, получает уникальный виртуальный адрес 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 подходит для интегрированных ГПУ. IoMmu предоставляет более простую модель программирования, где GPU и ЦП могут использовать один и тот же указатель для доступа к памяти. Нет необходимости управлять отдельным набором таблиц страниц в памяти с поддержкой GPU. Тем не менее модель IoMmu может привести к снижению производительности из-за затрат на перевод адресов и управление.

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