Hardware,  Статьи

Включение Resizable Bar на старых материнских платах

Активация Resizable BAR на материнских платах для CPU Intel (где BAR обозначает Base Address Register), либо технологии SAM (Smart Access Memory) для CPU AMD, cущественно повышает быстродействие при выполнении операций, сопровождающихся обменом большими массивами данных между процессором и видеокартой (игры, обработка графики, AI-приложения и т.д.).

Если опция ReSize BAR не активна, CPU производит обмен данными с видеокартой блоками размером 256 MB, что в некоторых случаях становится «бутылочным горлышком», тормозящим обработку данных, загрузку сцен/карт в играх и т. д. |Без включения ReBAR не будут работать профессиональные видеокарты с большим объемом памяти, такие, как NVIDIA Tesla K40.

Для полноценного использования Resizable Bar необходимо, чтобы ее поддерживала как материнская плата, так и видеокарта. Для доступа ко всей видеопамяти на motherboard необходимо также активировать функцию Above 4G Decoding, что позволит операционной системе задействовать расширенную адресацию памяти (PAE). Узнать, активирована ли поддержка ReSize BAR на компьютере под управлением Windows можно в программе GPU-Z:

Если нажать на поле Disabled в строке Resizable BAR, появится страница с подробным описанием возможностей компьютера по работе с технологией PCIe Resizable BAR.

Например, для видеокарты AMD Radeon RX5500XT, установленной на компьютере со старой материнской платой ASRock Z87 Killer Fatality, эта опция отключена.

Программа GPU-Z также предоставляет информацию о состоянии необходимых для активации ReBAR функций материнской платы, в частности, параметра Above 4G Decoding (должен быть включен) и опции CSM (ее необходимо отключить):

Информация о состоянии ReBAR на вкладке «Видеоадаптер» в программе HWINFO:

К сожалению, официальная поддержка функции Re-Size BAR для относительно старых (с точки зрения производителя) материнских плат и видеокарт в большинстве случаев отсутствует. Это связано не с отсутствием практической возможности реализовать технологию на уровне Hardware, а, прежде всего, с нежеланием производителей выпускать обновления BIOS/Firmware для продукции, снятой с производства.

К счастью, благодаря стараниям «народных умельцев» существует возможность добавления функции Re-Size BAR даже на видавшие виды, но все еще неплохо работающие компьютеры. Теоретически можно добавить поддержку этой технологии на материнскую плату/видеокарту, аппаратно поддерживающие стандарт PCI Express 2.0, в котором она была впервые имплементирована.

В данной статье рассматривается процедура активации функции ResizableBAR на материнской плате ASRock Fatality Z87 Killer, предназначенной для работы с процессорами Intel четвертого поколения (Haswell) и поддерживающей стандарт PCIe 3.0. Изложенный материал не претендует на полноту раскрытия затронутой темы, является субъективной интерпретацией мыслей автора, законспектированных при настройке компьютера.

Последовательность работы по активации опции ResizableBAR в BIOS материнской платы на примере ASRock Fatality Z87

Для полноценной работы технологии ReBAR требуется обеспечить включение декодирования Above 4G. В противном случае процессор сможет работать только с блоками данных объемом до одного (иногда до двух) гигабайт. Это производится в BIOS материнской платы. К сожалению, на некоторых платах такая опция недоступна, хотя иногда она поддерживается аппаратно и просто скрыта от пользователя.

Чтобы активировать скрытую опцию декодирования Above 4G, необходимо либо получить доступ к скрытому меню BIOS, либо модифицировать и прошить модернизированную микропрограмму BIOS motherboard (в ней должен содержаться дополнительный блок, добавляющий нужный функционал).

Иногда, несмотря на все ухищрения, на старых платах не получается активировать работу в режиме Above 4G Decoding, в таком случае все равно можно использовать функционал ReBAR с размером памяти до 1GB. Для этого нужно соответствующим образом модернизировать BIOS материнской платы (об этом ниже).

Опция включения 4G decoding в штатном BIOS платы ASRock Fatality Z87 спрятана, теоретически ее можно активировать программами UEFITool, IRFExtractor-RS и grub-mod-setup_var. Для доступа к скрытой опции Above 4G Decoding на материнской плате ASRock Fatality Z87 нужно:

  • скачать NE-версию UEFITool с github, репозиторий LongSoft/UEFITool/releases;

  • скачать IRFExtractor-RS с github, раздел LongSoft/IFRExtractor-RS/releases:

  • на сайте производителя находим и скачиваем BIOS материнской платы (либо сливаем его с микросхемы BIOS штатной утилитой), затем открываем его в программе UEFITool:

  • переходим в меню Action – Search-Text, находим значение Above 4G Decoding (или 4G Decod, или Above 4G, 64-Bit Resource Allocation или Above 4GB MMIO assignment):


  • дважды кликаем на строку с найденным значением:

после чего активируется место в коде микропрограммы BIOS, в котором находится искомое значение:

  • нажимаем правой кнопкой мыши на найденную строку и во всплывающем меню выбираем Extract Body:


  • сохраняем создаваемый утилитой bin-файл (в данном случае Section_Freeform_subtype_GUID_MiniSetupResourceSection_Setup_Setup_body.bin) в каталог с ранее скачанной программой IFRExtractor-RS:

  • в консоли cmd или PowerShell запускаем консольную утилиту IFRExtractor-RS, открываем полученный шагом ранее файл .bin, извлекаем его содержимое:

В результате получаем несколько файлов с текстовым содержимым, в одном из которых находится скрытый пункт меню Above 4G Decoding:

С помощью поиска в файле Section_Freeform_subtype_GUID_MiniSetupResourceSection_Setup_Setup_body.bin.0.0.en-US.uefi.ifr (он содержит все возможные скрытые и открытые значения меню BIOS) нужно найти значения Above 4G Decoding, либо Memory Remap, либо MMIO. В данном случае поиск находит сроку Memory Remap, которая теоретически отвечает за активацию опции Enable or disable memory remap above 4G:

Здесь нужно найти значение VarOffset (в данном примере оно равно 0x2FE):

Теперь можно приступать к работе с микропрограммой BIOS материнской платы. Для этого нужно скачать с github файл modGRUBShell.efi:

и создать загрузочную флешку, например, с помощью программы Windows10InstallationAssistant, для чего требуется носитель объемом не менее 8 GB:

Для материнской платы ASRock Fatality Z87 файл modGRUBShell.efi нужно переименовать в shellx64.efi и поместить его в корневой каталог загрузочной флешки. Для других плат его обычно записывают в директорию EFI/Boot/ заменяя имеющийся там файл bootx64.efi.

После этого в BIOS материнской платы отключаем Secure Boot и загружаемся в UEFI-среду.

Чтобы загрузиться в EFI Shell на материнской плате ASRock Fatality Z87 с установленной загрузочной флешкой и файлом shellx64.efi (перименованный modGRUBShell.efi) в корневом каталоге входят в BIOS, затем переходят в меню Save & Exit, где выбирают пункт Launch EFI Shell from filesystem device:

После этого становится доступной консоль, в которой можно вводить команды управления микропрограммой BIOS:

Запускаем проверку текущего состояния Above 4G Decoding материнской платы командой

setup_var 0x2FE

где 0x2FE — значение, найденное в ходе анализа компонентов BIOS, полученных утилитой IFRExtractor-RS выше.

В результате может быть выведено одно из двух значений: 0x0 или 0x1.

0x0 — обозначает, что опция Above 4G Decoding не активирована. Для ее включения выполняем команду

  setup_var 0x2FE 0x1

и перезагружаем компьютер командой

reboot

Если при первой проверке командой setup_var 0x2FE получаем вывод 0x1, нужно выполнить команду

  setup_var 0x2FE 0x0

перезагрузить компьютер, а затем выполнить команду

  setup_var 0x2FE 0x1

и снова перезагрузиться.

Если при проведении процедуры активации опции Above 4G Decoding в EFI Shell появляется ошибка GUID mismatch, ее нужно просто проигнорировать.

В некоторых случаях для модификации BIOS нужно использовать команду setup_var_3 вместо setup_var.

Теоретически так должна быть активирована опция Above 4G Decoding. На практике материнская плата ASRock Fatality Z87 «саботировала приказ». Не помогла ни принудительная установка переменной 0x2FE в 0x1, ни дополнительное включение скрытой функции Max TOLUD (VarOffset=0x301) в адаптивный режим командой

  setup_var 0x301 0x01

Несмотря на проблемы с технологией Above 4G Decoding, все равно можно добиться работы ReBAR с блоками памяти по 1GB (а если поиграться с TOLUD, то даже с 2GB). Это все же лучше, чем штатные 256MB. Для этого можно воспользоваться инструкцией с репозитория пользователя xCuri0 на github.

В процессе работы в штатную микропрограмму BIOS материнской платы добавляется специальный FFS-модуль. Место инкапсуляции находится программой UEFITool (версия без NE). Сначала производится поиск раздела BIOS с ID 3C1DE39F-D207-408A-AACC-731CFB7F1DD7:

Затем в конец найденного тома вставляется модуль ReBarDxe.ffs, который нужно предварительно скачать с github:

Затем модифицированный файл BIOS в консоли PowerShell или в cmd патчится программой UEFIPatch + текстовый файл patches с того же репозитория:

В итоге получаем файл BIOS с расширением patched:

Для материнских плат под процессоры Haswell нужно дополнительно провести процедуру DSDT-Patching — добавить еще один патч (файл HswAbove4G):

Чтобы материнская плата не ругалась при заливке модифицированного BIOS, его можно открыть и пересохранить патченную версию в программе UEFI BIOS Updater (UBU):

После прошивки патченого BIOS в Windows запускается программа ReBarState.exe, в которой нужно выбрать желаемый размер ReBAR. При этом нужно учитывать, что если выбрать слишком большой размер, материнская плата нормально не запуститься, для решения проблемы нужно будет принудительно сбросить настройки BIOS. В большинстве случаев удается аткивировать ResizableBAR размером 1GB.

После заливки модернизированного BIOS видавшая виды материнская плата ASRock Fatality Z87 получает ограниченный функционал ReBAR, хотя Above 4G Decoding не работает:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *