Intel Alder Lake および Raptor Lake プロセッサの問題を回避するためのパッチが x86/urgent 経由で保留中です。この問題により、カーネル開発者は当面、これらの Intel モバイル/デスクトップ プロセッサでプロセス コンテキスト識別子 (PCID) を無効にする必要があります。

パッチは Linux 6.4 開発用にメインライン化されるように設定されており、不完全なグローバル INVLPG フラッシュを回避するために安定したカーネル バージョンにもバックポートされます。 パッチ Intel Linux エンジニアは次のように説明しています。

「INVLPG 命令は、指定された仮想アドレスの TLB エントリを無効にするために使用されます。PCID が有効な場合、INVLPG は両方の指定されたアドレスの TLB エントリを無効にすることになっています」現在の PCID * および * グローバル エントリ。(注: Global=1 に設定されるのはカーネル マッピングのみです。)

残念ながら、一部の INVLPG 実装では、PCID が有効になっているときにグローバル変換がフラッシュされないままになることがあります。

回避策として、影響を受けるプロセッサでは PCID を決して有効にしないでください。

私は期待しています。最終的には、このソフトウェアの回避策に代わるマイクロコードの緩和策が登場する予定です。ただし、それが発生する正確なバージョン番号は、現時点では不明です。バージョン番号が確定したら、プロセッサ リストを調整して、影響を受けるプロセッサの PCID のみを無効にすることができます。影響を受けるマイクロコード。

注: パッチを適用する必要のない簡単な修正が必要な場合は、カーネル コマンドラインに「nopcid」を貼り付けるだけです。」

影響を受けるプロセッサは終了します。 Intel Alder Lake プロセッサと Raptor Lake プロセッサが登場します。パッチ メッセージで述べたように、Intel はこの問題に対するマイクロコードの軽減策に取り組んでいると言われていますが、少なくとも今のところ、Linux カーネルは Alder Lake/Alder Lake の PCID サポートを無効にするように設定されています。マイクロコードの軽減策が処理できるようになるまで、L/Alder Lake N/Raptor Lake/Raptor Lake P/Raptor Lake S。

INVLPG は、指定された TLB エントリを無効にするために使用されます。少なくとも Alder Lake と Raptor Lakeこれらの新しいプロセッサはメルトダウンの影響を受けないため、メルトダウンを軽減するためにカーネル ページ テーブル分離 (KPTI) は必要ありませんが、古い Intel プロセッサの場合、PCID サポートは、いくつか示すように、カーネル ページ テーブル分離/メルトダウンの軽減に対処する際のオーバーヘッドの一部を相殺するのに役立ちました。カーネル PTI のドキュメントでは、PCID サポートの利点についてさらに詳しく説明しています。

“プロセス コンテキスト IDentifiers (PCID) は、ページ テーブルの変更時に CR3 に特別なビットを設定することで、ページ テーブルの切り替え時に TLB 全体のフラッシュをスキップできるようにする CPU 機能です。これにより、ページ テーブルの切り替え (コンテキストの切り替え時、またはカーネルの出入り時) が安くなります。ただし、PCID サポートを備えたシステムでは、コンテキスト スイッチ コードはユーザー エントリとカーネル エントリの両方を TLB からフラッシュする必要があります。ユーザーの PCID TLB フラッシュはユーザー空間への出口まで延期されるため、コストが最小限に抑えられます。悲惨な PCID/INVPCID の詳細については、intel.com/sdm を参照してください。

PCID サポートのないシステムでは、CR3 の書き込みごとに TLB 全体がフラッシュされます。つまり、システムコール、割り込み、または例外が発生するたびに TLB がフラッシュされます。」

いずれにせよ、この (少なくとも一時的な) PCID サポートの無効化が意味するかどうかを確認するために、Raptor Lake でいくつかのベンチマークを実行するつもりです。エンドユーザーの通常のパフォーマンス領域のいずれかに。

Categories: IT Info