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

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

О проблеме

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

В случае 32-битной платформы, а также при запуске 32-битной ОС на 64-битном оборудовании, адресное про­ст­ран­ство ограничено величиной 4 Гигабайта. Кроме видеопамяти, в этом же, весьма тесном по со­вре­мен­ным мер­кам, ди­а­па­зо­не размещается оперативная память (RAM), постоянная память, хранящая firm­ware платформы (BIOS ROM), ре­гист­ры периферийных устройств, отображенные на память (memory-map­ped 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. BIOS конфигурирует платформу в соответствии со спецификацией PCI PnP и Legacy-тра­ди­ци­я­ми. Ди­а­па­зон до­сту­па к ви­де­о­па­мя­ти раз­ме­ща­ет­ся в пределах нижних 4 GB, на­при­мер, D0000000h...DFFFFFFFh. Ба­зо­вый ад­рес и размер диапазона могут не­сколь­ко варь­и­ро­вать­ся от платформы к платформе. Эта кон­фи­гу­ра­ция ис­поль­зу­ет­ся для работы с ви­део адап­те­ром в среде UEFI и на начальных этапах загрузки ОС, за ис­клю­че­ни­ем не­ко­то­рых UEFI при­ло­же­ний, обладающих «энтузиазмом» по изменению кар­ти­ру­ю­ще­го кон­тек­с­та.
  3. После загрузки и проверки аппаратно-программной конфигурации, 64-битная ОС пе­ре­про­грам­ми­ру­ет регистр Resizable BAR Control Register, вследствие чего «аппетит» видео адаптера с точ­ки зрения использования адресного пространства, возрастает. На низком уровне это сводится к из­ме­не­нию положения границы меж­ду дву­мя би­то­вы­ми по­ля­ми регистра BAR (Base Address Register): доступным и недоступным для перезаписи.
  4. Чтобы привести в исполнение изменившиеся требования видеоадаптера к выделению системных ре­сур­сов, ОС повторно выполняет конфигурационную процедуру PCI PnP. В идеале, система по­лу­ча­ет ли­ней­ный и не­пре­рыв­ный доступ ко всей видеопамяти посредством окна, на­хо­дя­ще­го­ся вы­ше 4 GB. В соответствии с то­по­ло­ги­ей плат­фор­мы, перенастройке не­об­хо­ди­мо под­верг­нуть не толь­ко ресурсы видеоадаптера, но и мосты PCI-to-PCI, обес­пе­чи­ва­ю­щие доступ к таким ре­сур­сам.

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

Среди рекомендаций, ориентированных на разработчиков оборудования и системного программного обес­пе­че­ния (Ker­nel Mode De­ve­lop­ment), нашлось место и трогательной заботе о простом пользователе. Соф­т­вер­ный гигант ре­ко­мен­ду­ет, чтобы процесс пе­ре­про­г­рам­ми­ро­ва­ния регистрового блока Re­siz­able 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 GPU и пла­той SDI I/O Card про­ис­хо­дит в режиме peer-to-peer, без привлечения ресурсов хост-платформы (CPU и системного ОЗУ). Очевидно, раскрытие потенциала такой технологии возможно толь­ко при полной доступности видео памяти в ад­рес­ном про­ст­ран­с­т­ве.

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