Microcode (Русский)
Микрокод - это что-то наподобие прошивки для процессора. Ядро может обновлять прошивку процессора без необходимости обновлять её с помощью обновления BIOS.
- "В файле данных с микрокодом процессора содержатся новейшие определения микрокодов для всех процессоров Intel. Intel выпускает обновления микрокодов, чтобы обеспечить корректный режим работы процессоров, как описано в соответствующих спецификациях по обновлению процессоров. Обычно этот микрокод обновляется вместе с базовой системой ввода-вывода, но разработчики корпорации Intel понимают, что с этим могут быть административные проблемы. В операционной системе Linux и продуктах VMware ESX есть механизм обновления микрокода после загрузки. Например, чтобы ОС смогла использовать этот файл, его необходимо поместить в каталог /etc/firmware ОС Linux."
Contents
Обновление микрокода
Для процессоров Intel установите intel-ucode.
Для процессоров AMD обновления микрокода поставляются в пакете linux-firmware, который был устанавлен как часть базовой системы.
Применение обновлений микрокода 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 [...]
Syslinux
Несколько файлов 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
Каким 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