NetBSD/amd64を使っているマシンのCPUのマイクロコードをアップデートする

この記事は、NetBSD Advent Calendar 2016の18日目の記事です。

はじめに

これまで、購入したマシンは、WindowsなりmacOSなりはすぐに消してしまっている ので、BIOS的なもののアップデートもしていませんでした。 BIOS的なものくらいは、起動可能なUSBメモリー用のイメージ等で配布して欲しいものです。 昔はフロッピーディスクで起動させて更新したこともあった気がします。 ああ言うオペレーティングシステムによらない更新が望ましい気がします。

IntelのCPUは、マイクロコードをロードすることができます。 この作業は、NetBSDでも、pkgsrc/sysutils/intel-microcode-netbsdで実施する ことができます。 これまで一度も試したことがありませんでしたが、常用のラップトップである 東芝dynabook R63/PSで試してみました。

pkgsrc/sysutils/intel-microcode-netbsdをインストールする

2016年12月18日現在のintel-microcode-netbsdのバージョンは、20161104です。 以下のようにインストールします。


$ cd /usr/pkgsrc/sysutils/intel-microcode-netbsd
$ make install
$ make clean-depends clean

/usr/pkg/share/examples/rc.d/intel-microcodeと言う起動スクリプト もインストールされます。 以下のようにして、インストールし、再起動時に実行されるように設定します。


# cp /usr/pkg/share/examples/rc.d/intel-microcode /etc/rc.d
# echo "microcode=YES" >> /etc/rc.conf

ロードしてみる

ロードする前には、現在の状況を確認しておきましょう。


# cpuctl identify 0
のように実行して、最終行に表示されるのが、マイクロコードのリビジョンです。

cpu0: highest basic info 00000014
cpu0: highest extended info 80000008
cpu0: "Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz"
cpu0: Intel Core M-5xxx, 5th gen Core (Broadwell) (686-class), 2394.64 MHz
cpu0: family 0x6 model 0x3d stepping 0x4 (id 0x306d4)
cpu0: features 0xbfebfbff
cpu0: features 0xbfebfbff
cpu0: features 0xbfebfbff
cpu0: features1 0x7ffafbbf
cpu0: features1 0x7ffafbbf
cpu0: features1 0x7ffafbbf
cpu0: features1 0x7ffafbbf
cpu0: features2 0x2c100800
cpu0: features3 0x121
cpu0: xsave features 0x7
cpu0: xsave instructions 0x1
cpu0: xsave area size: current 832, maximum 832, xgetbv enabled
cpu0: enabled xsave 0x7
cpu0: I-cache 32KB 64B/line 8-way, D-cache 32KB 64B/line 8-way
cpu0: L2 cache 256KB 64B/line 8-way
cpu0: L3 cache 4MB 64B/line 16-way
cpu0: 64B prefetching
cpu0: ITLB 64 4KB entries 8-way, 2M/4M: 8 entries
cpu0: DTLB 64 4KB entries 4-way
cpu0: L2 STLB 1536 4KB entries 6-way
cpu0: L1 1GB page DTLB 4 1GB entries 4-way
cpu0: Initial APIC ID 0
cpu0: Cluster/Package ID 0
cpu0: Core ID 0
cpu0: SMT ID 0
cpu0: DSPM-eax 0x77
cpu0: DSPM-ecx 0x9
cpu0: SEF highest subleaf 00000000
cpu0: SEF-main 0x21c27ab
cpu0: SEF-main 0x21c27ab
cpu0: microcode version 0x19, platform ID 6
最終行にあるように、リビジョンは0x19です。

では、再起動してみましょう。(再起動しなくても、スクリプトを実行するだけで 良いはずですが)

ロード後の様子

では、どう変わったか確認してみましょう。


# cpuctl identify 0
cpu0: highest basic info 00000014
cpu0: highest extended info 80000008
cpu0: "Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz"
cpu0: Intel Core M-5xxx, 5th gen Core (Broadwell) (686-class), 2394.64 MHz
cpu0: family 0x6 model 0x3d stepping 0x4 (id 0x306d4)
cpu0: features 0xbfebfbff
cpu0: features 0xbfebfbff
cpu0: features 0xbfebfbff
cpu0: features1 0x7ffafbbf
cpu0: features1 0x7ffafbbf
cpu0: features1 0x7ffafbbf
cpu0: features1 0x7ffafbbf
cpu0: features2 0x2c100800
cpu0: features3 0x121
cpu0: xsave features 0x7
cpu0: xsave instructions 0x1
cpu0: xsave area size: current 832, maximum 832, xgetbv enabled
cpu0: enabled xsave 0x7
cpu0: I-cache 32KB 64B/line 8-way, D-cache 32KB 64B/line 8-way
cpu0: L2 cache 256KB 64B/line 8-way
cpu0: L3 cache 4MB 64B/line 16-way
cpu0: 64B prefetching
cpu0: ITLB 64 4KB entries 8-way, 2M/4M: 8 entries
cpu0: DTLB 64 4KB entries 4-way
cpu0: L2 STLB 1536 4KB entries 6-way
cpu0: L1 1GB page DTLB 4 1GB entries 4-way
cpu0: Initial APIC ID 0
cpu0: Cluster/Package ID 0
cpu0: Core ID 0
cpu0: SMT ID 0
cpu0: DSPM-eax 0x77
cpu0: DSPM-ecx 0x9
cpu0: SEF highest subleaf 00000000
cpu0: SEF-main 0x21c27ab
cpu0: SEF-main 0x21c27ab
cpu0: microcode version 0x24, platform ID 6
マイクロコードのリビジョンが0x24になっています。

維持するには

intel-microcode-netbsdを一度実行したところで、CPU内のマイクロコードが 書き替わる訳ではないようです。 毎回、起動時にロードし直してやる必要があります。 ですので、intel-microcode-netbsdパッケージを忘れずインストールして おかないといけません。 私は、自分用のメタパッケージに追加しておきました。

おわりに

今のところ、特別動作が速くなったとの実感はないです…。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

NetBSDからCanon LBP3100に印刷する

この記事は、 NetBSD Advent Calendar 2024 の2日目の記事です。 Canon LBP3100というプリンターについて Canon LBP3100 というプリンターは。Canonの安価なwinprinterです。 私は2015年3月に...