「マイクロコード」の版間の差分
(ページの作成:「Category:CPU de:Microcode en:Microcode es:Microcode ru:Microcode zh-CN:Microcode Wikipedia:ja:マイクロプログラム方式|プロセッサ...」) |
|||
5行目: | 5行目: | ||
[[ru:Microcode]] |
[[ru:Microcode]] |
||
[[zh-CN:Microcode]] |
[[zh-CN:Microcode]] |
||
− | [[Wikipedia:ja:マイクロプログラム方式|プロセッサのマイクロコード]]はプロセッサのファームウェアと同種のものです。カーネルは BIOS のアップデートをすることなくプロセッサのファームウェアをアップデートすることができます。 |
+ | [[Wikipedia:ja:マイクロプログラム方式|プロセッサのマイクロコード]]はプロセッサのファームウェアと同種のものです。カーネルは BIOS のアップデートをすることなくプロセッサのファームウェアをアップデートすることができます。[https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=23082 Intel] のウェブサイトより: |
− | :''マイクロコードのデータファイルには全ての Intel プロセッサのための最新のマイクロコードが定義されています。Intel はマイクロコードのアップデートをリリースすることで、それぞれのプロセッサの仕様のアプリケーションに文書化されているようにプロセッサの挙動を修正します。一般的に、このマイクロコードの更新を行うのは BIOS のアップデートによりますが、これは管理者を困らせるような羽目になることがあるのを Intel は了解しています。Linux オペレーティングシステムや VMware ESX プロダクトには起動後にマイクロコードを更新する仕組みが備わっています。例えば、Linux システムの {{ic|/etc/firmware}} ディレクトリにファイルが配置されると、オペレーティングシステムの仕組みがこのファイルを使用します。'' |
+ | :''マイクロコードのデータファイルには全ての Intel プロセッサのための最新のマイクロコードが定義されています。Intel はマイクロコードのアップデートをリリースすることで、それぞれのプロセッサの仕様のアプリケーションに文書化されているようにプロセッサの挙動を修正します。一般的に、このマイクロコードの更新を行うのは BIOS のアップデートによりますが、これは管理者を困らせるような羽目になることがあるのを Intel は了解しています。Linux オペレーティングシステムや VMware ESX プロダクトには起動後にマイクロコードを更新する仕組みが備わっています。例えば、Linux システムの {{ic|/etc/firmware}} ディレクトリにファイルが配置されると、オペレーティングシステムの仕組みがこのファイルを使用します。'' |
{{Note|Arch Linux はアップデートを処理するのに {{ic|/etc/firmware}} は使いません、代わりにファームウェアのバイナリは {{ic|/usr/lib/firmware/*.}} に作成されます。}} |
{{Note|Arch Linux はアップデートを処理するのに {{ic|/etc/firmware}} は使いません、代わりにファームウェアのバイナリは {{ic|/usr/lib/firmware/*.}} に作成されます。}} |
||
19行目: | 19行目: | ||
=== Intel のマイクロコードのアップデートを有効にする === |
=== Intel のマイクロコードのアップデートを有効にする === |
||
− | {{warning|linux 3.17-2 と linux-lts 3.14.21-2 以降から、Intel のマイクロコードのアップデートは自動では行われなくなりました。}} |
+ | {{warning|linux 3.17-2 と linux-lts 3.14.21-2 以降から、Intel のマイクロコードのアップデートは自動では行われなくなりました。多くの AUR のカーネルも公式の Arch カーネルと同じようになっています: linux-ck 3.16.6-3 から、Intel のマイクロコードのアップデートは自動で行われないようになりました。}}}} |
アップデートを有効にするにはブートローダーの設定ファイルに {{ic|/boot/intel-ucode.img}} を一番目の initrd として追加する必要があります。通常の initrd ファイルとは別に追加します。 |
アップデートを有効にするにはブートローダーの設定ファイルに {{ic|/boot/intel-ucode.img}} を一番目の initrd として追加する必要があります。通常の initrd ファイルとは別に追加します。 |
||
35行目: | 35行目: | ||
{{ic|/boot/loader/entries/*.conf}} で {{ic|initrd}} オプションを二回使用: |
{{ic|/boot/loader/entries/*.conf}} で {{ic|initrd}} オプションを二回使用: |
||
− | + | title Arch Linux |
|
− | linux /vmlinuz-linux |
+ | linux /vmlinuz-linux |
− | initrd /intel-ucode.img |
+ | initrd /intel-ucode.img |
− | initrd /initramfs-linux.img |
+ | initrd /initramfs-linux.img |
− | options ... |
+ | options ... |
==== rEFInd ==== |
==== rEFInd ==== |
||
45行目: | 45行目: | ||
上記の EFI ブートスタブと同じように {{ic|/boot/refind_linux.conf}} のブートオプションを編集する、例: |
上記の EFI ブートスタブと同じように {{ic|/boot/refind_linux.conf}} のブートオプションを編集する、例: |
||
− | + | "Boot with standard options" "ro root=UUID=(...) quiet initrd=intel-ucode.img initrd=initramfs-linux.img" |
|
手動で {{ic|/boot/refind.conf}} にカーネルを定義している場合はメインの部分ではなく options 行に {{ic|1=initrd=/intel-ucode.img}} や {{ic|/boot/intel-ucode.img}} を追加してください。 |
手動で {{ic|/boot/refind.conf}} にカーネルを定義している場合はメインの部分ではなく options 行に {{ic|1=initrd=/intel-ucode.img}} や {{ic|/boot/intel-ucode.img}} を追加してください。 |
||
==== Grub ==== |
==== Grub ==== |
||
− | + | grub-1:2.02-beta2-5 から、''grub-mkconfig'' が自動的にマイクロコードのアップデートを処理します。{{Pkg|intel-ucode}} をインストールした後に {{ic|# grub-mkconfig -o /boot/grub/grub.cfg}} を実行して、grub の設定を再生成し、マイクロコードのアップデートのロードを有効にしてください。 |
|
+ | もしくは、grub の設定ファイルを手動で管理したい場合、以下のように {{ic|grub.cfg}} に {{ic|/intel-ucode.img}} や {{ic|/boot/intel-ucode.img}} を追加します: |
||
− | ===== 1. grub.cfg を手動で編集 ===== |
||
− | 以下のように {{ic|grub.cfg}} に {{ic|/intel-ucode.img}} や {{ic|/boot/intel-ucode.img}} を手動で追加: |
||
+ | [...] |
||
− | {{bc| |
||
+ | echo 'Loading initial ramdisk ...' |
||
− | [...] |
||
+ | initrd /intel-ucode.img /initramfs-linux.img |
||
− | echo 'Loading initial ramdisk ...' |
||
+ | [...] |
||
− | initrd /intel-ucode.img /initramfs-linux.img |
||
− | [...]}} |
||
{{Note|すべてのメニューエントリに追加してください。}} |
{{Note|すべてのメニューエントリに追加してください。}} |
||
+ | |||
{{warning|更新があると {{ic|/usr/bin/grub-mkconfig}} によってファイルが自動的に上書きされるため、ファイルの変更は取り消されてしまいます。}} |
{{warning|更新があると {{ic|/usr/bin/grub-mkconfig}} によってファイルが自動的に上書きされるため、ファイルの変更は取り消されてしまいます。}} |
||
− | |||
− | {{Tip|initramfs のパスと同じように、{{ic|/intel-ucode.img}} のパスは boot パーティションとの相対パスです。つまり別個の {{ic|/boot}} パーティションを使用する場合は {{ic|/intel-ucode.img}} を使用し、{{ic|/boot}} を分割しない場合は {{ic|/boot/intel-ucode.img}} を使用します。}} |
||
− | |||
− | ===== 2. /etc/grub.d/10_linux を手動で編集 ===== |
||
− | |||
− | ファームウェアイメージを検出して適切に {{ic|grub.cfg}} に書き出させるように {{ic|/etc/grub.d/10_linux}} を手動で編集してから、{{ic|grub-mkconfig -o /boot/grub/grub.cfg}} を使って {{ic|grub.cfg}} を再生成します: |
||
− | |||
− | {{hc|/etc/grub.d/10_linux|<nowiki> |
||
− | if test -n "${initrd}" ; then |
||
− | + if test -f "${dirname}/intel-ucode.img"; then |
||
− | + ucode="${rel_dirname}/intel-ucode.img" |
||
− | + else |
||
− | + ucode= |
||
− | + fi |
||
− | # TRANSLATORS: ramdisk isn't identifier. Should be translated. |
||
− | message="$(gettext_printf "Loading initial ramdisk ...")" |
||
− | sed "s/^/$submenu_indentation/" << EOF |
||
− | echo '$(echo "$message" | grub_quote)' |
||
− | - initrd ${rel_dirname}/${initrd} |
||
− | + initrd ${ucode} ${rel_dirname}/${initrd} |
||
− | EOF |
||
− | </nowiki>}} |
||
− | |||
− | {{Note|このファイルに変更を加えると上流でパッケージのバージョンが上がった時に正しくインストールされない可能性があります。[[Pacnew と Pacsave ファイル]]を見て下さい。}} |
||
==== Syslinux ==== |
==== Syslinux ==== |
||
+ | |||
+ | {{Note|initrd ファイルの {{ic|intel-ucode}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。ピリオド記号は省略ではありません。以下の記述そのままに編集するようにしてください。}} |
||
{{ic|/boot/syslinux/syslinux.cfg}} で複数の initrd をカンマで区切って指定できます: |
{{ic|/boot/syslinux/syslinux.cfg}} で複数の initrd をカンマで区切って指定できます: |
||
− | + | LABEL arch |
|
− | MENU LABEL Arch Linux |
+ | MENU LABEL Arch Linux |
− | LINUX ../vmlinuz-linux |
+ | LINUX ../vmlinuz-linux |
− | INITRD ../intel-ucode.img,../initramfs-linux.img |
+ | INITRD ../intel-ucode.img,../initramfs-linux.img |
− | APPEND ... |
+ | APPEND ... |
== 起動時にマイクロコードのアップデートがされたか確認する == |
== 起動時にマイクロコードのアップデートがされたか確認する == |
||
− | マイクロコードがアップデートされたかどうか確認するには {{ic|/usr/bin/dmesg}} を使用します: |
+ | マイクロコードがアップデートされたかどうか確認するには {{ic|/usr/bin/dmesg}} を使用します: |
+ | $ dmesg | grep microcode |
||
Intel が載っているシステムでは、マイクロコードのアップデートがされていると以下のような表示がされます: |
Intel が載っているシステムでは、マイクロコードのアップデートがされていると以下のような表示がされます: |
||
+ | [ 0.000000] CPU0 microcode updated early to revision 0x1b, date = 2014-05-29 |
||
− | {{bc|<nowiki> |
||
− | [ 0. |
+ | [ 0.221951] CPU1 microcode updated early to revision 0x1b, date = 2014-05-29 |
− | [ 0. |
+ | [ 0.242064] CPU2 microcode updated early to revision 0x1b, date = 2014-05-29 |
− | [ 0. |
+ | [ 0.262349] CPU3 microcode updated early to revision 0x1b, date = 2014-05-29 |
− | [ 0. |
+ | [ 0.507267] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507272] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507276] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507281] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507286] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507292] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507296] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507300] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1b |
− | [ 0. |
+ | [ 0.507335] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba |
− | [ 0.507335] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba</nowiki>}} |
||
最新のハードウェアの場合、CPU のマイクロコードアップデートが存在しないという可能性も考えられます。そのときは、以下のような出力がなされます: |
最新のハードウェアの場合、CPU のマイクロコードアップデートが存在しないという可能性も考えられます。そのときは、以下のような出力がなされます: |
||
+ | |||
− | {{bc|<nowiki> |
||
− | [ 0.292893] microcode: CPU0 sig=0x306c3, pf=0x2, revision=0x1c |
+ | [ 0.292893] microcode: CPU0 sig=0x306c3, pf=0x2, revision=0x1c |
− | [ 0.292899] microcode: CPU1 sig=0x306c3, pf=0x2, revision=0x1c |
+ | [ 0.292899] microcode: CPU1 sig=0x306c3, pf=0x2, revision=0x1c |
− | [ 0.292906] microcode: CPU2 sig=0x306c3, pf=0x2, revision=0x1c |
+ | [ 0.292906] microcode: CPU2 sig=0x306c3, pf=0x2, revision=0x1c |
− | [ 0.292912] microcode: CPU3 sig=0x306c3, pf=0x2, revision=0x1c |
+ | [ 0.292912] microcode: CPU3 sig=0x306c3, pf=0x2, revision=0x1c |
− | [ 0.292956] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba |
+ | [ 0.292956] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba |
AMD 環境では、マイクロコードはブートプロセスのやや後ろのほうでアップデートされます。したがって出力は以下のような感じです: |
AMD 環境では、マイクロコードはブートプロセスのやや後ろのほうでアップデートされます。したがって出力は以下のような感じです: |
||
+ | [ 0.807879] microcode: CPU0: patch_level=0x01000098 |
||
− | {{bc|<nowiki> |
||
− | [ 0. |
+ | [ 0.807888] microcode: CPU1: patch_level=0x01000098 |
− | [ 0. |
+ | [ 0.807983] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba |
+ | [ 16.150642] microcode: CPU0: new patch_level=0x010000c7 |
||
− | [ 0.807983] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba |
||
− | [ 16. |
+ | [ 16.150682] microcode: CPU1: new patch_level=0x010000c7 |
− | [ 16.150682] microcode: CPU1: new patch_level=0x010000c7</nowiki>}} |
||
{{Note|表示される日付は {{pkg|intel-ucode}} パッケージのバージョンとは対応しません。Intel がマイクロコードのアップデートを行った最後の日付が表示されます。}} |
{{Note|表示される日付は {{pkg|intel-ucode}} パッケージのバージョンとは対応しません。Intel がマイクロコードのアップデートを行った最後の日付が表示されます。}} |
||
145行目: | 121行目: | ||
* [https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=24290&lang=jpn Intel のダウンロードセンター]。 |
* [https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=24290&lang=jpn Intel のダウンロードセンター]。 |
||
− | + | === マイクロコードのアップデートが必要かどうか確認する === |
|
{{AUR|iucode-tool}} を使って、使用している cpu のマイクロコードイメージが {{ic|intel-ucode.img}} に含まれているかどうか確認できます: |
{{AUR|iucode-tool}} を使って、使用している cpu のマイクロコードイメージが {{ic|intel-ucode.img}} に含まれているかどうか確認できます: |
||
155行目: | 131行目: | ||
* アップデートが存在する場合は、''selected microcodes'' の下に表示されます。 |
* アップデートが存在する場合は、''selected microcodes'' の下に表示されます。 |
||
− | + | == カスタムカーネルで Intel のマイクロコードのロードを有効にする == |
|
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。 |
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。 |
||
163行目: | 139行目: | ||
CONFIG_MICROCODE_INTEL_EARLY=y |
CONFIG_MICROCODE_INTEL_EARLY=y |
||
CONFIG_MICROCODE_EARLY=y |
CONFIG_MICROCODE_EARLY=y |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | * [https://flossexperiences.wordpress.com/2013/11/17/updating-microcodes/ Updating microcodes] |
||
+ | * [http://inertiawar.com/microcode/ Notes on Intel Microcode updates] |
||
+ | * [https://www.kernel.org/doc/Documentation/x86/early-microcode.txt Kernel early microcode] |
||
+ | * [http://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly Erratum found in Haswell/Broadwell] |
2015年5月1日 (金) 20:12時点における版
プロセッサのマイクロコードはプロセッサのファームウェアと同種のものです。カーネルは BIOS のアップデートをすることなくプロセッサのファームウェアをアップデートすることができます。Intel のウェブサイトより:
- マイクロコードのデータファイルには全ての Intel プロセッサのための最新のマイクロコードが定義されています。Intel はマイクロコードのアップデートをリリースすることで、それぞれのプロセッサの仕様のアプリケーションに文書化されているようにプロセッサの挙動を修正します。一般的に、このマイクロコードの更新を行うのは BIOS のアップデートによりますが、これは管理者を困らせるような羽目になることがあるのを Intel は了解しています。Linux オペレーティングシステムや VMware ESX プロダクトには起動後にマイクロコードを更新する仕組みが備わっています。例えば、Linux システムの
/etc/firmware
ディレクトリにファイルが配置されると、オペレーティングシステムの仕組みがこのファイルを使用します。
目次
マイクロコードのアップデート
Intel のプロセッサの場合、intel-ucode をインストールしてください。
AMD のプロセッサの場合、マイクロコードのアップデートは linux-firmware で利用することができ、このパッケージはベースシステムの一部としてインストールされます。
Intel のマイクロコードのアップデートを有効にする
}}
アップデートを有効にするにはブートローダーの設定ファイルに /boot/intel-ucode.img
を一番目の initrd として追加する必要があります。通常の initrd ファイルとは別に追加します。
サンプル
EFI ブートスタブ / EFI ハンドオーバー
2つの initrd=
オプションを追加:
initrd=/intel-ucode.img initrd=/initramfs-linux.img
Gummiboot
/boot/loader/entries/*.conf
で initrd
オプションを二回使用:
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options ...
rEFInd
上記の EFI ブートスタブと同じように /boot/refind_linux.conf
のブートオプションを編集する、例:
"Boot with standard options" "ro root=UUID=(...) quiet initrd=intel-ucode.img initrd=initramfs-linux.img"
手動で /boot/refind.conf
にカーネルを定義している場合はメインの部分ではなく options 行に initrd=/intel-ucode.img
や /boot/intel-ucode.img
を追加してください。
Grub
grub-1:2.02-beta2-5 から、grub-mkconfig が自動的にマイクロコードのアップデートを処理します。intel-ucode をインストールした後に # grub-mkconfig -o /boot/grub/grub.cfg
を実行して、grub の設定を再生成し、マイクロコードのアップデートのロードを有効にしてください。
もしくは、grub の設定ファイルを手動で管理したい場合、以下のように grub.cfg
に /intel-ucode.img
や /boot/intel-ucode.img
を追加します:
[...] echo 'Loading initial ramdisk ...' initrd /intel-ucode.img /initramfs-linux.img [...]
Syslinux
/boot/syslinux/syslinux.cfg
で複数の initrd をカンマで区切って指定できます:
LABEL arch MENU LABEL Arch Linux LINUX ../vmlinuz-linux INITRD ../intel-ucode.img,../initramfs-linux.img APPEND ...
起動時にマイクロコードのアップデートがされたか確認する
マイクロコードがアップデートされたかどうか確認するには /usr/bin/dmesg
を使用します:
$ dmesg | grep microcode
Intel が載っているシステムでは、マイクロコードのアップデートがされていると以下のような表示がされます:
[ 0.000000] CPU0 microcode updated early to revision 0x1b, date = 2014-05-29 [ 0.221951] CPU1 microcode updated early to revision 0x1b, date = 2014-05-29 [ 0.242064] CPU2 microcode updated early to revision 0x1b, date = 2014-05-29 [ 0.262349] CPU3 microcode updated early to revision 0x1b, date = 2014-05-29 [ 0.507267] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507272] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507276] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507281] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507286] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507292] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507296] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507300] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1b [ 0.507335] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
最新のハードウェアの場合、CPU のマイクロコードアップデートが存在しないという可能性も考えられます。そのときは、以下のような出力がなされます:
[ 0.292893] microcode: CPU0 sig=0x306c3, pf=0x2, revision=0x1c [ 0.292899] microcode: CPU1 sig=0x306c3, pf=0x2, revision=0x1c [ 0.292906] microcode: CPU2 sig=0x306c3, pf=0x2, revision=0x1c [ 0.292912] microcode: CPU3 sig=0x306c3, pf=0x2, revision=0x1c [ 0.292956] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
AMD 環境では、マイクロコードはブートプロセスのやや後ろのほうでアップデートされます。したがって出力は以下のような感じです:
[ 0.807879] microcode: CPU0: patch_level=0x01000098 [ 0.807888] microcode: CPU1: patch_level=0x01000098 [ 0.807983] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba [ 16.150642] microcode: CPU0: new patch_level=0x010000c7 [ 16.150682] microcode: CPU1: new patch_level=0x010000c7
マイクロコードのアップデートができる CPU
特定のモデルがサポートされているのかどうかは以下のリンクから Intel や AMD のサイトで確認することができます:
マイクロコードのアップデートが必要かどうか確認する
iucode-toolAUR を使って、使用している cpu のマイクロコードイメージが intel-ucode.img
に含まれているかどうか確認できます:
- intel-ucode をインストール (アップデートがあるかどうか確認するのに initrd の変更は必要ありません)
- AUR から iucode-toolAUR をインストール
# modprobe cpuid
# bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
(マイクロコードイメージを展開して cpuid を検索します)- アップデートが存在する場合は、selected microcodes の下に表示されます。
カスタムカーネルで Intel のマイクロコードのロードを有効にする
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。
CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=y CONFIG_MICROCODE_INTEL_EARLY=y CONFIG_MICROCODE_EARLY=y