Microcode (Русский)

Состояние перевода: На этой странице представлен перевод статьи Microcode. Дата последней синхронизации: 2014-12-16. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Микрокод - это что-то наподобие прошивки для процессора. Ядро может обновлять прошивку процессора без необходимости обновлять её с помощью обновления BIOS.

С сайта Intel

"В файле данных с микрокодом процессора содержатся новейшие определения микрокодов для всех процессоров Intel. Intel выпускает обновления микрокодов, чтобы обеспечить корректный режим работы процессоров, как описано в соответствующих спецификациях по обновлению процессоров. Обычно этот микрокод обновляется вместе с базовой системой ввода-вывода, но разработчики корпорации Intel понимают, что с этим могут быть административные проблемы. В операционной системе Linux и продуктах VMware ESX есть механизм обновления микрокода после загрузки. Например, чтобы ОС смогла использовать этот файл, его необходимо поместить в каталог /etc/firmware ОС Linux."

Обновление микрокода

Для процессоров Intel установите intel-ucode.

Для процессоров AMD обновления микрокода поставляются в пакете linux-firmware, который был устанавлен как часть базовой системы.

Применение обновлений микрокода Intel

Важно: Начиная с версии ядер linux 3.17-2 и linux-lts 3.14.21-2, обновления микрокода Intel больше не применяются автоматически. Многие ядра в AUR пошли по пути официальных ARCH ядер в этом вопросе: в linux-ck 3.16.6-3, обновления микрокода Intel больше не применяются автоматически.

Чтобы применить эти обновления, добавьте /boot/intel-ucode.img в качестве первого initrd в конфигурационном файле загрузчика. Это в дополнение к обычному initrd файлу.

Конкретные примеры

EFI boot stub / EFI handover

Добавьте две initrd= опции:

initrd=/intel-ucode.img initrd=/initramfs-linux.img

Gummiboot

Используйте initrd опцию дважды в /boot/loader/entries/*.conf:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options ...

rEFInd

Отредактируйте опции загрузки в /boot/refind_linux.conf также как в примере EFI boot stub выше:

"Boot with standard options" "ro root=UUID=(...) quiet initrd=/boot/intel-ucode.img initrd=/boot/initramfs-linux.img"

Пользователи, которые создают строфы вручную в /boot/refind.conf для определения ядер должны просто добавить initrd=/intel-ucode.img или /boot/intel-ucode.img как это требуется в строке опций, а не в главной части строфы.

Grub

После релиза grub-1:2.02-beta2-5, grub-mkconfig автоматически применит обновление микрокода. Пользователи должны пересоздать конфигурацию grub для активации загрузки обновления микрокода, выполнив команду # grub-mkconfig -o /boot/grub/grub.cfg после установки intel-ucode.

Альтернативный вариант: пользователи, желающие вручную управлять файлом конфигурации grub могут добавить /intel-ucode.img или /boot/intel-ucode.img в grub.cfg как показано ниже:

[...]
    echo	'Loading initial ramdisk ...'
    initrd	/intel-ucode.img /initramfs-linux.img
[...]
Обратите внимание: Проделайте это для всех пунктов меню.
Важно: Этот файл будет автоматически перезаписан /usr/bin/grub-mkconfig'ом во время определённых обновлений, затирая ваши изменения.

Syslinux

Обратите внимание: Между указаниями файлов initrd (intel-ucode и initramfs-linux) не должно быть пробелов. Точки здесь вовсе не означают каких-либо сокращений или пропущенного кода: все должно быть указано ровно так, как показано в примере.

Несколько файлов initrd могут быть разделены запятыми в /boot/syslinux/syslinux.cfg:

LABEL arch
    MENU LABEL Arch Linux
    LINUX ../vmlinuz-linux
    INITRD ../intel-ucode.img,../initramfs-linux.img
    APPEND ...

Проверим, обновился ли microcode при загрузке

Чтобы убедиться, что микрокод обновился, воспользуемся /usr/bin/dmesg:

$ dmesg | grep microcode

На системах Intel вы должны увидеть что-то похожее на это, что говорит о том, что микрокод обновился рано:

[    0.000000] CPU0 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.221951] CPU1 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.242064] CPU2 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.262349] CPU3 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.507267] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507272] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507276] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507281] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507286] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507292] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507296] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507300] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507335] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

Вполне возможно, особенно с новым аппаратным обеспечением, что для вашего CPU нет обновления микрокода. В этом случае вы можете увидеть примерно следующее:

[    0.292893] microcode: CPU0 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292899] microcode: CPU1 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292906] microcode: CPU2 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292912] microcode: CPU3 sig=0x306c3, pf=0x2, revision=0x1c
[    0.292956] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

На системах AMD микрокод обновляется несколько позже в процессе загрузки, поэтому вывод выглядит примерно так:


[    0.807879] microcode: CPU0: patch_level=0x01000098
[    0.807888] microcode: CPU1: patch_level=0x01000098
[    0.807983] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
[   16.150642] microcode: CPU0: new patch_level=0x010000c7
[   16.150682] microcode: CPU1: new patch_level=0x010000c7
Обратите внимание: Отображаемая дата отвечает не за версию установленного пакета intel-ucode. Это дата последнего обновления микрокода от Intel для вашего конкретного процессора.

Каким CPU нужны обновления микрокода

Пользователи могут проконсультироваться как у Intel, так и у AMD насчёт поддержки конкретной модели процессора, перейдя по следующим ссылкам:

Обнаружение доступного обновления микрокода

Вы можете узнать, содержит ли intel-ucode.img образ микрокода для вашего процессора с помощью iucode-tool.

  • Установите intel-ucode (для обнаружения обновления не требуется менять initrd)
  • Установите iucode-tool из AUR
  • # modprobe cpuid
  • # bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
(Команда извлекает образ микрокода и ищет в нём ваш cpuid)
  • Если обновление доступно, оно должно отобразиться под selected microcodes

Применение ранней загрузки микрокода Intel в кастомных ядрах

Для того, чтобы ранняя загрузка работала в кастомных ядрах, "CPU microcode loading support" должен быть вкомпилирован в ядро, а НЕ скомпилирован как модуль. Это активирует "Early load microcode" промпт, который должен быть установлен в "Y".

CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_INTEL_EARLY=y
CONFIG_MICROCODE_EARLY=y

Смотрите также