LinuxカーネルはSpectreバリアント1にのみパッチされ、バリアント2にはパッチされていない最新のチップをどのように処理しますか?

LinuxカーネルはSpectreバリアント1にのみパッチされ、バリアント2にはパッチされていない最新のチップをどのように処理しますか?

チップパッチ法幽霊変形1と崩れるWhisky LakeやAmber Lakeと同様に、Spectre Variant 2も処理できますか?新しいラップトップの仕様を探しています。現在Lenovo x390をレビューしています。 MeltdownとSpectre Variant 1のハードウェア修正があると主張するWhisky Lakeと一緒にリリースされます。

エイナンドテックによると

最大のパフォーマンス指標は、Spectre Variant 2を解決することです。 Intelはソフトウェア修正後3~10%の性能低下を予想ワークロードによって異なります - ハードウェアに固定されている場合、Intelはパフォーマンスの低下がはるかに少ないと言いますが、Cascade Lakeなどの新しいプラットフォームは関係なく、より良い全体的なパフォーマンスを提供すると期待しています。 Whisky LakeとAmber Lakeはどちらもv2の緩和​​機能はありませんが、Whisky Lakeは確かにv3やL1TFなどのより危険な攻撃を解決するプロセスにあります。 Whisky Lakeはプラットフォームが14 ++にあるため、新しいパフォーマンスオプションを提供してパフォーマンスと消費電力を向上させるのに役立ちます。

だから私の質問は新しいチップ(Whisky LakeとAmber Lake)でSpectre Variant 1とMeltdownを修正すると、どのようにパフォーマンスが向上しますか?CPUの脆弱性の3分の2にのみハードウェアパッチを提供するという事実は、カーネルにハードウェアの利点を提供しますか?それとも、LinuxカーネルがSpectreの亜種2を守るために同じ深刻なソフトウェア軽減を適用するのでしょうか?

ベストアンサー1

これはIntel中心の答えになります。

カーネルレベルでは、Spectre / Meltdown緩和はモノリシックではありませんが、各Spectre / Meltdownバリアントには独自の緩和セットがあります。

崩れる

Meltdownのカーネルレベルの軽減をページテーブル分離と呼びます。カーネルはこれを自分で行うことができ、これはパフォーマンスに大きな影響を与える可能性があります。

プロセスコンテキスト識別子(PCID)がプロセッサ+マイクロコードによって提供される場合は、INVPCID命令がプロセッサに提供されることをお勧めします。マイクロコードが実行できる操作に応じて、Meltdown Fixマイクロコードアップデートはこれらの機能の1つまたは両方を追加します。特定のプロセッサモデル別。 Linuxは可能であれば確実に使用でき、Meltdownの軽減がパフォーマンスに与える影響を大幅に軽減できます。

もちろん、最良のシナリオは、ページテーブルの分離がまったく必要ないということです。これは明らかにMeltdownの「ハードウェア」修正です。

システムが十分に安全でパフォーマンスがより重要であると思われる場合は、Meltdownリカバリをオフにすることを選択できます。

ゴーストバリアント1

これはパッチで軽減できます。翻訳者場合によっては、ポインタをより慎重に処理し、パッチ適用されたコンパイラを使用して、カーネル(およびハイパーバイザー)とセキュリティにとって重要なバイナリを再構築します。これが完了しました。コンパイルされたコードの戦略的場所にいくつかの追加のコマンドを追加することで、プログラムを少し大きくし、実行速度を遅くしますが、幸いにもその違いは一般的に小さくなります。

私が理解しているように、マイクロコードとプロセッサの設計はここで大きな役割を果たしません。 Cascade Lakeでさえ、これに対するOS / VMMレベルの修正のみを示します。

ゴーストバリアント2

これは難しい問題であり、おそらく解決するのが最も難しいでしょう。実際のソリューションには、次のレベルのイノベーションが必要なためです。CPU設計理論

カーネルは、CPUハードウェア+マイクロコードの助けを借りずにこれを達成できます。レボリン、すなわち。RETURN コマンド トランポリン。これはアセンブリレベルのプログラミング技術です。メルトダウンの軽減と同様に、このアクションを実装するとシステムのパフォーマンスが低下するため、セキュリティよりもパフォーマンスが向上するため、この緩和を無効にすることを選択できます。

CPU +マイクロコードは、カーネルがSpectre V2に対してより簡単に軽減できるように、いくつかの新機能を再提供できます。

  • IBRS(間接分岐制限推測)は、デフォルトでは、ユーザー間カーネルモードの切り替え中にユーザー空間コードがカーネル空間の分岐予測に影響を与えないようにするCPU分岐予測器の切り替え可能モードです。
  • 間接分岐予測バリア(IBPB):デフォルトでは、IPBB命令の次のコードから分岐予測に影響を与える前にすべてのコードを停止する新しいCPU命令です。
  • STIBP(Single-threaded Indirect Branch Predictor):同じコアのハイパースレッドが分岐予測情報を共有しないようにする方法です。

Linuxカーネルは、適切な状況でこれらの機能を使用して、リトポリン技術によるパフォーマンスの低下を最小限に抑えることができます。

詳細については、このインテルPDFを参照してください。

おすすめ記事