AMD製CPUを使うLinux環境で、メモリの参照先を切り替えた後の処理に不具合が見つかりました。Linux開発者は「TLBI Erratum #1718」への回避策をカーネルに追加する作業を進めています。いま分かっているのは、特定の命令を使うZen 5系CPUで古い変換情報が残り得ることと、マイクロコードまたはカーネル側の処理で対策できることです。独立した開発者はAMD Ryzen Threadripper 9980Xで不具合を再現し、修正の効果も試しました。
AMD TLBI Erratum #1718の内容
CPUは仮想アドレスから物理アドレスへの変換結果をTLBという小さな領域に保存します。OSがメモリの割り当てを変えると、古い変換結果を無効にし、次のアクセスで新しい対応関係を読み直す必要があります。今回の問題は、その無効化に使うAMDのINVLPGBとTLBSYNCの組み合わせに関わります。
AMDのエンジニアが投稿したパッチは、INVLPGBとTLBSYNCを組み合わせて実行した際に、TLBエントリの無効化が失敗する場合があると説明しています。OSが無効化を済ませたつもりでも古い変換結果が残れば、メモリ管理の前提が崩れます。パッチはこのCPU側の不具合をX86_BUG_TLBIとして識別します。
パッチが追加する判定は、Zen 5の初期化処理に置かれています。INVLPGBに対応し、修正済みマイクロコードを示す機能ビットがないCPUで、カーネル側の回避策を有効にする設計です。公開された試験報告で実機の影響を確かめた製品は、現時点でThreadripper 9980Xです。
Threadripper 9980Xでの再現結果
Linux開発者のLorenzo Stoakes氏は、試験結果をメーリングリストへ投稿しました。使用したのはAMD公式仕様でZen 5・64コアと記載されるThreadripper 9980Xです。報告にはCPUのfamily 0x1a、model 0x08、stepping 1と、マイクロコード版0x0b008121も記録されています。
同氏の再現プログラムはLinux 7.2.7上で数秒以内に失敗しました。既存の起動オプションtlbi=ipiを指定して20回、今回のパッチを適用したカーネルで40回試験し、どちらも失敗しなかったとのことです。同じThreadripper 9980X上で処理を切り替えて比べた結果なので、回避策の有効性を判断する具体的な材料になります。
マイクロコードとLinuxカーネルの対策
AMDのパッチは、修正済みマイクロコードを識別する機能ビットTLBSYNC_SFW_NOを追加します。このビットがあるCPUでは、カーネルの追加回避処理は不要です。ビットがなく、INVLPGBを使う対象CPUでは、既存のTLBSYNCに続けてもう一度TLBSYNCを実行します。変更は小さいものの、対象条件を絞って同期処理を加える内容になっています。
Threadripper 9980Xの試験で使われたマイクロコードには、Stoakes氏の報告時点でこの修正が見られませんでした。一方、開発者間のやり取りでは、マイクロコードによる修正も配布済みと説明されています。配布状況は製品やBIOSによって異なるため、メーカーが提供するBIOS・ファームウェアと、利用するLinuxディストリビューションのカーネル更新情報が実際の更新経路になります。
修正コミットは10月5日にx86/urgentブランチへ統合されました。Phoronixの10月11日付報道によれば、Linux 7.3-rc7向けの修正として提出され、サポート中の旧系列へのバックポートも予定されています。各ディストリビューションへの配布時期は、更新情報の公開を待つ必要があります。
利用者にとっての意味
Linuxを使うZen 5システムでは、CPUがINVLPGBを備え、修正済みマイクロコードを示すビットがない場合にカーネルの回避策が働く見込みです。試験で影響が示された具体例はThreadripper 9980Xです。
対策を取り入れる際は、マザーボードやPCのBIOS更新情報と、Linuxのカーネル更新情報を確認できます。すでにtlbi=ipiという回避経路も試験されていますが、今回の修正は対象CPUをカーネルが判定して処理する方式です。カーネルとファームウェアの正式な更新が公開された段階で、通常の更新手順に沿って適用できます。
まとめ
AMDのTLBI Erratum #1718では、INVLPGBとTLBSYNCによるTLB無効化が失敗する条件が確認されました。Threadripper 9980Xで独立した再現と回避策の試験が行われ、Linuxカーネルの修正はx86/urgentへ入っています。影響範囲の追加情報と、各ディストリビューションの修正版公開が次の確認点です。9980Xの性能とTRX50マザーボードの構成は関連記事にまとめています。
