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 и пла­той ввода-вывода (SDI I/O Card) происходит в режиме peer-to-peer, без привлечения ресурсов хост-платформы (цен­т­раль­ного процессора и системного ОЗУ). Очевидно, раскрытие потенциала такой технологии возможно толь­ко при полной доступности видео памяти в адресном пространстве.

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

Теги: