Обновление микрокода процессора intel. Совершенно альтернативный способ обновления микрокодов

💖 Нравится? Поделись с друзьями ссылкой

Собственно, оригинальный способ, оснастку и микрокоды можно найти (непосредственно инструкция по AMI ), и в большинстве случаев использование этого способа не несет никаких проблем и не имеет подводных камней, но я в своей практике регулярно сталкивался с такой проблемой:

Т.е. имела место банальная нехватка свободного места внутри образа. Когда модифицируешь BIOS для себя под конкретный процессор, на это можно не обращать внимания, т.к. всегда можно загрузить всего один микрокод именно под свой процессор, либо удалить какой-нибудь старый микрокод для освобождения места, но когда модифицируешь потоком, нужно искать другое решение, компромиссное.

В качестве компромисного я выбрал следующее решение — берем последние версии микрокодов для всех процессоров поколения CORE во всех конструктивах (Celeron E, Pentium E, Core 2 Duo, Core 2 Quad, Xeon *3xxx/*5xxx) и подменяем ими всё что было до того. Набор микрокодов получился следующий:

Объём этого набора — всего 76 килобайт. Данный файл получился путём объединения этих файлов:

cpu00010676_plat00000001_ver0000060f_date20100929.bin
cpu00010676_plat00000004_ver0000060f_date20100929.bin
cpu00010676_plat00000010_ver0000060f_date20100929.bin
cpu00010676_plat00000040_ver0000060f_date20100929.bin
cpu00010677_plat00000010_ver0000070a_date20100929.bin
cpu0001067a_plat00000011_ver00000a0b_date20100928.bin
cpu0001067a_plat00000044_ver00000a0b_date20100928.bin
cpu000006f2_plat00000001_ver0000005d_date20101002.bin
cpu000006f6_plat00000001_ver000000d0_date20100930.bin
cpu000006f6_plat00000004_ver000000d2_date20101001.bin
cpu000006f7_plat00000010_ver0000006a_date20101002.bin
cpu000006f7_plat00000040_ver0000006b_date20101002.bin
cpu000006fb_plat00000001_ver000000ba_date20101003.bin
cpu000006fb_plat00000004_ver000000bc_date20101003.bin
cpu000006fb_plat00000010_ver000000ba_date20101003.bin
cpu000006fb_plat00000040_ver000000bc_date20101003.bin
cpu000006fd_plat00000001_ver000000a4_date20101002.bin

Сама процедура модификации тоже немного изменилась и стала если не проще, то быстрее:

Шаг 1 — открываем образ BIOS в программе MMTool:



Шаг 2 — для проверки переходим на последнюю вкладку (CPU PATCH) и смотрим количество микрокодов. Здесь их к примеру 31 штука:

Шаг 3 — переходим на вкладку Replace и ищем на ней пункт «P6 Micro Code»:

Шаг 4 — выбрав пункт «P6 Micro Code» жмём кнопку Икщцыу, выбираем файл ncpucode.bin, описанный выше и заменяем его кнопкой Replace:





Шаг 5 — для проверки переходим на последнюю вкладку (CPU PATCH) и смотрим количество микрокодов. После подмены микрокодов осталось 17, версия самая последняя:

Фундаментальной разницы с порядком модификации, описанным на delidded.com нет. В большинстве случаев на выходе получается конечно не то же самое, но процессор получает нужный микрокод. Из субъективных положительных моментов я хотел бы обратить внимание лишь на то, что гарантированно обновляются микрокоды на все актуальные процессоры, будь то «гражданские» или «серверные», а так же практически нет риска получить сообщение о нехватке места. Хотя, в моей практике даже на такой набор микрокодов пару раз места не хватало, это было с BIOS для плат ECS P4M900T-M и ECS P4M900T-M2, которые в общем совместимы с Xeon E5450.

По традиции публикую ссылку на архив с инструментами — (zip, 234KB). Архив содержит исполняемый файл MMTOL.exe (версия 3.22 BKMOD), файл с микрокодами на все 45/65nm процессоры поколения core/xeon ncpucode.bin , а так же два файла 45nm.bin и 65nm.bin с микрокодами только на 45nm процессоры и только на 65нм. Использование этих файлов может быть полезным в тех случаях когда необходимо освободить дополнительный объём в BIOS, например, для новой firmware какого-то контроллера, сетевого, дискового и пр.

!NB : Ни в файле ncpucode.bin, ни в файлах 45nm.bin/65nm.bin нет поддержки процессоров Pentium 4, Celeron (без буквенных индексов), Pentium D, Celeron D и Xeon W (Xeon 5080 например). Это процессоры поколения NetBrust.

Представляю донора BioStar A740G M2L+ (AMD 740G / SB710) и реципиента BioStar A740G M2+ (AMD 740G / SB700). Мат.плата, что с литерой «L», более свежая и поддерживает процессоры AM3 официально, в отличие от другой, что ограничена лишь поддержкой процессоров AM2+. Напрашиваются на сравнительный анализ БИОСы их.
С оф. сайта загружаем лишь последнее обновление прошивки БИОСа для каждой их этих мат.плат:
- для A740G M2+ последняя бэта A74GM916.BSS за сентябрь 2009г.
- для A740G M2L+ - файл 74GCU511.BSS - за май 2010г.

Далее вооружаемся утилитой MMTOOL (я использовал версии 3.22, 3.23 и 3.26 - различий в работе не обнаружил) . Для работы с MMTOOL расширения файлов прошивок БИОС необходимо переименовывать на *.rom.

Теперь запускаем две MMTOOL и в них подгружаем файлы прошивок от двух мат. плат. Обращаем внимание на разные размеры в столбце «Source size» (да и в «Size in Rom» тоже разумеется) модуля 11 «P6 Micro Code» в каждой из прошивок.

Переходим в раздел CPU PATCH для детального сравнения:

Файл донора 74GCU511.rom - cpu_list содержит 14 строк с поддержкой CPURev.ID + 1 пустая (рис.1).

Бэта-версия реципиента A74GM916.rom - cpu_list содержит 13 строк с поддержкой CPURev.ID + 1 пустая (рис.2).

После анализа списков этих двух БИОСов становится очевидно, что для более новой мат.платы разработчики использовали более свежие патчи для процессоров AMD, где подправлен микрокод двух строк с CPURev.ID 1043 и 1062 (датируются 2009/07/31) и одна строка с CPURev.ID 10A0 добавлена (датируется 2010/02/17).

Способ №1 - модификация отличительных строк.
Производится извлечение этих трёх отличительных строк из донора 74GCU511.rom - действия «Extract a Patch Data» + «Apply» + 1 последнюю пустую строку и сохранение их в отдельные файлы.

Предварительно в в разделе CPU PATCH файла реципиента A74GM916.rom удаляются две строк с номерами CPURev.ID 1043 и 1062 (чей микрокод более старый чем мы будем далее вставлять) и последняя пустая строка - действия «Delete a Patch Data» + «Apply» (рис.3).

После этого поочерёдно вставляется более новый микрокод из четырёх уже ранее полученных файликов-патчей для CPURev.ID 1043, 1062, 10A0 и пустая строка (рис.4).

Обращаем внимание на размеры («Source size» и «Size in Rom») модуля 11 «P6 Micro Code» до и после применения данных изменений в файле реципиента.
После применения эти размеры у реципиента (рис.6) станут идентичны размерам такого же модуля в файле-доноре 74GCU511.rom (рис.5).
Стоит заметить, что несложно понять, как формируется размер модуля (каждая строка, что в разделе CPU PATCH, занимает по 2048 байт).

Сохранять изменения лучше под новым именем файла.
Далее этот файл проверяется, чтобы по новой без ошибок открывался MMTOOL.

Способ №2 - модификация заменой модуля целиком.
Собственно именно он и описан на просторах интернета (например частично ).

В MMTOOL подкружаем файл донора 74GCU511.rom, переходим во вкладку «Extract» и ищем строку «P6 Micro Code». Затем выделяем её, в поле «module file» задаем ему имя ncpucode.bin и выполняем Extract module «in uncompressed form».

Теперь в MMTOOL подгружаем файл реципиента A74GM916.rom, переходим во вкладку «Replace» и снова ищем строку «P6 Micro Code». Выделяем её, ждём Browse и выбираем наш донорский модуль ncpucode.bin. Жмём Replase и далее соглашаемся на замену данного модуля.

Снова обращаем внимание на размеры («Source size» и «Size in Rom») модуля 11 «P6 Micro Code» до и после замены данного модуля в файле реципиента.
После применения эти размеры у реципиента (рис.7) станут идентичны размерам такого же модуля в файле-доноре 74GCU511.rom (рис.5).

Если сравнить результаты обоих способов (рис.6 и рис.7), то заметна разница в 10байт в адресе RomLoc модуля «User Defined or Reserved», следующего за обновляемым модулем «P6 Micro Code» - возможно, это особенности работы MMTOOL...

Заключение и послесловие.
Таким вот образом из разных прошивок БИОС различных мат. плат на сокете АМ2+ (и даже АМ3 для сравнения) можно найти самые свежие микрокоды для каждого типа CPURev.ID, как в Award так и AMI биосах, затем скомбинировать в единый ncpucode.bin.
В последтсвии он получился у меня размером 32768 байт из 16 строк (микрокодов) с самыми свежими датами из числа изученных прошивок различных БИОСов: с 15ю различными типами ревизий процессоров для сокета АМ2+ (040A, 0413, 0414, 041B, 0433, 0680, 0C1B, 1000, 1020, 1022, 1040, 1041, 1043, 1062, 10A0) и 16-ой строкой для RevID 0000 (видимо некий универсальный микрокод для ревизий процессоров, не описанных в других строках - имхо, например будущих).

При комбинировании собственного ncpucode.bin импортированием необходимых патчей(микрокодов) для каждой необходимой ревизии процессоров в качестве лабораторного можно использовать абсолютно любую прошивку AMI биос с модулем «P6 Micro Code».

Однако при сохранении файла прошивки была замечена неприятная особенность MMTOOL - утилита почему-то прибавляла 8 нулевых байт в конец модуля «P6 Micro Code» - он получался размером 32776 байт. При извлечении тем же MMTOOL из лабораторной прошивки файл ncpucode.bin также становился на выходе размером 32776 байт.
Можно сие отредактировать простыми доступными всем редакторами. Но я также (случайно) обнаружил альтернативный способ: при извлечении универсальной утилитой BIOS_EXT.EXE всех модулей из лабораторной прошивки файл ncpucode.bin уже получался правильного размера 32768 байт - утилита BIOS_EXT.EXE сама правильно определила конец модуля «P6 Micro Code» при сохранении его в файл.

Вы можете оптимизировать работу установленного в вашем компьютере центрального процессора производства Intel или AMD, установив новейшую версию его микрокода. Оптимизация достигается главным образом за счет исправления ошибок стандартного микрокода, получаемого от прошивки материнской платы.

Обновления прошивок BIOS/UEFI вашей материнской платы обычно содержат новые версии микрокодов для поддерживаемых материнской платой центральных процессоров. По этой причине в первую очередь следует убедиться в том, что используется новейшая версия BIOS/UEFI.

Данное руководство позволяет оптимизировать работу лишь тех центральных процессоров, которые были разработаны компаниями Intel и AMD.

Примечания:

  • Установка пакета программного обеспечения с микрокодами может привести к нестабильной работе компьютера. По этой причине следует устанавливать данный пакет лишь тогда, когда наблюдаются какие-либо проблемы, связанные с функционированием центрального процессора вашего компьютера!
  • Не устанавливайте пакет программного обеспечения с микрокодами центральных процессоров в том случае, если он выпущен раньше, чем прошивка BIOS/UEFI материнской платы вашего компьютера!

1. Центральные процессоры производства компании Intel

В случае использования центрального процессора производства компании Intel вы можете действовать описанным ниже образом.

Примечание: вам нужен пакет программного обеспечения с микрокодами центральных процессоров производства компании Intel, более новый, чем тот, что находится в официальном репозитории дистрибутива? В этом случае вы можете загрузить файл пакета программного обеспечения с расширением .deb из

Менеджер пакетов Synaptic Software

Менеджер пакетов Synaptic «Поиск на компьютере» ), ввести запрос «Synaptic» «Менеджер пакетов Synaptic» Менеджера пакетов Synaptic «Поиск» «microcode» и нажать кнопку «Поиск» рядом с ним.

3.201501106.1 (в данном случае версия 3 пакета была создана 6 ноября 2015 года).

« intel-microcode» и нажать кнопку «Применить»

dmesg | grep microcode

Enter

2. Центральные процессоры производства компании AMD

В случае использования процессоров производства компании AMD данное руководство будет актуально лишь для тех из них, которые были выпущены после 2006 года (AMD K10 и более новые). Если в вашем компьютере установлен один из таких центральных процессоров, вы можете действовать описанным ниже образом.

Примечание: вам нужен пакет программного обеспечения с микрокодами центральных процессоров производства компании AMD, более новый, чем тот, что находится в официальном репозитории дистрибутива? В этом случае вы можете загрузить файл пакета программного обеспечения с расширением .deb из репозитория дистрибутива Debian , в который помещаются пакеты новейших версий. После окончания загрузки файла пакета следует найти его с помощью менеджера файлов и использовать двойной клик для установки микрокодов в систему. По окончании установки необходимо перезагрузить компьютер.

A. В случае использования дистрибутива Ubuntu вам придется установить Менеджер пакетов Synaptic (это можно сделать с помощью приложения Software ). В Linux Mint данный менеджер пакетов присутствует сразу же после установки.

B. В первую очередь следует запустить Менеджер пакетов Synaptic . В дистрибутиве Ubuntu для этой цели следует нажать на белый логотип Ubuntu в верхней части боковой панели («Поиск на компьютере» ), ввести запрос «Synaptic» и выбрать первый из предложенных вариантов приложений «Менеджер пакетов Synaptic» . Не нужно использовать поле быстрого поиска пакетов программного обеспечения главного окна Менеджера пакетов Synaptic , так как соответствующий механизм ненадежен; вместо этого следует нажать кнопку «Поиск» на панели инструментов, в поле поиска открывшегося диалогового окна ввести запрос «amd64-microcode» и нажать кнопку «Поиск» рядом с ним.

C. Теперь следует проверить дату создания пакета программного обеспечения с микрокодами центральных процессоров: этот пакет должен быть создан позднее, чем прошивка BIOS/UEFI материнской платы вашего компьютера! Дата создания рассматриваемого пакета отражена в его номере версии, например 2.20160316.1 (в данном случае версия 2 пакета была создана 2 марта 2016 года).

D. Пришло время установить флажок напротив названия пакета программного обеспечения «amd64-microcode» и нажать кнопку «Применить» на панели инструментов приложения.

E. После завершения установки пакета программного обеспечения нужно перезагрузить компьютер.

F. После перезагрузки стоит проверить корректность загрузки одного из установленных микрокодов путем ввода следующей команды в окне терминала (используйте функции копирования/вставки для того, чтобы избежать ошибок):

dmesg | grep microcode

После окончания ввода команды следует нажать клавишу Enter для ее исполнения. Если микрокод был успешно загружен, вы увидите несколько сообщений об этом.

Хотите узнать о других настройках и приемах работы с Linux-системами? На данном веб-сайте размещено большое количество подобных материалов.

С начала января сложно было пропустить новости, касающиеся аппаратных уязвимостей Spectre и Meltdown — настолько серьёзной и всеобъемлющей оказалась тема. Хотя производители знали об этих проблемах ещё с лета прошлого года, большинство, похоже, начало реагировать лишь после обнародования подробностей специалистами команды Google Project Zero.

Например, Intel ещё в январе помимо прочих заплаток выпустила обновления микрокода против Spectre для своих процессоров Broadwell, Haswell, Skylake, Kaby Lake и Coffee Lake. Но почти сразу выяснилось, что они приводят к сбоям и . Вначале Intel заявила, что проблема касается только чипов Broadwell и Haswell, но позже признала существование сбоев на компьютерах с процессорами Skylake, Kaby Lake и Coffee Lake и партнёрам и пользователям пока воздержаться от установки заплаток. Наконец, в начале февраля исправленный вариант микрокода, но только для мобильных и настольных потребительских чипов семейства Skylake.

Теперь, после месяца интенсивных тестов и обкатки заплаток Intel и её партнёрами, пришло время и других более или менее актуальных процессоров: были выпущены обновления микрокода для чипов на базе архитектур Kaby Lake и Coffee Lake, а также незатронутых предыдущим обновлением Skylake-базированных платформ. Речь идёт о процессорах 6, 7 и 8-го поколений Intel Core i, а также последних семейств Core X, Xeon Scalable и Xeon D.

Новый вариант микрокода будет доступен в большинстве случаев через выпуск OEM-производителями новых прошивок материнских плат и ноутбуков. Intel по-прежнему призвала людей постоянно обновлять свои системы до актуальных версий, а также опубликовала документ , в котором расписала состояние аналогичных исправлений микрокода для других своих продуктов, в том числе более ранних чипов, начиная с 45-нм Core 2. Для каких-то из этих чипов заплатки только планируются, для других — находятся в состоянии раннего тестирования, для третьих — существуют уже в виде бета-версии. Как правило, чем старее архитектура, тем позже она получит прошивки с защитой против Spectre. Тем не менее, обновления микрокода для более-менее актуальных архитектур Sandy Bridge, Ivy Bridge, Haswell и Broadwell уже находятся в состоянии бета-тестирования. Также ряд чипов Atom и даже ускорители Xeon Phi уже получили заплатки.

Intel напомнила, что существуют и другие методы борьбы против вскрытых уязвимостей блока предсказания ветвлений в современных процессорах. Например, Retpoline, разработанный Google против Spectre CVE-2017-5715 (branch target injection или целевое внедрение в ветвь). Для тех, кто интересуется дополнительной информацией о Retpoline и принципах его работы, компания опубликовала особый технический доклад .

Выпущенные Intel обновления микрокода против Spectre в ближайшие дни и недели начнут выходить в виде свежих прошивок BIOS для различных материнских плат. Любопытно, окажут ли они дополнительный эффект на деградацию производительности конечных систем?

Modern processors are complex devices that can have bugs. Furthermore, instead of executing x86 instructions directly, modern x86 processors contain internal code that implements support for the x86 instruction set. The internal code is called microcode. Microcode can be updated to fix or mitigate CPU bugs.

Some CPU bugs can make Firefox crash. For example, Firefox 57 and later is known to occasionally crash on Broadwell-U CPUs with old microcode in a manner not seen with newer Broadwell-U microcode versions.

Microcode updates can be loaded onto the CPU by firmware (usually called BIOS even on computers that technically have UEFI firmware instead of old-style BIOS) or by the operating system. Microcode updates do not persist across reboot, so in the case of a dual-boot system, if the microcode update isn"t delivered via BIOS, both operating systems have to provide the update.

On Mac, to have an up-to-date system, apply all OS X system updates and Apple firmware updates offered in the Updates pane of the App Store app.

To allow Windows to load updated microcode onto the CPU, make sure Windows Update is enabled and set to install updates.

To see the processor microarchitecture and which microcode revision is in use, run the command reg query HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0 in the Windows command prompt. (You can open the command prompt by pressing Windows + R , typing cmd and pressing Return .) The line labeled "VendorIdentifier" shows the CPU vendor (GenuineIntel for Intel or AuthenticAMD for AMD). The line labeled "Identifier" gives the microarchitecture as three numbers: "Family", "Model" and "Stepping". These are relevant in identifying if a particular CPU bug may be relevant to the CPU in your computer. The line labeled "Update Revision" shows the current microcode revision (for the particular microarchitecture) with zeros on both sides. For example, Update Revision REG_BINARY 000000001E000000 means that the revision is 1E (hexadecimal). The line labeled "Previous Update Revision" shows the microcode revision loaded from BIOS.

If the vendor is GenuineIntel, family is 6, model is 61 and stepping is 4, to avoid crashes with Firefox 57 or later, the microcode revision needs to be 1A or higher.

Whether microcode updates are in use by default depends on the Linux distribution and can differ for Intel and AMD CPUs.

  • On Debian-based distributions, including Ubuntu, microcode updates for Intel processors are provided by the intel-microcode package and microcode updates for AMD processors are provided by the amd64-microcode package.
  • On Arch, AMD microcode updates are installed by default, but Intel microcode updates require special steps .
  • On Fedora, microcode updates are installed by default.

To see the processor microarchitecture and which microcode revision is in use, run the command less /proc/cpuinfo in terminal. The line labeled "vendor_id" shows the CPU vendor (GenuineIntel for Intel or AuthenticAMD for AMD). The microarchitecture is given as three numbers on lines labeled "cpu family", "model" and "stepping". These are relevant in identifying if a particular CPU bug may be relevant to the CPU in your computer. The line labeled "microcode" shows the microcode revision number (for the particular microarchitecture) in hexadecimal.

Рассказать друзьям