発生した問題
$ dmesg | grep microcode
[ 0.025038] [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x20 (or later)
[ 0.092753] SRBDS: Vulnerable: No microcode
[ 0.092754] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
[ 0.422608] microcode: sig=0x40651, pf=0x40, revision=0x17
[ 0.422657] microcode: Microcode Update Driver: v2.2.
Gentoo Linux をインストール後,カーネルメッセージに [Firmware Bug]: TSC_DEADLINE disabled due to Errata;
と出力されていました.これは,CPU のマイクロコードのアップデートを正しく読み込めず,古いもの (今回は 0x17
) を読んでいることが原因でした.私の環境は次の通りです.
OS : Gentoo Linux Kernel : 5.4.48-gentoo CPU : intel Core i5-4210U
intel の資料によれば,この CPU で期待されるリビジョンは 2019/08/31 の時点で 0x25
です.
やったこと
最初に,Gentoo Wiki を参考にカーネルコンフィグを設定し,必要なツール類をインストールしました.
# emerge sys-kernel/linux-firmware sys-firmware/intel-microcode sys-apps/iucode_tool
次に,fwupd で UEFI のアップデートを確認しました.UEFI が古い場合,マイクロコードのアップデートに対応できないことがあるそうなので念のため行いました.
ここでマイクロコードをリロードしてみたところ,新しいマイクロコードが読み込まれ,リビジョンが 0x26
になっていました.
# echo 1 > /sys/devices/system/cpu/microcode/reload
$ dmesg | grep microcode
[ 0.025038] [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x20 (or later)
[ 0.092753] SRBDS: Vulnerable: No microcode
[ 0.092754] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
[ 0.422608] microcode: sig=0x40651, pf=0x40, revision=0x17
[ 0.422657] microcode: Microcode Update Driver: v2.2.
[ 9151.754308] microcode: updated to revision 0x26, date = 2019-11-12
[ 9151.755893] x86/CPU: CPU features have changed after loading microcode, but might not take effect.
[ 9151.755901] microcode: Reload completed, microcode revision: 0x26
マイクロコードのアップデートを適用できることがわかったので,ロードされているマイクロコードのファイルを調べ,カーネルに組み込むことにしました.
システムに必要なマイクロコードだけをインストールするように,/etc/portage/make.conf
に
MICROCODE_SIGNATURES="-S"
を追記し,マイクロコードのパッケージを再構成しました.
# emerge -1 intel-microcode
これでシステムに適したマイクロコードだけがインストールされました.
$ iucode_tool -S -l /lib/firmware/intel-ucode/*
iucode_tool: system has processor(s) with signature 0x00040651
microcode bundle 1: /lib/firmware/intel-ucode/06-45-01
selected microcodes:
001/001: sig 0x00040651, pf_mask 0x72, 2019-11-12, rev 0x0026, size 22528
iucode_tool
コマンドの結果から,/lib/firmware/intel-ucode/06-45-01
がこのマシンで使うマイクロコードのファイルであることがわかりました.
これをカーネルに組み込むために,カーネルコンフィグを変更しました.make menuconfig
で Build named firmware blobs into the kernel binary
の欄に調べたファイル名を入力し,再ビルド,インストールしました.
Device Drivers --->
Generic Driver Options --->
Firmware Loader --->
-*- Firmware loading facility
(intel-ucode/06-45-01) Build named firmware blobs into the kernel binary
(/lib/firmware) Firmware blobs root directory (NEW)
再起動するとマイクロコードのアップデートがちゃんと適用され,[Firmware Bug]: TSC_DEADLINE disabled due to Errata;
はなくなりました.
$ dmesg | grep microcode
[ 0.000000] microcode: microcode updated early to revision 0x26, date = 2019-11-12
[ 0.314334] microcode: sig=0x40651, pf=0x40, revision=0x26
[ 0.314375] microcode: Microcode Update Driver: v2.2.
コメント