Microcode (Русский)
Производители процессоров выпускают обновления стабильности и безопасности для микрокода процессора. Несмотря на то, что микрокод можно обновить с помощью BIOS, ядро Linux также может применять эти обновления во время загрузки. Эти обновления предоставляют исправления ошибок, которые могут быть критичны для стабильности вашей системы. Без этих обновлений вы можете наблюдать ложные падения или неожиданные зависания системы, которые может быть сложно отследить.
Особенно пользователи процессоров семейства Intel Haswell и Broadwell должны установить эти обновления, чтобы обеспечить стабильность системы. Но, понятное дело, все пользователи Intel должны устанавливать эти обновления.
Contents
Обновление микрокода
Для процессоров AMD обновления микрокода поставляются в пакете linux-firmware, который был установлен как часть базовой системы. Дальнейших действий не требуется.
Для процессоров Intel установите пакет intel-ucode и продолжайте читать.
Применение обновлений микрокода Intel
Микрокод должен быть загружен загрузчиком. Из-за большого разнообразия конфигураций ранней загрузки у пользователей обновления микрокода Intel могут быть не применены автоматически конфигурацией Arch по умолчанию. Многие ядра в AUR пошли по пути официальных Arch ядер в этом вопросе.
Чтобы применить эти обновления, добавьте /boot/intel-ucode.img
в качестве первого initrd в конфигурационном файле загрузчика. Это в дополнение к обычному initrd файлу. Смотрите ниже инструкции для популярных загрузчиков.
Конкретные примеры
EFI boot stub / EFI handover
Добавьте две initrd=
опции:
initrd=/intel-ucode.img initrd=/initramfs-linux.img
systemd-boot
Используйте 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=intel-ucode.img initrd=initramfs-linux.img"
Пользователи, которые создают строфы вручную в /boot/refind.conf
для определения ядер должны просто добавить initrd=/intel-ucode.img
или /boot/intel-ucode.img
как это требуется в строке опций, а не в главной части строфы.
Grub
grub-mkconfig автоматически обнаружит обновление микрокода и соответствующе сконфигурирует grub. После установки пакета intel-ucode пользователи должны пересоздать конфигурацию grub для активации загрузки обновления микрокода, выполнив команду:
# grub-mkconfig -o /boot/grub/grub.cfg
В качестве альтернативы, пользователи, которые вручную управляют файлом конфигурации 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-toolAUR.
- Установите intel-ucode (для обнаружения обновления не требуется менять initrd)
- Установите iucode-toolAUR из 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