Вопрос или проблема
Для Intel есть информация, такая как microcode-update-guidance.pdf и releasenote, я не смог найти подобной информации об обновлениях микрокода процессоров AMD.
Есть ли она где-то в наличии?
Ближе всего, что я смог найти, – это сообщественный репозиторий микрокодов для процессоров Intel, VIA и AMD: https://github.com/platomav/CPUMicrocodes/
Список микрокодов AMD (с номерами версий) находится здесь:
https://github.com/platomav/CPUMicrocodes/tree/master/AMD
Объяснение имен файлов находится в первой ссылке. Вкратце, оно содержит:
- CPUID
- Ревизия (счетчик ревизий обновлений микрокода)
- Дата (дата его публичного выпуска)
- Контрольная сумма
Ответ @david – отличная подсказка. Однако на основе его пришлось потратить много времени на разбирательство.
Поэтому я не смог найти способ получить правильный CPUID ни на Linux, ни на Windows. В конце концов, я нашел CPUID на http://instlatx64.atw.hu/ (увидел это в README для MC Extractor) и выяснил, что у Ryzen 3600 ID 00870F10
.
Текущий микрокод, который я мог видеть из BIOS, dmesg
, dmidecode
, /proc/cpuinfo
, cpuid
(в Windows hwinfo и CPUz тоже показывали его). Он был 8701030
для меня (материнская плата имеет AGESA 1.2.0.B, в то время как исправление zenbleed должно быть в 1.2.0.C, см. AMD бюллетень).
Затем в репозитории CPUMicrocodes я увидел на основе CPUID, что есть также новый микрокод 08701033
, который, надеюсь, должен содержать исправление zenbleed.
Обновление, я вижу, как можно увидеть этот CPUID, вывод cpuid -r
. Для моего процессора это eax
при 0x00000001
и 0x80000001
. Вероятно, это должно быть одинаково и для других процессоров.
Как его загрузить? Это выходит за рамки, но в основном нужно упаковать сырой микрокод в файл, который может быть понят ядром, и затем объединить его (или заменить) с оригинальным файлом микрокода, в моем случае /usr/lib/firmware/amd-ucode/microcode_amd_fam17h.bin
.
Для этого вы можете использовать два инструмента – amd-ucodegen и amd_ucode_info.
Я написал блог о всей этой теме:
https://rboci.blogspot.com/2024/04/zenbleed-microcode-update-on-amd-ryzen.html
В итоге, основная причина, по которой я провел это упражнение, того не стоила, потому что наивный тест показывает фактически незначительные отрицательные результаты по многопоточности и только незначительное улучшение в однопоточном режиме.
Но в общем, вот как можно найти и установить новый микрокод AMD на Linux.
Ответ или решение
Определение актуальной версии микрокода для процессора AMD может быть задачей, требующей определенного опыта и знаний. Данный процесс не столь прямолинеен, как в случае с Intel, где официальные документы и репозитории содержат актуальную информацию о микрокодах. Однако, следуя описанным шагам и используя некоторые инструменты, можно успешно обновить микрокод вашего процессора AMD.
Теория
Микрокод — это низкоуровневое программное обеспечение, встроенное непосредственно в процессор, позволяющее устранять аппаратные ошибки или оптимизировать производительность без замены физического оборудования. Процессоры AMD, как и другие процессоры, периодически получают обновления микрокода для исправления уязвимостей или улучшения характеристик.
Однако в отличие от Intel, AMD не предоставляет централизованные и легко доступные источники для получения последней версии микрокода. Поэтому, чтобы определить, какая версия микрокода доступна для вашего процессора, необходимо полагаться на сторонние источники и репозитории, такие как открытые проекты на GitHub.
Пример
Процесс поиска актуального микрокода для процессора AMD начинается с определения CPUID вашего процессора. CPUID — это уникальный идентификатор, который помогает определить модель и возможности процессора. В приведенном примере, Ryzen 3600 имеет CPUID "00870F10". Этот идентификатор можно узнать с помощью утилиты cpuid
на Linux или различных приложений, таких как HWInfo
или CPU-Z
на Windows.
После этого можно обратиться к общественному репозиторию на GitHub, например, "platomav/CPUMicrocodes", где для каждой модели процессора AMD регулярно обновляется информация о доступных версиях микрокода. В этом репозитории вы можете найти подразделение для микрокодов AMD, где указаны версия микрокода, дата его выпуска и некоторые другие параметры.
Например, для процессора с CPUID "00870F10" может существовать одна или несколько актуальных версий микрокода, которые лучше всего подходят для использования с учетом последних исправлений и обновлений. В частности, для устранения уязвимости "Zenbleed" требуется микрокод с определенной версией, информацию о которой также можно найти в репозитории.
Применение
После того, как вы найдете нужную версию микрокода в репозитории, его необходимо интегрировать в вашу систему. Существует несколько подходов как автоматизировать этот процесс на уровне системы, однако для Linux системы обычно используются такие инструменты как amd-ucodegen
и amd_ucode_info
. Эти инструменты помогают преобразовать сырой микрокод в файл, который может быть применен операционной системой.
На практике это означает последовательную интеграцию обновленного микрокода в системный загрузчик и последующее обновление ядра Linux. Например, обновление файлов в директории /usr/lib/firmware/amd-ucode/
позволит загрузить новый микрокод при следующей инициализации системы.
После обновления микрокода важно провести тестирование системы для оценки производительности и убедиться, что обновление действительно улучшило работу процессора. В некоторых случаях, как показали менее оптимистичные результаты одного из тестов упомянутого ранее блога, производительность после обновления может снизиться, что указывает на необходимость предварительной оценки и возможного отката обновлений в случае негативного влияния.
Вывод
Таким образом, поиск и обновление микрокода AMD — это комплексный процесс, требующий внимания к техническим деталям и использования сторонних ресурсов. Несмотря на некоторые сложности, возможность самостоятельного управления микрокодом открывает перспективы по улучшению безопасности и производительности системы, особенно в условиях ограниченной поддержки на уровне официальных каналов AMD. Это важно для IT-специалистов, ответственных за эксплуатацию и обслуживание высокопроизводительных систем обработки данных.