以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

UbuntuでCPUのマイクロコードの更新を適用するようにしてみた

https://rita.xyz/blog/pixabay/pins-564775-w240-gz.jpg何気にUbuntu機のCPU(Intel Core 2 Duo E6320)のマイクロコードの更新を適用するようにしてみた。マイクロコードの更新はCPUのエラッタ(バグ)を修正するなどの目的で行われる。BIOSレベルでの適用の他、今回のようにOSレベルでの適用も可能。

方法

UbuntuかつIntelのCPUではintel-microcodeというパッケージをインストールするだけであとは勝手にやってくれる。AMDのCPUの場合はamd64-microcodeとなる。

$ sudo apt-get install intel-microcode
$ dmesg | grep microcode
[    1.120951] microcode: CPU0 sig=0x6f6, pf=0x1, revision=0x44
[    1.120960] microcode: CPU1 sig=0x6f6, pf=0x1, revision=0x44
[    1.121014] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
[43821.218556] microcode: CPU0 sig=0x6f6, pf=0x1, revision=0x44
[43821.218799] microcode: CPU0 updated to revision 0xd0, date = 2010-09-30
[43821.218853] microcode: CPU1 sig=0x6f6, pf=0x1, revision=0x44
[43821.219092] microcode: CPU1 updated to revision 0xd0, date = 2010-09-30

インストール完了時点でマイクロコードがリビジョン0x44からリビジョン0xd0へ更新された模様。マイクロコード更新の効果は再起動するまで有効だが、Linux起動時に自動的に適用されるので再起動後dmesgを覗いてみる。

$ dmesg | grep microcode
[    0.000000] microcode: CPU0 microcode updated early to revision 0xd0, date = 2010-09-30
[    0.008000] microcode: CPU1 microcode updated early to revision 0xd0, date = 2010-09-30
[    1.116937] microcode: CPU0 sig=0x6f6, pf=0x1, revision=0xd0
[    1.116945] microcode: CPU1 sig=0x6f6, pf=0x1, revision=0xd0
[    1.116999] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

起動シーケンスの初期段階でマイクロコードの更新が適用されていることが確認できる。
OSレベルでの適用なのでLinux起動中のみマイクロコードの更新が適用される(他のOSでは、実装によっては更新されないので注意)。

マイクロコードが入っているファイルはどこにあるの?

intel-microcodeの場合は/lib/firmware/intel-ucodeの中にある。

$ ls /lib/firmware/intel-ucode
06-0f-06  06-17-06  06-1c-0a  06-2a-07  06-3e-04  0f-04-01  0f-04-0a
06-0f-07  06-17-07  06-1d-01  06-2d-06  06-3e-06  0f-04-03  0f-06-02
06-0f-0a  06-17-0a  06-1e-04  06-2d-07  06-3e-07  0f-04-04  0f-06-04
06-0f-0b  06-1a-04  06-1e-05  06-2f-02  06-45-01  0f-04-07  0f-06-05
06-0f-0d  06-1a-05  06-25-02  06-3a-09  06-46-01  0f-04-08  0f-06-08

ファイル名の法則は多分Family-Model-Steppingの順。
なお、ファイルの中身はヘッダー+暗号化されたマイクロコードである。