Надо ли обновлять микрокод процессора. Хак BIOS. Добавляем CPU ID. Центральные процессоры производства компании AMD

Не для кого не секрет, что процессор представляет собой автомат с микропрограммным управлением. И любая его инструкция является совокупностью микрокоманд, прошитых в ПЗУ процессора при его изготовлении. Ошибки микрокода и схемные погрешности (errata), допущенные при проектировании, могут вызывать отклонения от спецификаций процессора и ошибкам в его работе. При выпуске процессора обычно публикуются его спецификация и список обнаруженных errata.

Все процессоры Intel с архитектурой P6, а к ним относятся семейства Pentium Pro, Pentium II & III, Celeron, Pentium II & III Xeon и Pentium II Overdrive, обладают таким замечательным свойством, как "reprogrammable microcode". В этих процессорах имеется возможность изменения микрокода, т.е. имеется возможность исправления ошибок в программно-схемотехнической реализации конкретных процессоров семейства P6 и некоторых встроенных ошибок практически на уровне "железа". Ошибки могут появляться на этапе проектирования процессоров, а исправляются они именно с помощью изменения микрокода. Каждое из подсемейств (PII, Celeron, PPro, Xeon) имеет спецификацию. При выпуске каждого нового степпинга процессора (внутри него все приборы являются идентичными в рамках технологических отклонений), Intel публикует для него обновление спецификации, где указываются обнаруженные и исправленные errata (отклонения от спецификации).

Ошибки эти могут, в принципе, осложнить жизнь программному обеспечению, которое работает на этих "дефектных" процессорах (и пользователю;-)) .

Конечно, все зависит от конкретных ошибок. Для избавления от подобных ужасов и требуется изменение микрокода процессора, в результате чего ошибка может быть полностью устранена или могут быть просто смягчены последствия от ее присутствия.

Кстати, поддержка биосами вновь вышедших процессоров определяется, в частности, и наличием соответствующей прошивки. Например, когда появился первый Celeron, именно отсутствие соответствующей версии микрокода не позволяло корректно запустить систему с этим процессором.

Сами обновления микрокода - это 2-хкилобайтные блоки данных, прошитые в системном BIOS. Такой блок есть для каждого степпинга процессора из семейства P6. Intel поставляет свежие версии микрокода ведущим производителям BIOS. База данных с обновлениями пополняется и изменяется при появлении новых моделей и версий микрокода. Intel рекомендует выполнять обновление версий микрокода с помощью своей утилиты при установке нового процессора на материнскую плату или перепрограммирования флэш-памяти, чтобы быть уверенным, что в BIOS содержится самая свежая версия микрокода. Эта программа определяет используемый процессор (с помощью CPUID) и ищет соответствующее ему обновление в своей базе. Если найдена свежая версия микрокода, утилита локально перепрошивает код в BIOS, не затрагивая остальные участки. Т.о. отпадает необходимость перепрограммирования всего флэша для поддержки нового ЦПУ, как это было ранее. Обновление базы данных Intel периодически выкладывает на своем сайте.

Последняяи из доступных нам баз имеет ревизию 5.01 и содержит следующие версии микрокода:

Processor Processor Stepping Microcode Update Rev
Pentium III Processor 0x672 0x04
Pentium III Processor 0x673 0x02
Pentium III Xeon Processor 0x672 0x21
Pentium III Xeon Processor 0x673 0x22
Pentium II Processor 0x633 0x34
Pentium II Processor 0x634 0x35
Pentium II Processor 0x650 0x32
Pentium II Processor 0x651 0x30
Pentium II Processor 0x652 0x14
Pentium II Processor 0x653 0x01
Pentium II Xeon Processor 0x652 0x29
Pentium II Xeon Processor 0x653 0x04
Intel Celeron Processor 0x650 0x32
Intel Celeron Processor 0x651 0x30
Intel Celeron Processor 0x660 0x09
Intel Celeron Processor 0x665 0x02
Pentium II OverDrive Processor x1632 0x02
Pentium Pro Processor 0x612 0xC6
Pentium Pro Processor 0x616 0xC6
Pentium Pro Processor 0x617 0xC6
Pentium Pro Processor 0x619 0xD2

Загрузить последнюю версию утилиты, исправляющую микрокод можно прямо отсюда: pupdt501.exe (115 Kb)

Старую базу (PEP15.PDB) можно загрузить отсюда: pupdt461.exe (111 Кб)

После окончания работы утилиты, необходимо выключить питание компьютера. Загрузка обновления в процессор происходит во время выполнения POST при каждом запуске системы. Естественно для работы утилиты необходимо разрешить перезапись флэш-памяти перемычкой или в BIOS Setup. Программа должна запускаться из-под "голого" ДОСа.

Однако для такого идеального варианта необходима поддержка BIOS"ом специального API обновления микрокода процессора, позволяющего утилите обновления с помощью BIOS загрузить новый микрокод. Если используемая версия системного BIOS не поддерживает API, пользователю ничего не остается, кроме как добыть новую версию у производителя материнской платы. Однако бывает, что найти её не так уж просто, если не невозможно. Зачастую, после прекращения производства какой-либо модели системной платы, производитель перестает выпускать и обновления биосов для нее, но при этом новые процессоры могут появиться в продаже, а у пользователя может возникнуть желание установить в свою систему новый CPU.

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

Возникает вопрос, а чем чревато самостоятельное обновление прошивки? Ну, во-первых, сначала нужно удостовериться, что вам это действительно необходимо. Если версия прошивки старая, а новых версий BIOS производитель системной платы не предлагает, но, главное, вы столкнулись с нестабильной работой какого-то приложения, и рассчитываете, что изменение микрокода процессора вам поможет. Только в этом случае имеет смысл самостоятельно изменить прошивку. А насчет того, чем это чревато - по-моему, ничем опасным. Во-первых, не стоит забывать, что загрузка обновления микрокода в процессор применяется во всех BIOS на платах для P6 и уже давно (многие видели в Setup загадочную опцию Microcode Update: Enable/Disable). И ничего! Все работает.

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

Мой личный опыт работы с этой программой пока был ограничен 7 случаями, из которых удалось обновить микрокод только на одной системной плате (Abit LX6 c PII 233). В остальных случаях BIOS уже содержал обновленные версии микрокода. Также не удалось встретить BIOS, не поддерживающий обновление микрокода.

Что касается аналогичной возможности обновления микрокода в процессорах других производителей (AMD, Cyrix), то никакой информации по этому вопросу мне найти не удалось. Но я почти уверен, что в этих CPU имеется аналогичная возможность изменения микрокода.

Приобретённый на Алиэкспрессе в материнскую плату Intel DG965SS (с разъёмом LGA775). Можно конечно и самому переделать LGA771 в LGA775, но при цене в $6,5 долларов за процессор гораздо проще взять его и китайцев.

При использовании Intel Xeon 5320 операционная система Windows 10 заработала только при выключении в БИОСе режима "Core multiplexing" (в отличии от прекрасно работающей Ubuntu 17.10). При этом процессор работал только в однопоточном режиме, так что, согласно тесту CPU-Z, производительность в многопоточном режиме оказалась в 2 раза ниже, чем у Intel Core 2 duo E6300, на замену которому и покупался Xeon.

Оказалось, что микрокоды процессора должны быть обновлены. Можно сделать это и в программном режиме, причём в Ubuntu операция на голову проще, чем в Windows 10. Да и в последней нужно позаботиться о том, чтобы микрокоды обновлялись при каждой загрузке. Также есть возможность обновить микрокоды и в БИОСе, по крайней мере в некоторых BIOS от AWARD, AMI, Phoenix, особенно в версиях до UEFI.

Инструкций для материнских плат Intel намного меньше. И не удивительно. С Intel DG965SS пришлось очень прилично повозиться.

Перед обновлением микрокодов нужно установить процессор, поддержку которого мы хотим обеспечить. Если потребуется установить другой процессор, то процедуру придётся повторить.

Некоторые инструкции предлагают создать загрузочную дискету, т.к. не все компьютеры позволяют загружаться в флешки. Я сделал загрузочную флешку с FreeDOS при помощи бесплатного приложения с открытым исходным кодом Rufus (для этого нужно отметить галочкой "Create a bootable disk using" и выбрать из списка пункт "FreeDOS").

Собственно, оригинальный способ, оснастку и микрокоды можно найти (непосредственно инструкция по 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.

В первых строках данного поста хочу без сарказма и искренне поблагодарить участника форума на клокерах, под ником WebBlast за популяризацию данного метода.

Сегодня первое апреля, но это просто совпадение. Способ работает и почти ничего не кирпичит.

В BIOS поколения «до UEFI» есть механизм обновления микрокодов без обновления самого BIOS. Работает этот механизм в силу тех или иных причин не всегда, но если он работает, то в общем процедура обновления сводится к загрузке системы со специального внешнего носителя и последующей перезагрузке.

Что важно понимать:

  • Происходит подмена одного микрокда на другой, а не добавление. Т.е. в ситуации с 771 модом мы зачастую получаем потерю поддержки аналогичного Core 2 Quad, т.е. его микрокод подменяется на микрокод Xeon.
  • Если система не стабильна, пользоваться данным способом не рекомендуется, а система с Xeon зачастую не стабильна без микрокодов.
  • Обновить микрокод на старом процессоре нельзя.
  • Программа не оперирует понятием платформы вообще. Т.е. к примеру микрокод для процессора 1067А, версии FA и платформы 0 будет заменен на микрокод для процессора 1067А, версии FС (более новой) и платформы 2. Но при этом микрокод версии FC и платформы 0 не будет заменен на микрокод FC и платформы 2. Программа сообщит что всё уже обновлено.

Так же надо добавить что этот способ практически идеален для обновления модов Feng’а (aka genius239239) до микрокодов версии 2010 года.

И так, для тех кому читать не интересно и у кого есть дисковод (флоппи), предлагается простое решение — пишем (IMA/ZIP, 305kb) на дискету, перезагружаемся и… всё. На экране наверняка будет написано о том что микрокод обновлён и всё хорошо.

Для тех, у кого дисковода нет, но есть флешка, тоже есть путь, но чуть более сложный:

После загрузки ПК с такой флешки, микрокод на любой 45/65нм процессор поколения Core/Core2 обновится. Конечно, если BIOS не UEFI и если плата не злой OEM и так далее… но шанс есть.

Примеры работы программы на одной и той же плате, но с разными версиями BIOS:

  • Успешный пример. ASUS P5QVM DO, BIOS 0206:







    =========================================================================






    The microcode update was successfully loaded permanently into the BIOS.
    You do not need to run this utility again, unless a new
    processor is installed or a new version of the utility is used.

  • НЕ успешный пример. ASUS P5QVM DO, BIOS 0403:

    Database file being used is PEP.DAT
    =========================================================================
    | Processor Update Utility for Intel(R) P6 and Intel NetBurst(R) |
    | Microarchitecture Family of Microprocessors |
    | Version 7.14 , 09/ 23 / 2005 , Production |
    | Copyright 1995 -2004 , Intel Corporation. |
    =========================================================================
    The system BIOS supports the microcode update API.
    Searching database file for Processor Signature =0001067A Platform ID =1
    Attempting to permanently install the microcode update(s) in your system BIOS.

    Checking microcode update for processor signature 1067A and platform ID 01:
    BIOS microcode update revision = A07
    Database microcode update revision = A0B
    This utility can load a newer microcode update into the BIOS.
    ERROR: Update not permanently loaded into the BIOS. BIOS rejected



    Database microcode update revision = A0B

    Microcode updates can only be temporarily loaded into processors.
    You will need run this utility again after each system power-up or reset.
    Processor #2:
    Pentium(R) III processor detected.
    Processor Signature =0000067A
    Processor microcode update revision = A07
    Database microcode update revision = A0B
    This utility can load a newer microcode update.

    Update #1 Processor Signature=1067A Platform ID=11 Revision=a0b
    2 successful load(s) .
    All Updates Loaded and Verified!

    1. Старые версии HPUSBFW не работают под Win10, но версия 2.2.3 и более новые без проблем создают загрузочную USB флешку.
    2. Данный способ отлично отрабатывает из-под USB флешки с FreeDOS, созданной средствами RUFUS.
    3. Да, RUFUS’ный FreeDOS не на всех системах загружается, но решение есть, см. п. 1.

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.