Умение обновить или установить конкретный микрокод CPU, а также понимание как взаимодействовать с ним в Linux/Windows системах, может помочь во многих ситуациях.
Имеется серверная материнская плата "Supermicro X11SPI-TF" у которой в BIOS не вшит конкретный микрокод для работы с инженерным образцом "Xeon Platinum 8960 - ql1k" и соответственно, без нужного микрокода М.П. откажется запускаться с этим CPU. Или например, после обнаружения "Spectre/Meltdown", Intel начала распространять обновления микрокода (заплатки), которые призваны устранять аппаратные уязвимости, но на CPU с архитектурой Haswell-EP в некоторых задачах наблюдается падение производительности. Необходимо сделать процедуру "Unlock Turbo Boost" которой подвержены "Xeon Haswell-EP" (v3 серии со steping 2, QS, Final), во время процедуры из BIOS необходимо удалить микрокод 306F2 и подгрузить из ОС свой.
Intro:
Сам микрокод встроен в BIOS материнской платы, также может подгружаться с обновлениями ОС или же с помощью специальных утилит на работающей системе.
Linux:
На примере Debian Bullseye установим заданный микрокод.
iucode-tool: [man]
Для создания ".img" - можно использовать как ".dat", так и ".bin".
Установка:
# nano /etc/apt/sources.list
Добавляем к main -> contrib.
# apt update && apt install iucode-tool
Получить информацию о CPU:
# grep -E '^(cpu family|model|stepping|microcode)' /proc/cpuinfo | sort -u
v1 - до загрузки ОС: рекомедованный
Поместить сгенерированный файл ".img" в директорию "/boot/"", далее с помощью "update-grub" обновить конфигурацию "/boot/grub/grub.cfg"".
# dmesg | grep "microcode"
# cat /proc/cpuinfo | grep -e "model" -e "stepping" -e "microcode" -e "cpu family" | sort | uniq
# iucode-tool --write-earlyfw=/boot/intel-ucode.img /home/mtv/ucode/cpu306F2_plat6F_ver00000039_2016-10-07_PRD_FAFD9EFD.bin
# iucode-tool --write-earlyfw=/boot/intel-ucode.img /home/mtv/ucode/microcode.dat
# update-grub
# reboot
v2 из ОС:
# mkdir /lib/firmware/intel-ucode
# iucode-tool -K /home/mtv/ucode/microcode.dat
# ucode-tool -K /home/mtv/ucode/cpu306F2_plat6F_ver00000039_2016-10-07_PRD_FAFD9EFD.bin
# echo 1 > /sys/devices/system/cpu/microcode/reload
# dmesg | grep "microcode"
# update-initramfs -u
# reboot
Ссылки:
Windows:
Задача, после процедуры "Unlock Turbo Boost", "link2" необходимо предотвратить подгрузку ненужного микрокода средствами самой ОС и добавить свой "0x39" с помощью "cpumcupdate 2.1". Сама утилита принимает файлы с расширением ".dat". Начиная с выпуска микрокодов "2018-04-25" Intel перестала распространять их с файлом "microcode.dat", только бинарные файлы. Для того чтобы решить эту проблему существует утилита "Intel Microcode.dat Converter".
mcupdate_GenuineIntel.dll:
Отключаем подгрузку микрокода средствами ОС.
Необходимо переименовать файл в "C:\Windows\System32\mcupdate_GenuineIntel.dll".
Intel Microcode.dat Converter: intel_microcodes.zip
Создаем вложенные директории с таким путем "out/intel-ucode" в "out" обязательно должна быть - "intel-ucode". Помещаем в нее бинарные (.bin) файлы, далее в "Browse" указываем путь к "out" и жмем "Convert".
cpumcupdate2.1:
Полученный файл "microcode.dat" помещаем в директорию "cpumcupdate2.1/" и запускаем от имени администратора "install.bat". Перезагружаемся и смотрим "uCU" в выводе программы "HWiNFO".
MC_Extractor: [link]
Среди полезных функций можно отметить проверку в базе доступных микрокодов для заданной модели CPUID, конвертиртацию ".dat" в ".bin".
> MCE.exe -search
306F2
Утилиты для работы с BIOS:
Также могут пригодится.
- UEFI BIOS Updater: UBU - Инструмент для модификации BIOS все в одном. [link];
- UEFITool: Модификация UEFI firmware images. [link];
- AMIBCP: Настройка пунктов в bios для последующего сохранения. [link];
- MMTool: Модификация bios. [см. выше];
Ссылки:
- Модификация UEFI BIOS. Софт для работы. [link];
- UBU: Микрокоды CPU - МикроFAQ "Готовим сами". [link];
- Архив с программами с этой статьи. [link];