何気に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の順。
なお、ファイルの中身はヘッダー+暗号化されたマイクロコードである。