AMD R7 370: скрытые стороны прогресса

17 Июл 2016

AMD R7 370: скрытые стороны прогресса

Исследование разнообразных компьютерных новинок в тестовых лабораториях сегодня упрощено и даже унифицировано в силу наличия огромного количества готовых информационно-диагностических утилит. При всей простоте и удобстве таких продуктов, некоторые тонкости неизбежно ускользают от исследователя. Тестовая лаборатория «Компостера» представляет серию экспериментов по вычитыванию и анализу регистровых полей видео адаптера с помощью программного обеспечения собственной разработки. Насколько в данном случае цель оправдала средства, судить читателю.


Постановка задачи

Исследовать будем связанный список регистровых полей PCI Express Extended Capabilities, находящийся в расширенной части конфигурационного пространства видео адаптера AMD R7 370. Это список поддерживаемых технологий и декларация функциональности устройства, формализованная согласно документу PCI Express Specification.

В частности, попробуем найти регистровые блоки, управляющие адресацией огромных объемов видеопамяти. Описание похожего опыта, проведенного с помощью утилиты RU.EFI и некоторые теоретические сведения можно почерпнуть здесь.

 

Протокол эксперимента

Целью является получение дампа конфигурационных регистров. В отличие от Legacy PCI устройств, снабженных регистровыми блоками размером 256 байт на PCI-функцию, функции PCIe/PCIX представлены блоками по 4096 байт. Именно необходимость доступа к «верхним» регистрам обусловила неприменимость ряда готовых утилит и потребовала дополнительных операций, выполненных вручную.

Основой адресации конфигурационного пространства в современных платформах является механизм MCFG (memory mapped configuration). Для заданного PCIe устройства, адрес его регистрового блока, отображенного на память равен сумме базового адреса диапазона MCFG (декларируемого средствами ACPI) и смещения внутри блока, вычисляемого на основании адреса устройства в координатах Bus, Device, Function (номера шины, устройства и функции).

Найдем ACPI таблицу MCFG, декларирующую одноименный диапазон и его базовый адрес. Как видим, адрес таблицы BD3B1AD0h.

Базовый адрес ACPI таблицы MCFG равен BD3B1AD0h
Рис.1 Базовый адрес ACPI таблицы MCFG равен BD3B1AD0h

Таблица содержит базовый адрес диапазона MCFG, в нашем примере он равен E0000000h.

Базовый адрес диапазона MCFG равен E0000000h
Рис.2 Базовый адрес диапазона MCFG равен E0000000h

Адрес видео адаптера Bus=1, Device=0, Function=0 может быть получен и с помощью известных утилит, например AIDA64. Подтвердим наличие видео адаптера по этому адресу. Идентификаторы Vendor ID = 1002h, Device ID = 6811h, это соответствует Radeon R7 370.

Идентификаторы: Vendor ID = 1002h, Device ID = 6811h
Рис.3 Идентификаторы: Vendor ID = 1002h, Device ID = 6811h

Итак, базовый адрес диапазона MCFG равен E0000000h. Смещение регистрового блока видео адаптера внутри блока равно: Bus*1MB + Device*32KB + Function*4KB = 1MB = 00100000h. Результирующий адрес: E0000000h + 00100000h = E0100000h.

Для самопроверки, сначала выведем дамп стандартных регистров и убедимся в том, что блок начинается с кодов Vendor ID=1002h, Device ID=6811h, байты в которых переставлены по правилам little-endian порядка, принятого в архитектуре x86.

Просмотр стандартных регистров, начиная с адреса 0
Рис.4 Просмотр стандартных регистров, начиная с адреса 0

Далее, перейдем непосредственно к объекту исследования, а именно регистрам расширенного блока. В нашем примере, связанный список (Linked List) Capability структур занимает часть 4-килобайтного блока, поэтому нам достаточно двух окон дампа по адресам 0100h и 0200h.

Просмотр расширенных регистров, начиная с адреса 0100h
Рис.5 Просмотр расширенных регистров, начиная с адреса 0100h

Продолжение просмотра расширенных регистров, адрес 0200h
Рис.6 Продолжение просмотра расширенных регистров, адрес 0200h

Список расположен с фиксированного адреса 0100h. Каждая структура начинается заголовком, размер которого 4 байта, то есть 32 бита. Два младших байта образуют идентификатор Extended Capability ID, по которому мы будем распознавать и систематизировать найденные структуры. Биты 19-16 определяют номер версии. А биты 31-20 содержат 12-разрядный указатель на следующую структуру или нуль, если эта структура последняя.

Например, 4 байта по адресу 0100h:

  • 0Bh 00h 01h 15h образуют 32-битное слово 1501000Bh.
  • Extended Capability ID = 000Bh
  • Version = 1
  • Pointer to next structure = 150h

Последовательно применяя описанное правило, пройдем всю цепочку. А используя документацию и поисковик, расшифруем типы структур.

Разбор результатов эксперимента

Отдавая себе отчет в том, что читатели, добравшиеся до этого места, знают список Extended Capability ID на память, все же приведем расшифровку и краткое описание для обнаруженных структур.

Назначение и формат битовых полей 000Bh определяется разработчиком устройства

000Bh = Vendor-Specific. Назначение и формат битовых полей данной структуры определяется разработчиком устройства (кроме стандартизованных 4 первых байт, необходимых для прохождения связанного списка).

 

Поле Advanced Error Reporting позволяет систематизировать механизмы обнаружения и обработки ошибок

0001h = Advanced Error Reporting. Позволяет систематизировать механизмы обнаружения и обработки ошибок, применительно к процессу передачи данных по шине PCI Express, включая возможность восстановления работоспособности после не фатального сбоя, например повторной передачи искаженного пакета данных при несовпадении CRC (Link-by-Link retransmit).

Поле Resizable BAR позволяет низкоуровневому программному обеспечению (UEFI) управлять требованиями устройства к выделению адресного пространства

0015h = Resizable BAR. Позволяет низкоуровневому программному обеспечению (UEFI) управлять требованиями устройства к выделению адресного пространства. Важно, что этот теневой механизм действует до выполнения стандартных конфигурационных процедур PCI PnP и имеет приоритет перед ними.

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

В случае успешного запуска 64-битной ОС и наличия достаточного количества системных ресурсов, ОС может перепрограммировать данное регистровое поле, в результате чего размер диапазона будет увеличен. Затем, повторным выполнением процедур PCI PnP будут приведены в исполнение изменившиеся требования, в результате вся видеопамять размером несколько гигабайт будет успешно размещена в пределах 64-битного адресного пространства в режиме линейного и непрерывного доступа, без применения картирования.

Поле Secondary PCI Express содержит регистры, управляющие аналоговыми электрофизическими характеристиками сигнальных цепей

0019h = Secondary PCI Express. Содержит регистры, управляющие аналоговыми электрофизическими характеристиками сигнальных цепей и выполнением процедуры PCIe Link Training. Дополнительная адаптивность, реализуемая посредством данного поля, требуется для устройств, поддерживающих режим передачи данных 8.0 GT/S согласно спецификации PCIe 3.0.

Поле Address Translation Services (Extended Capability) требуется для поддержки технологий виртуализации ввода-вывода

000Fh = ATS (Address Translation Services) Extended Capability. Эта структура необходима для поддержки технологий виртуализации ввода-вывода, включая страничную трансляцию и формирование собственных адресных пространств для bus-master устройств. Декларирует параметры взаимодействия рассматриваемого видео адаптера и централизованной логики управления виртуальной памятью, а именно, устройства IOMMU (Input-Output Memory Management Unit).

Поле Page Request Extended Capability Structure расширяет и реализует функциональность декларированную выше описанной структурой ATS

0013h = Page Request Extended Capability Structure. Расширяет и реализует функциональность декларированную выше описанной структурой ATS. Содержит регистровые поля, управляющие взаимодействием данного устройства и IOMMU, и позволяющие контролировать ошибки, потенциально возможные в ходе такого взаимодействия.

Появления и стандартизации PASID отражает одну из основных тенденций в развитии технологий виртуализации

001Bh = PASID (Process Address Space ID) Extended Capability Structure. Факт появления и стандартизации такой структуры отражает одну из основных тенденций в развитии технологий виртуализации — распространение методов управления привилегиями и виртуальной памятью на операции, выполняемые bus-master периферией. PASID дает возможность каждому устройству (в нашем примере видео адаптеру) использовать несколько адресных пространств, снабженных идентификаторами, повышая эффективность использования множества виртуальных копий одного физического устройства несколькими выполняемыми процессами.

Выводы

В силу сложности рассматриваемых вопросов и ограниченного объема статьи, нам удалось лишь кратко перечислить и охарактеризовать основные функциональные возможности современного видео адаптера Radeon R7 370. Практикующим Kernel-Mode программистам, следует обратиться к первоисточникам, перечисленным в следующем разделе.

Резюмируя, обратим внимание на функциональность Resizable BAR Capability, обеспечивающую переход от картируемой адресации видеопамяти к линейной и непрерывной. Сделав размер диапазона управляемым, AMD обеспечила эффективное функционирование видео адаптера в среде 64-битных ОС, сохраняя потенциальную совместимость с 32-битными. Ведь даже в антикварной 16-битной среде DOS, выбор которой был обусловлен технологией постановки опытов, функциональность и совместимость видео адаптера не вызвали нареканий, включая чтение видео памяти при сохранении скрин-шотов.

Если характеризовать развитие PCI Express периферии за последние несколько лет одним словом, то это слово «виртуализация». Архитектура защищенного режима и страничной виртуальной памяти, изначально реализованная в центральных процессорах, практически полностью расширена на операции bus-master устройств. Идет (вернее, уже пришло) объединение ядер CPU и GPU в рамках единого пула вычислительных ресурсов, причем, даже в случае дискретного видео адаптера.

Первоисточники

Теги: