Производительность и совместимость UEFI

29 Авг 2013

Производительность и совместимость UEFI

Стандарт Graphics Output Protocol (GOP) сегодня является основной тех­но­ло­ги­ей для разработки графических UEFI-приложений. Его раз­ра­бот­чи­кам удалось предложить изящное решение пригодное для редизайна ус­та­рев­ших программ, использующих VESA BIOS Extension. В то же время, по­тен­циал GOP позволяет процедурам UEFI-firmware использо­вать воз­мож­нос­ти графического акселератора. При этом UEFI-при­ло­же­ния, вза­имо­дей­ству­ю­щие с графическим процессором посредством firm­ware, могут быть ос­во­бо­жде­ны от поддержки ог­ром­но­го количества моделей графических про­цес­со­ров.

Энтузиастам – производительность

Функция EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT (Block Transfer), получает от UEFI-приложения блок данных, находящийся в системной памяти и предназначенный для переноса в видео память. Обратные пересылки также возможны. Очевидно, этот блок может быть обработан графическим процессором, взаимодействующим с оперативной памятью в обход центрального процессора в режиме Bus Master. Чтобы это стало возможным, поддержка протокола GOP должна быть адаптирована под архитектуру заданного графического процессора и интегрирована в firmware видео адаптера. При отсутствии такой функциональности, процедуры firmware, обеспечивающие BLT, должны эмулировать акселератор, а именно, копировать графические данные, используя центральный процессор. Последняя ситуация имеет место, если firmware персональной платформы «вынуждено» обеспечить поддержку GOP для установленного в слот PCI Express видеоадаптера, не поддерживающего этот протокол.

Примечание.

Очевидно, гармония производительности и совместимости будет иметь место только при наличии поддержки GOP в firmware видеоадаптера. В настоящее время распространенность VGA-адаптеров, готовых к об­слу­жи­ва­нию GOP, оставляет желать лучшего. Хотя производители давно уже анонсировали модели с поддержкой этого UEFI-совместимого протокола.

Консерваторам – совместимость

Другая технология использования GOP работает подобно VESA BIOS Extension, знакомому нам еще со времен реализации SVGA графики под DOS. Графическое приложение UEFI-интерфейса, используя сервисную функцию EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE, получает информацию о базовом адресе и форматировании диапазона доступа к видео памяти, а именно: количество байт на строку и расположение битовых полей, отвеча­ющих за первичные цвета Red, Green, Blue внутри 32-битного кода пикселя. После этого, приложение работает с указанным диапазоном, выполняя запись в видео память инструкциями центрального процессора. Очевидно, видео акселератор не имеет возможности ускорить этот процесс, тут все зависит от пропускной способности PCIe-шины. Такой метод незаменим для проектов, в которых приоритетом является совместимость с ранее реализо­ван­ны­ми моделями программирования.

Установка заданного видео режима и восстановление исходного режима при завершении приложения, в обеих моделях использования GOP выполняется функцией EFI _ GRAPHICS _ OUTPUT _ PROTOCOL _ SET _ MODE.

Как оптимизировать запись в видеопамять

Для знатоков архитектуры x86, заметим, что перепрограммирование регистров MTRR (Memory Type and Range Registers) и переопределение атрибута для диапазона доступа к видео памяти с UC (Uncacheable) на WC (Write Combining), в сочетании с использованием 128 и 256-битных SSE-инструкций, существенно увеличивает скорость записи в видео память.

Резюме

Исследование ряда персональных платформ, например, новейшей платы ASUS Z87-K с системной логикой Intel Z87 для процессоров Socket 1150, подтверждает наши аргументы. Запуская несколько ассемблерных примеров соб­ствен­ной разработки, мы убедились в том, что Graphics Output Protocol поддерживается и успешно функционирует, в то время как устаревший протокол UGADRAW на исследуемой платформе детектировать не удалось.