Сразу к делу: микрокод процессора это набор патчей для встроенной прошивки CPU, который операционная система загружает при старте, чтобы исправить ошибки и уязвимости, найденные после выпуска железа. В Arch Linux для этого ставят пакет intel-ucode (Intel) или amd-ucode (AMD), а обновление микрокода происходит обычным pacman -Syu. Проверить, что микрокод загружен, можно через dmesg или /proc/cpuinfo.
Микрокод это слой прошивки внутри CPU, который управляет тем, как процессор исполняет инструкции. Процессор это сложное устройство, и после выхода на рынок в нём находят ошибки: неверное поведение в редких ситуациях, зависания, уязвимости. Производитель не может перевыпустить миллионы чипов, поэтому выпускает микрокод. Обновление прошивки загружается в процессор при каждом старте системы.
Такие патчи закрывают и проблемы безопасности. Спектральные атаки вроде Spectre, Meltdown, Retbleed, Downfall и Inception частично лечатся именно микрокодом: процессор получает новые механизмы защиты, а ядро включает их через свои настройки. Без свежего микрокода часть защит просто не работает.
Как это работает на уровне железа? Процессор исполняет инструкции не напрямую, а через внутренний слой микропрограммы. Микрокод описывает, как каждая инструкция раскладывается на элементарные операции. Производитель может поменять это поведение уже после продажи чипа: загрузить новую версию микропрограммы, и процессор начнёт исполнять проблемную инструкцию иначе. Так чинятся и ошибки (errata), и уязвимости, без замены железа.
Ошибки в CPU находят постоянно, даже спустя годы после выпуска. Обновления микрокода выходят чаще, чем обновления BIOS, поэтому Linux загружает микрокод сам, на раннем этапе загрузки, ещё до запуска основной системы. Такой способ называется early microcode: патчи применяются к процессору в самом начале, и все последующие компоненты уже работают с исправленным CPU.
Ядро и микрокод работают в паре. Ядро знает, какие уязвимости закрыты, и включает соответствующие механизмы защиты. Если микрокод старый, ядро может сообщить, что система уязвима, даже если само ядро свежее.
Почему так важно загрузить микрокод именно рано? Потому что часть патчей меняет поведение инструкций, которыми пользуется само ядро. Если ядро начнёт работать со старой версией микропрограммы, а потом микрокод обновится, часть исправлений уже не применится корректно. Поэтому загрузчик подхватывает образ микрокода до запуска ядра, вместе с initramfs. На этом этапе процессор уже получает свежую ревизию, и дальше вся система работает с ней.
Установка занимает одну команду. Для процессоров Intel:
pacman -S intel-ucode
Для процессоров AMD:
pacman -S amd-ucode
Пакет кладёт образ микрокода в /boot. Дальше перегенерируй конфиг загрузчика:
grub-mkconfig -o /boot/grub/grub.cfg
grub-mkconfig сам добавит строку initrd /intel-ucode.img перед основным initramfs. Загрузка идёт так: сначала микрокод, потом initramfs-linux.img. Если используешь systemd-boot, строку initrd /intel-ucode.img придётся добавить в файл загрузочной записи вручную.
После установки проверь, что пакет на месте и образ появился в /boot:
pacman -Q intel-ucode
ls /boot/intel-ucode.img
Для AMD команды те же, только имя пакета и файла меняется на amd-ucode и amd-ucode.img. Если образ не появился, переустанови пакет: pacman -S intel-ucode --force. Дальше просто перегенерируй конфиг загрузчика и перезагрузись.
Со временем в /boot накапливаются старые образы ядра и initramfs. Как почистить их без вреда, рассказано в статье «Чистка старых ядер и initramfs».
После перезагрузки проверь журнал:
dmesg | grep microcode
Если микрокод обновился при старте, увидишь строку вроде microcode: updated early: current=0x... date=.... Если обновления не было, появится microcode: sig=0x..., pf=0x..., revision=0x.... Это значит, что микрокод уже загружен, например из BIOS, и ядро решило не перезаписывать его.
Второй способ: посмотреть ревизию прямо из системы.
cat /proc/cpuinfo | grep microcode
Строка microcode показывает текущую ревизию прошивки. Сравни её с ревизией из dmesg: если совпадают, всё в порядке.
Есть и третий способ, через lscpu:
lscpu | grep -i microcode
Поле Microcode в выводе покажет ту же ревизию, что и /proc/cpuinfo. Если хочешь узнать, какая версия микрокода актуальна для твоего CPU, сравни ревизию с последней версией пакета: pacman -Q intel-ucode выведет номер обновления, а свежие ревизии перечислены на странице пакета в репозитории.
Обновление микрокода не требует отдельных действий. Новые патчи приходят вместе с обновлением пакета через pacman -Syu, так что обычный цикл обновления системы закрывает и микрокод.
Spectre, Meltdown, Retbleed, Downfall, Inception. Для каждой из этих атак нужны и свежий микрокод, и свежее ядро. Обновление только одного из них оставляет дыру. Поэтому после выхода крупных бюллетеней безопасности обновляй систему целиком, а не выборочно.
Микрокод чинит не только уязвимости. Частые симптомы, которые лечатся обновлением прошивки CPU: зависания в простоях (idle hang), проблемы с C-states, случайные зависания под нагрузкой, ошибки в редких инструкциях. Если система стабильно зависает и логи не показывают причину, попробуй обновить микрокод.
Как понять, что вышла новая версия микрокода? Просто обнови систему: pacman -Syu. Если пакет intel-ucode или amd-ucode получил новую версию, значит, производитель выпустил свежие патчи. После обновления пакета перегенерируй grub.cfg и перезагрузись, чтобы микрокод применился. Старая версия микрокода останется в процессоре до следующей перезагрузки, так что спешить некуда, но и тянуть не стоит.
Свежий CPU, например Arrow Lake, требует свежего микрокода и свежего ядра. Старый микрокод может не знать о новом процессоре, и часть функций будет работать неправильно. Выбор подходящего ядра разобран в статье «Какое ядро выбрать: linux, linux-lts, linux-zen, linux-hardened».
BIOS/UEFI тоже загружает микрокод при включении компьютера. Но обновления прошивки материнской платы выходят редко, а микрокод от производителя CPU часто. Linux загружает свой микрокод поверх BIOS-версии, если он новее. Если BIOS-версия новее, ядро пропускает загрузку и использует ту, что уже в процессоре.
Поэтому не жди обновления BIOS ради свежего микрокода. На Linux стандартный путь это пакет intel-ucode или amd-ucode. Про обновление прошивок в целом читай в статье «linux-firmware: что обновляется».
Есть нюанс: если BIOS-версия микрокода новее, чем в пакете, ядро пропустит загрузку и оставит ту, что уже в процессоре. В dmesg при этом появится строка microcode: current revision already up to date. Это нормально: система использует самую свежую из доступных версий. Проблема возникает только в обратную сторону, когда BIOS старый, а пакет свежий. Тогда ранняя загрузка микрокода из ОС закрывает разрыв.
Редкий, но возможный сценарий: свежий микрокод вызывает зависание на конкретном железе. Тогда загрузись с запасной записи. В меню GRUB нажми e, удали строку initrd /intel-ucode.img (или amd-ucode.img) и загрузись. Система стартует со старым микрокодом из BIOS.
Дальше можно откатить пакет. Если предыдущая версия ещё в кэше pacman:
pacman -U /var/cache/pacman/pkg/intel-ucode-<версия>.pkg.tar.zst
Или просто удали пакет и перегенерируй конфиг:
pacman -R intel-ucode
grub-mkconfig -o /boot/grub/grub.cfg
Проверь в dmesg, что именно загрузилось: строка microcode: updated early подтверждает, что ранний микрокод применился. Если после правок GRUB перестал находить записи, поможет статья «grub rescue: что делать». А если хочешь управлять микрокодом через параметры ядра, смотри «Динамический микрокод через kernel cmdline».
Важно отличать зависание из-за микрокода от других проблем. Если система не грузится и до появления строки microcode: updated early в журнале, дело скорее в загрузчике или ядре, а не в микрокоде. Если же зависание происходит сразу после этой строки, виновник найден: откатывай пакет и сообщай о проблеме на багтрекер, чтобы следующая версия микрокода учла твоё железо.
Да. Новый CPU без свежего микрокода может работать с ошибками, которые уже исправлены в последних версиях. Плюс новые процессоры часто требуют свежего ядра: старые ядра просто не знают о новом железе. Поэтому для нового CPU обнови и микрокод, и ядро, и linux-firmware.
Нет. BIOS загружает микрокод при включении, но это лишь одна из его задач. Микрокод отдельная прошивка CPU, которую можно обновлять и из ОС. На Linux обновление через пакет intel-ucode или amd-ucode работает быстрее и чаще, чем через BIOS.
Нет. Пакет микрокода обновляется независимо от ядра, обычным pacman -Syu. После установки или обновления пакета достаточно перегенерировать grub.cfg и перезагрузиться.
Загрузись без строки initrd /intel-ucode.img в GRUB, затем удали пакет или поставь предыдущую версию из кэша pacman командой pacman -U. После этого перегенерируй grub.cfg.
Некоторые защиты от спекулятивных атак дают небольшой оверхед, но это цена безопасности. В обычных задачах разницу не заметишь. Отключать микрокод ради скорости не стоит.
Посмотри модель CPU командой lscpu, затем поставь пакет по производителю: intel-ucode для Intel, amd-ucode для AMD. Пакет сам содержит микрокод для всех поддерживаемых моделей. Отдельно выбирать версию под конкретный CPU не нужно: пакет включает патчи для всех процессоров производителя, а ядро применит подходящий.
Нет. Пакет intel-ucode или amd-ucode обновляется только через pacman -Syu, как и остальные пакеты. После обновления пакета нужна перезагрузка, чтобы новый микрокод попал в процессор. Без перезагрузки система продолжит работать со старой версией до следующего старта.
Микрокод это быстрый и безопасный способ починить процессор без замены железа. В Arch Linux он ставится одним пакетом, обновляется вместе с системой и применяется при каждой загрузке. Проверяй dmesg после установки, не пропускай обновления после бюллетеней безопасности и помни: свежий микрокод нужен не только для защиты, но и для стабильности, особенно на новом железе.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии