「マイクロコード」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(TranslationStatus)
(同期)
9行目: 9行目:
   
 
AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。
 
AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。
  +
  +
== マイクロコードをロードする ==
   
 
通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします:
 
通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。[https://docs.kernel.org/x86/microcode.html Linux マイクロコードローダ]は3つの方法をサポートします:
   
  +
# '''組み込みマイクロコード''' は、カーネルに組み込んでコンパイルし、初期ローダ (early loader) を使って適用することができます。
# '''早期ロード''' は、起動中の非常に早い段階(initramfs ステージよりも前)でマイクロコードをアップデートします。なので、これは推奨される方法です。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、これは必須です。
 
# '''遅延ロード'''('''危険''') は、起動にマイクロコードをアップデートします。CPU がバグある命令セッ使用をすで試みたかもしれいので、これでは遅すぎる可能性があります。「早期ロード」をでに使用している場合でも「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用きます。
+
# '''早期ロード''' は、起動中の非常早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel Haswell や Broadwell プロセッサファミリよう CPU に深刻ードウェアバグが存在する場合、これは必須です。
  +
# '''遅延ロード''' ('''危険''') は、起動後にマイクロコードをアップデートします。CPU がバグのある命令セットの使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。
# '''組み込みマイクロコード''' はカーネルにコンパイルされます。早期ローダ(early loader)により適用されます。
 
   
  +
更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージを[[インストール]]してください:
== 早期ロード ==
 
  +
* {{Pkg|amd-ucode}} : AMD プロセッサ
  +
* {{Pkg|intel-ucode}} : Intel プロセッサ
   
=== インスト ===
+
=== initramfs に埋め込まれたマクロコ ===
   
  +
[https://docs.kernel.org/x86/microcode.html#early-load-microcode マイクロコード cpio を initramfs 内部に前置する]ことができます。[[dracut]] など ({{man|5|dracut.conf|DESCRIPTION}} を参照) の一部の initramfs ジェネレータは、これをデフォルトで行います。これにより、[[#早期ロード]] と [[#遅延ロード]] は不要になります。しかし、Arch Linux はデフォルトで初期 RAM ディスク (initramfs) の生成に [[mkinitcpio]] を使用し、[[mkinitcpio]] はこの方法をサポートしていません。しかし、UEFI スタブを用いたマイクロコードの読み込みはサポートしています: [[#Unified カーネルイメージ]] を見てください。
プロセッサに応じて以下のパッケージを[[インストール]]してください:
 
* {{Pkg|amd-ucode}} AMD プロセッサ向け
 
* {{Pkg|intel-ucode}} Intel プロセッサ向け
 
   
  +
=== 早期ロード ===
マイクロコードは[[ブートローダー]]によって読み込まれなければなりません。初期ブート設定はユーザによって様々なので、マイクロコードのアップデートは Arch のデフォルト設定では自動的にトリガーされない場合があります。この点について AUR カーネルの多くは Arch の公式[[カーネル]]と同じようになっています。
 
   
  +
マイクロコードは、カーネルに組み込まない場合、初期ローダ (early loader) を使って読み込まなければなりません。Unified カーネルイメージの一部として、あるいは [[ブートローダー]]を使って初期 RAM ディスクイメージとしてローダに渡すことができます。
アップデートを有効にするには、{{ic|/boot/amd-ucode.img}} または {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルの 一番目の initrd''' として追加しなければなりません。これは、通常の initrd ファイルよりも前です。一般的なブートローダの場合における手順は以下を見てください。
 
  +
  +
ユーザの初期ブート構成は様々なので、マイクロコードのアップデートは Arch のデフォルトの設定では自動的にトリガーされないことに注意してください。
  +
  +
==== Unified カーネルイメージ ====
  +
  +
[[Unified カーネルイメージ]] の記事で、単一ファイルのイメージにマイクロコードを埋め込む方法を見てください。
  +
  +
==== 初期 RAM ディスクイメージ ====
  +
  +
あるいは、マイクロコードのアップデートを有効にするには、{{ic|/boot/amd-ucode.img}} または {{ic|/boot/intel-ucode.img}} を'''ブートローダーの設定ファイルの 一番目の初期 RAM ディスクイメージ''' として追加しなければなりません。これは、通常の初期 RAM ディスクイメージファイルよりも前です。一般的なブートローダの場合における手順は以下を見てください。
   
 
以下のセクションでは {{ic|''cpu_manufacturer''}} の部分をあなたの CPU の製造業者名に置き換えてください、例: {{ic|amd}} か {{ic|intel}}。
 
以下のセクションでは {{ic|''cpu_manufacturer''}} の部分をあなたの CPU の製造業者名に置き換えてください、例: {{ic|amd}} か {{ic|intel}}。
32行目: 44行目:
 
{{Tip|[[リムーバブルメディアに Arch Linux をインストール|リムーバブルドライブ上の Arch Linux]] をこれらのプロセッサの両方で動かす可能性がある場合、両方のパッケージをインストールし両方のマイクロコードファイルを {{ic|initrd}} としてブートローダの設定に追加してください。initramfs イメージよりも前に指定していればファイルの順番は関係ありません。}}
 
{{Tip|[[リムーバブルメディアに Arch Linux をインストール|リムーバブルドライブ上の Arch Linux]] をこれらのプロセッサの両方で動かす可能性がある場合、両方のパッケージをインストールし両方のマイクロコードファイルを {{ic|initrd}} としてブートローダの設定に追加してください。initramfs イメージよりも前に指定していればファイルの順番は関係ありません。}}
   
  +
===== カスタムカーネルでマイクロコードの早期ロードを有効化 =====
=== 設定 ===
 
 
==== カスタムカーネルでマイクロコードの早期ロードを有効化 ====
 
   
 
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。
 
カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。
43行目: 53行目:
 
CONFIG_MICROCODE_AMD=y
 
CONFIG_MICROCODE_AMD=y
   
==== GRUB ====
+
===== GRUB =====
   
 
''grub-mkconfig'' はマイクロコードのアップデートを自動的に検出し、[[GRUB]] を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください:
 
''grub-mkconfig'' はマイクロコードのアップデートを自動的に検出し、[[GRUB]] を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください:
60行目: 70行目:
 
それぞれのメニュエントリに対してこれを行ってください。
 
それぞれのメニュエントリに対してこれを行ってください。
   
==== systemd-boot ====
+
===== systemd-boot =====
   
 
以下のように初期 RAM ディスクの前に {{ic|initrd}} オプションを使ってマイクロコードをロード:
 
以下のように初期 RAM ディスクの前に {{ic|initrd}} オプションを使ってマイクロコードをロード:
74行目: 84行目:
 
最新のマイクロコード {{ic|''cpu_manufacturer''-ucode.img}} は起動時に [[EFI システムパーティション]] (ESP) に存在していなければなりません。{{Pkg|amd-ucode}} または {{Pkg|intel-ucode}} を更新したときはマイクロコードが更新されるように {{ic|/boot}} に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に {{ic|/boot/''cpu_manufacturer''-ucode.img}} をコピーしてください。
 
最新のマイクロコード {{ic|''cpu_manufacturer''-ucode.img}} は起動時に [[EFI システムパーティション]] (ESP) に存在していなければなりません。{{Pkg|amd-ucode}} または {{Pkg|intel-ucode}} を更新したときはマイクロコードが更新されるように {{ic|/boot}} に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に {{ic|/boot/''cpu_manufacturer''-ucode.img}} をコピーしてください。
   
==== Unified カーネルイメージ ====
+
===== EFISTUB =====
 
[[Unified カーネルイメージ#手動で]] を見てください。
 
 
==== EFISTUB ====
 
   
 
2つの {{ic|1=initrd=}} オプションを末尾に追加してください:
 
2つの {{ic|1=initrd=}} オプションを末尾に追加してください:
84行目: 90行目:
 
'''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img
 
'''initrd=\''cpu_manufacturer''-ucode.img''' initrd=\initramfs-linux.img
   
==== rEFInd ====
+
===== rEFInd =====
   
 
{{ic|/boot/refind_linux.conf}} のブートオプションを編集し、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} を最初の initramfs として追加してください( {{ic|/boot}} が別のパーティションに存在する場合は {{ic|1=initrd=''cpu_manufacturer''-ucode.img}})。例えば:
 
{{ic|/boot/refind_linux.conf}} のブートオプションを編集し、{{ic|1=initrd=boot\''cpu_manufacturer''-ucode.img}} を最初の initramfs として追加してください( {{ic|/boot}} が別のパーティションに存在する場合は {{ic|1=initrd=''cpu_manufacturer''-ucode.img}})。例えば:
96行目: 102行目:
 
options "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap '''initrd=boot\''cpu_manufacturer''-ucode.img'''"
 
options "root=PARTUUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' rw add_efi_memmap '''initrd=boot\''cpu_manufacturer''-ucode.img'''"
   
==== Syslinux ====
+
===== Syslinux =====
   
 
{{Note|initrd ファイルの {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。{{ic|INITRD}} の行は以下の記述そのままに編集しなければなりません。}}
 
{{Note|initrd ファイルの {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux}} の間に空白は挟まないで下さい。{{ic|INITRD}} の行は以下の記述そのままに編集しなければなりません。}}
108行目: 114行目:
 
...
 
...
   
==== LILO ====
+
===== LILO =====
   
 
[[LILO]] などの旧式のブートローダーは複数の initrd イメージをサポートしていません。そのような場合 {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux.img}} をひとつのイメージにまとめる必要があります。
 
[[LILO]] などの旧式のブートローダーは複数の initrd イメージをサポートしていません。そのような場合 {{ic|''cpu_manufacturer''-ucode.img}} と {{ic|initramfs-linux.img}} をひとつのイメージにまとめる必要があります。
130行目: 136行目:
 
# lilo
 
# lilo
   
== 遅延ロード ==
+
=== 遅延ロード ===
   
 
{{Warning|1=マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 で遅延ロードを行うとカーネルに汚染マークが付きます)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9784edd73a08ea08d0ce5606e1f0f729df688c59]}}
 
{{Warning|1=マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 で遅延ロードを行うとカーネルに汚染マークが付きます)。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9784edd73a08ea08d0ce5606e1f0f729df688c59]}}
140行目: 146行目:
 
Intel プロセッサの場合、マイクロコードのアップデートファイルが含まれるパッケージはありません ({{Bug|59841}})。遅延ロードするには [https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases Intel が提供しているアーカイブ]から手動で {{ic|intel-ucode/}} を抽出する必要があります。
 
Intel プロセッサの場合、マイクロコードのアップデートファイルが含まれるパッケージはありません ({{Bug|59841}})。遅延ロードするには [https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases Intel が提供しているアーカイブ]から手動で {{ic|intel-ucode/}} を抽出する必要があります。
   
=== マイクロコードの遅延アップデートを有効化 ===
+
==== マイクロコードの遅延アップデートを有効化 ====
   
 
早期ロードとは異なり、マイクロコードアップデートの遅延ロードは Arch Linux ではデフォルトで有効になっており {{ic|/usr/lib/tmpfiles.d/linux-firmware.conf}} を使用します。起動後に {{man|8|systemd-tmpfiles-setup.service}} によってファイルが読み込まれて CPU のマイクロコードが更新されます。
 
早期ロードとは異なり、マイクロコードアップデートの遅延ロードは Arch Linux ではデフォルトで有効になっており {{ic|/usr/lib/tmpfiles.d/linux-firmware.conf}} を使用します。起動後に {{man|8|systemd-tmpfiles-setup.service}} によってファイルが読み込まれて CPU のマイクロコードが更新されます。
150行目: 156行目:
 
これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。
 
これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。
   
=== マイクロコードの遅延アップデートを無効化 ===
+
==== マイクロコードの遅延アップデートを無効化 ====
   
 
AMD 環境では {{Pkg|amd-ucode}} がインストールされてなくても、{{ic|/usr/lib/firmware/amd-ucode/}} 内のファイルが {{Pkg|linux-firmware}} パッケージにより提供されるため、CPU のマイクロコードはアップデートされてしまいます ({{Bug|59840}})。
 
AMD 環境では {{Pkg|amd-ucode}} がインストールされてなくても、{{ic|/usr/lib/firmware/amd-ucode/}} 内のファイルが {{Pkg|linux-firmware}} パッケージにより提供されるため、CPU のマイクロコードはアップデートされてしまいます ({{Bug|59840}})。
159行目: 165行目:
   
 
# ln -s /dev/null /etc/tmpfiles.d/linux-firmware.conf
 
# ln -s /dev/null /etc/tmpfiles.d/linux-firmware.conf
 
== initramfs に埋め込まれたマイクロコード ==
 
 
使用中の initramfs ジェネレータがすでに [https://docs.kernel.org/x86/microcode.html#early-load-microcode マイクロコード cpio を initramfs に付加しているのであれば]、[[#早期ロード]]と[[#遅延ロード]]は必要ありません。例えば、[[dracut]] はデフォルトでこれを行います。{{man|5|dracut.conf|DESCRIPTION}} を見てください。
 
 
{{Expansion|What about mkinitcpio and Booster?}}
 
{{Accuracy|[[#カスタムカーネルでマイクロコードの早期ロードを有効化]] の場合は?}}
 
{{Expansion|The [[#top|introduction]] does not cover this section.}}
 
   
 
== 起動時にマイクロコードのアップデートがされたか確認する ==
 
== 起動時にマイクロコードのアップデートがされたか確認する ==
235行目: 233行目:
 
* [https://gitlab.com/iucode-tool/iucode-tool iucode-tool GitLab プロジェクト]
 
* [https://gitlab.com/iucode-tool/iucode-tool iucode-tool GitLab プロジェクト]
   
{{TranslationStatus|Microcode|2022-07-12|738447}}
+
{{TranslationStatus|Microcode|2022-10-08|751328}}

2022年10月8日 (土) 21:20時点における版

プロセッサの製造者はプロセッサマイクロコードに安定性とセキュリティのアップデートをリリースしています。そのようなアップデートには、システムの安定性に深く関わるバグフィックスが含まれています。これがないと、追跡困難な疑わしいクラッシュや予期しないシステム停止を引き起こす場合があります。

AMD や Intel CPU を持つすべてのユーザは、システムの安定性を確保するためにマイクロコードのアップデートをインストールすべきです。

マイクロコードをロードする

通常、マイクロコードのアップデートはマザーボードのファームウェアに同梱されており、ファームウェアの初期化中に適用されます。しかし、OEM はファームウェアのアップデートをタイムリーにリリースしないかもしれない上、古いシステムでは新しいファームウェアアップデートは全くリリースされないので、起動中に CPU マイクロコードアップデートを適用する機能が Linux カーネルに追加されました。Linux マイクロコードローダは3つの方法をサポートします:

  1. 組み込みマイクロコード は、カーネルに組み込んでコンパイルし、初期ローダ (early loader) を使って適用することができます。
  2. 早期ロード は、起動中の非常に早い段階 (initramfs ステージよりも前) でマイクロコードをアップデートします。遅延ロードよりもこちらが推奨されます。Intel の Haswell や Broadwell プロセッサファミリのように CPU に深刻なハードウェアバグが存在する場合、これは必須です。
  3. 遅延ロード (危険) は、起動後にマイクロコードをアップデートします。CPU がバグのある命令セットの使用をすでに試みたかもしれないので、これでは遅すぎる可能性があります。「早期ロード」をすでに使用している場合でも、「遅延ロード」を使用して再起動せずに新しいマイクロコードのアップデートを適用できます。

更新されたマイクロコードを取得するには、プロセッサに応じて以下のいずれかのパッケージをインストールしてください:

initramfs に埋め込まれたマイクロコード

マイクロコード cpio を initramfs 内部に前置することができます。dracut など (dracut.conf(5) § DESCRIPTION を参照) の一部の initramfs ジェネレータは、これをデフォルトで行います。これにより、#早期ロード#遅延ロード は不要になります。しかし、Arch Linux はデフォルトで初期 RAM ディスク (initramfs) の生成に mkinitcpio を使用し、mkinitcpio はこの方法をサポートしていません。しかし、UEFI スタブを用いたマイクロコードの読み込みはサポートしています: #Unified カーネルイメージ を見てください。

早期ロード

マイクロコードは、カーネルに組み込まない場合、初期ローダ (early loader) を使って読み込まなければなりません。Unified カーネルイメージの一部として、あるいは ブートローダーを使って初期 RAM ディスクイメージとしてローダに渡すことができます。

ユーザの初期ブート構成は様々なので、マイクロコードのアップデートは Arch のデフォルトの設定では自動的にトリガーされないことに注意してください。

Unified カーネルイメージ

Unified カーネルイメージ の記事で、単一ファイルのイメージにマイクロコードを埋め込む方法を見てください。

初期 RAM ディスクイメージ

あるいは、マイクロコードのアップデートを有効にするには、/boot/amd-ucode.img または /boot/intel-ucode.imgブートローダーの設定ファイルの 一番目の初期 RAM ディスクイメージ として追加しなければなりません。これは、通常の初期 RAM ディスクイメージファイルよりも前です。一般的なブートローダの場合における手順は以下を見てください。

以下のセクションでは cpu_manufacturer の部分をあなたの CPU の製造業者名に置き換えてください、例: amdintel

ヒント: リムーバブルドライブ上の Arch Linux をこれらのプロセッサの両方で動かす可能性がある場合、両方のパッケージをインストールし両方のマイクロコードファイルを initrd としてブートローダの設定に追加してください。initramfs イメージよりも前に指定していればファイルの順番は関係ありません。
カスタムカーネルでマイクロコードの早期ロードを有効化

カスタムカーネルでロードを行うには、"CPU microcode loading support" をカーネルに組み込む必要があります。モジュールとしてコンパイルしても動作しません。"Early load microcode" プロンプトが有効になるので "Y" に設定してください。

CONFIG_BLK_DEV_INITRD=Y
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=Y
CONFIG_MICROCODE_AMD=y
GRUB

grub-mkconfig はマイクロコードのアップデートを自動的に検出し、GRUB を適切に設定します。マイクロコードのインストール後に以下を実行して GRUB 設定ファイルを再生成し、マイクロコードアップデートのロードを有効化してください:

# grub-mkconfig -o /boot/grub/grub.cfg

あるいは、GRUB 設定ファイルを手動で管理しているユーザは、以下のように /boot/cpu_manufacturer-ucode.img を追加できます(別のパーティションに /boot がある場合は /cpu_manufacturer-ucode.img):

/boot/grub/grub.cfg
...
echo 'Loading initial ramdisk'
initrd	/boot/cpu_manufacturer-ucode.img /boot/initramfs-linux.img
...

それぞれのメニュエントリに対してこれを行ってください。

systemd-boot

以下のように初期 RAM ディスクの前に initrd オプションを使ってマイクロコードをロード:

/boot/loader/entries/entry.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /cpu_manufacturer-ucode.img
initrd  /initramfs-linux.img
...

最新のマイクロコード cpu_manufacturer-ucode.img は起動時に EFI システムパーティション (ESP) に存在していなければなりません。amd-ucode または intel-ucode を更新したときはマイクロコードが更新されるように /boot に ESP をマウントしてください。もしくは、マイクロコードパッケージのアップデートがあるたびに ESP に /boot/cpu_manufacturer-ucode.img をコピーしてください。

EFISTUB

2つの initrd= オプションを末尾に追加してください:

initrd=\cpu_manufacturer-ucode.img initrd=\initramfs-linux.img
rEFInd

/boot/refind_linux.conf のブートオプションを編集し、initrd=boot\cpu_manufacturer-ucode.img を最初の initramfs として追加してください( /boot が別のパーティションに存在する場合は initrd=cpu_manufacturer-ucode.img)。例えば:

"Boot using default options"     "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\cpu_manufacturer-ucode.img initrd=boot\initramfs-%v.img"
ヒント: 以前に initrd カーネルパラメータを指定しなかったユーザは、複数の initrd パラメータを渡すために rEFInd#設定 で説明されている手順に従う必要があります。

手動esp/EFI/refind/refind.conf にカーネルを定義している場合はメインの部分ではなく options 行に /boot/cpu_manufacturer-ucode.img (/boot パーティションを分けている場合は /cpu_manufacturer-ucode.img) を追加してください。例:

options  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\cpu_manufacturer-ucode.img"
Syslinux
ノート: initrd ファイルの cpu_manufacturer-ucode.imginitramfs-linux の間に空白は挟まないで下さい。INITRD の行は以下の記述そのままに編集しなければなりません。

/boot/syslinux/syslinux.cfg で複数の initrd をカンマで区切って指定できます:

LABEL arch
    MENU LABEL Arch Linux
    LINUX ../vmlinuz-linux
    INITRD ../cpu_manufacturer-ucode.img,../initramfs-linux.img
...
LILO

LILO などの旧式のブートローダーは複数の initrd イメージをサポートしていません。そのような場合 cpu_manufacturer-ucode.imginitramfs-linux.img をひとつのイメージにまとめる必要があります。

警告: カーネルをアップデートするたびに毎回イメージをマージして再生成する必要があります。
ノート: イメージの順番は重要です。オリジナルのイメージである initramfs-linuxcpu_manufacturer-ucode.img イメージよりも先に来るように結合する必要があります。

ふたつのイメージを initramfs-merged.img という名前のイメージにマージするには、以下のコマンドを使用:

# cat /boot/cpu_manufacturer-ucode.img /boot/initramfs-linux.img > /boot/initramfs-merged.img

マージできたら /etc/lilo.conf を編集して新しいイメージをロードします:

...
initrd=/boot/initramfs-merged.img
...

root で lilo を実行してください:

# lilo

遅延ロード

警告: マイクロコードの遅延ロードは危険であるとみなされています(Linux 5.19 で遅延ロードを行うとカーネルに汚染マークが付きます)。[1]

マイクロコードアップデートの遅延ロードはシステムの起動後に行われます。/usr/lib/firmware/amd-ucode//usr/lib/firmware/intel-ucode/ 内のファイルが使用されます。Linux 5.19+ で遅延ロードを行うには、CONFIG_MICROCODE_LATE_LOADING=y でカーネルをビルドする必要があります。

AMD プロセッサの場合、マイクロコードのアップデートファイルは linux-firmware により提供されます。

Intel プロセッサの場合、マイクロコードのアップデートファイルが含まれるパッケージはありません (FS#59841)。遅延ロードするには Intel が提供しているアーカイブから手動で intel-ucode/ を抽出する必要があります。

マイクロコードの遅延アップデートを有効化

早期ロードとは異なり、マイクロコードアップデートの遅延ロードは Arch Linux ではデフォルトで有効になっており /usr/lib/tmpfiles.d/linux-firmware.conf を使用します。起動後に systemd-tmpfiles-setup.service(8) によってファイルが読み込まれて CPU のマイクロコードが更新されます。

実行中のシステムで手動でマイクロコードをアップデートするには(例: /usr/lib/firmware/amd-ucode//usr/lib/firmware/intel-ucode/ 内のマイクロコードファイルをアップデートした後):

# echo 1 > /sys/devices/system/cpu/microcode/reload

これにより、システムを再起動せずに新しいマイクロコードのアップデートを適用できます。

マイクロコードの遅延アップデートを無効化

AMD 環境では amd-ucode がインストールされてなくても、/usr/lib/firmware/amd-ucode/ 内のファイルが linux-firmware パッケージにより提供されるため、CPU のマイクロコードはアップデートされてしまいます (FS#59840)。

仮想マシンコンテナでは(FS#46591)、CPU のマイクロコードをアップできません。なので、マイクロコードのアップデートを無効化したほうが良いでしょう。

マイクロコードの危険な遅延ロードを無効にしたい場合、linux-firmware により提供される /usr/lib/tmpfiles.d/linux-firmware.conf tmpfile を上書きしてください。/etc/tmpfiles.d/ に同名のファイルを作成することで無効化できます:

# ln -s /dev/null /etc/tmpfiles.d/linux-firmware.conf

起動時にマイクロコードのアップデートがされたか確認する

マイクロコードがアップデートされたかどうか確認するには journalctl でカーネルメッセージを確認してください:

# journalctl -k --grep=microcode

Intel が載っているシステムでは、起動時に以下のような表示がされます(以下ではマイクロコードが非常に早い段階でアップデートされていることを示しています):

microcode: microcode updated early to revision 0xde, date = 2020-05-18
microcode: sig=0x806ec, pf=0x80, revision=0xde
microcode: Microcode Update Driver: v2.2.
ノート: 表示される日付は intel-ucode パッケージのバージョンとは対応しません。Intel がマイクロコードのアップデートを行った最後の日付が表示されます。

最新のハードウェアの場合、CPU のマイクロコードアップデートが存在しないという可能性も考えられます。そのときは、以下のような出力がなされます:

microcode: sig=0x806ec, pf=0x80, revision=0xde
microcode: Microcode Update Driver: v2.2.

AMD 環境でマイクロコードを早期ロードしている場合、以下のように出力されます:

microcode: microcode updated early to new patch_level=0x0700010f
microcode: CPU0: patch_level=0x0700010f
microcode: CPU1: patch_level=0x0700010f
microcode: CPU2: patch_level=0x0700010f
microcode: CPU3: patch_level=0x0700010f
microcode: Microcode Update Driver: v2.2.

AMD 環境で起動後にマイクロコードをアップデートしている場合、古いマイクロコードのバージョンが表示されてからマイクロコードがリロードされ、新しいマイクロコードのバージョンが表示されます。例:

microcode: CPU0: patch_level=0x0700010b
microcode: CPU1: patch_level=0x0700010b
microcode: CPU2: patch_level=0x0700010b
microcode: CPU3: patch_level=0x0700010b
microcode: Microcode Update Driver: v2.2.
microcode: CPU2: new patch_level=0x0700010f
microcode: CPU0: new patch_level=0x0700010f
microcode: CPU1: new patch_level=0x0700010f
microcode: CPU3: new patch_level=0x0700010f
x86/CPU: CPU features have changed after loading microcode, but might not take effect.

マイクロコードのアップデートができる CPU

特定のモデルがサポートされているのかどうかは以下のリンクから Intel のサイトや AMD の Gentoo Wiki サイトで確認することができます:

マイクロコードのアップデートが必要かどうか確認する

iucode-tool を使って、使用している CPU のマイクロコードイメージが intel-ucode.img に含まれているかどうか確認できます。

  1. intel-ucodeインストール (アップデートがあるかどうか確認するのに initrd の変更は必要ありません)
  2. iucode-toolインストール
  3. cpuid カーネルモジュールをロード:
    # modprobe cpuid
  4. マイクロコードイメージを展開して cpuid で検索:
    # bsdtar -Oxf /boot/intel-ucode.img | iucode_tool -tb -lS -
  5. アップデートが存在する場合は、selected microcodes の下に表示されます。
  6. メーカーの BIOS にマイクロコードが既に含まれていてロードされたことが dmesg に表示されていない可能性もあります。grep microcode /proc/cpuinfo を実行して現在のマイクロコードを比較してください。

参照

翻訳ステータス: このページは en:Microcode の翻訳バージョンです。最後の翻訳日は 2022-10-08 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。