Microsoft стандартизует огромные объемы видеопамяти

20 Апр 2016

Microsoft стандартизует огромные объемы видеопамяти

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

О проблеме

Не удивительно, что дизайн видеоадаптеров, несущих на борту десятки гигабайт памяти, оптимизирован для работы в составе 64-битных вычислительных платформ, адресное пространство которых не ограничено величиной 4 Гигабайта (2 в 32 степени байт), характерной для 32-битных систем. В системе с 64-битной адресацией, создание диапазона для линейного и непрерывного доступа к 8-32 Гигабайтам видеопамяти является элементарной задачей для механизмов PCI PnP.

В случае 32-битной платформы, а также при запуске 32-битной ОС на 64-битном оборудовании, адресное пространство ограничено величиной 4 Гигабайта. Кроме видеопамяти, в этом же, весьма тесном по современным меркам, диапазоне размещается оперативная память (RAM), постоянная память, хранящая firmware платформы (BIOS ROM), регистры периферийных устройств, отображенные на память (memory-mapped I/O) и другие ресурсы. В результате, в типовом случае, в распоряжение видеоадаптера можно передать небольшое «окошко», размером не более 256 Мегабайт. Справедливости ради, отметим, что это ограничение касается исключительно канала взаимодействия между хост-платформой и видеоадаптером и не влияет на внутренний доступ графического процессора к бортовым ресурсам видеоадаптера, в этом случае доступна вся видеопамять.

Как обычно, задача состоит в том, чтобы использовать преимущества 64-битных систем и при этом обеспечить совместимость с 32-битными. Этого можно достичь, если размер диапазона, выделяемый видеоадаптеру сделать переменной величиной.

 

О решении

Надо сказать, что разработчики спецификации PCI Express уже достаточно давно выработали эффективное решение. В документе Resizable BAR Capability описан специальный регистровый блок, который является дополнением к классическому протоколу PCI PnP и позволяет управлять размером адресного диапазона, запрошенного видео адаптером.

Механизм универсален и может применяться для любого устройства, адресуемого в пространстве памяти. На практике, потребность в больших диапазонах имеет место в первую очередь для локального ОЗУ графического акселератора. Не случайно в заголовке документа, одним из спонсоров разработки данного дополнения к стандарту указана компания Advanced Micro Devices, ведущий производитель видео адаптеров.

Регистр Resizable BAR Control Register управляет размером диапазона адресного пространства, выделяемого устройству: адресация видео памяти является частным случаем работы такого механизма
Рис.1 Регистр Resizable BAR Control Register управляет размером диапазона адресного пространства, выделяемого устройству: адресация видео памяти является частным случаем работы такого механизма

Текущая ревизия спецификации лимитирует размер одного диапазона значением 512 гигабайт
Рис.2 Текущая ревизия спецификации лимитирует размер одного диапазона значением 512 гигабайт

Примечание. Напомним, что количество регистров PCI BAR равно 6, для декларации 64-битного диапазона нужно 2 регистра, а значит можно организовать 6/2=3 диапазона. Это значит, что теоретический максимум выделения пространства одному устройству (PCI-функции) составляет 3*512GB = 1.5TB. Пока достаточно...

Модель разделения обязанностей между firmware платформы и операционной системой, изложена на одной из страничек базы знаний MSDN.

Рекомендуемая последовательность инициализации такова.

  1. После старта, по умолчанию, видео адаптер находится в режиме совместимости с 32-битной платформой. Это означает, что требуемый размер «окошка» доступа к видео памяти близок к типовому значению 256 мегабайт.
  2. Firmware конфигурирует платформу в соответствии со спецификацией PCI PnP и Legacy-традициями. Диапазон доступа к видеопамяти размещается в пределах нижних 4 гигабайт адресного пространства, например D0000000h-DFFFFFFFh. Базовый адрес и размер диапазона могут несколько варьироваться от платформы к платформе. Эта конфигурация используется для работы с видео адаптером в среде UEFI и на начальных этапах загрузки ОС, за исключением некоторых UEFI приложений, обладающих «энтузиазмом» по изменению картирующего контекста.
  3. После загрузки и проверки аппаратно-программной конфигурации, 64-битная ОС перепрограммирует регистр Resizable BAR Control Register, вследствие чего «аппетит» видео адаптера с точки зрения использования адресного пространства, возрастает. На низком уровне это сводится к изменению положения границы между двумя битовыми полями регистра BAR (Base Address Register): доступным и недоступным для перезаписи.
  4. Чтобы привести в исполнение изменившиеся требования видеоадаптера к выделению системных ресурсов, ОС повторно выполняет конфигурационную процедуру PCI PnP. В идеале, система получает линейный и непрерывный доступ ко всей видеопамяти посредством окна, находящегося выше 4 гигабайт. В соответствии с топологией платформы, перенастройке необходимо подвергнуть не только ресурсы видеоадаптера, но и мосты PCI-to-PCI, обеспечивающие доступ к таким ресурсам.
 

Клиент всегда прав

Среди рекомендаций, ориентированных на разработчиков оборудования и системного программного обеспечения (Kernel Mode Development), нашлось место и трогательной заботе о простом пользователе. Софтверный гигант рекомендует, чтобы процесс перепрограммирования регистрового блока Resizable BAR Capability осуществлялся без мерцания экрана и прочих визуальных эффектов, создающих неудобства:

A GPU, supporting resizable BAR, must ensure that it can keep the display up and showing a static image during the reprogramming of the BAR. In particular, we don't want to see the display go blank and back up during this process.

Вместо послесловия

Одним из стимулов, подтолкнувших индустрию к необходимости линейного и непрерывного размещения ресурсов видео адаптера в адресном пространстве, явилось появление технологии DirectGMA в видео адаптерах разработки AMD.

Сравнение традиционной модели программирования видео адаптера, использующей транзитный буфер в системном ОЗУ и технологии DirectGMA (Direct Graphics Memory Access)
Рис.3 Этот пример характерен для современной видео студии. Сравнение традиционной модели программирования видео адаптера, использующей транзитный буфер в системном ОЗУ и технологии DirectGMA (Direct Graphics Memory Access). Во втором случае, устройство ввода-вывода изображений с интерфейсом SDI (Serial Digital Interface), непосредственно взаимодействует с ресурсами видео адаптера.

Как следует из диаграммы (Рис.3, правая диаграмма), видеопамять, размещенная в адресном пространстве, является объектом Bus-Master операций другого устройства. Обмен информацией между видеоадаптером (AMD FirePro) и платой ввода-вывода (SDI I/O Card) происходит в режиме peer-to-peer, без привлечения ресурсов хост-платформы (центрального процессора и системного ОЗУ). Очевидно, раскрытие потенциала такой технологии возможно только при полной доступности видео памяти в адресном пространстве.

Примечательно, что внедряя такую технологию AMD, в некотором роде конкурирует сама с собой, поскольку разработанная компанией архитектура HUMA (Heterogeneous Unified Memory Architecture) предполагает использование единой подсистемы оперативной памяти для CPU и GPU.