web-dev-qa-db-ja.com

Linuxカーネルは、Spectre Variant 1に対してのみパッチを適用し、Variant 2に対してはパッチを適用しない新しいチップをどのように処理しますか?

Spectre Variant 1および Meltdown にパッチを当てたチップは、ウイスキーレイクやアンバーレイクのように、Spectre Variant 2をどのように処理しますか?新しいラップトップを探しています。現在、Lenovox390を評価しています。 MeltdownとSpectreVariant1のハードウェアが修正されたと主張するWhiskyLakeに同梱される予定です。

A Nand Techによる

大きなパフォーマンスマーカーはSpectre Variant 2に取り組んでいます。ソフトウェアで修正すると、Intelはワークロードに応じてパフォーマンスが3〜10%低下すると予想します–修正した場合ハードウェアでは、Intelはパフォーマンスの低下ははるかに少ないと述べていますが、新しいプラットフォーム(Cascade Lakeなど)がとにかく全体的なパフォーマンスを向上させることを期待しています。 WhiskyLakeもAmberLakeもv2の緩和​​策はありませんが、Whisky Lakeは確かに順調に進んでおり、v3やL1TFなどのより危険な攻撃のいくつかが修正されています。 Whisky Lakeは、プラットフォームも14 ++に対応しているため、パフォーマンスと消費電力に役立つ新しいパフォーマンスビンも提供しています。

だから私の質問は、新しいチップ(ウィスキーレイクとアンバーレイク)で、Spectre Variant 1とMeltdownを修正するだけでパフォーマンスが向上するかどうかですCPUの2/3の脆弱性に対するハードウェアパッチがあるという事実は、カーネルが利用できるハードウェアの何かを提供しますか?それとも、LinuxカーネルはSpectre Variant 2から保護するために、同じ不自由なソフトウェアの緩和策を適用しますか?

6
Evan Carroll

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

カーネルレベルでは、Spectre/Meltdownの緩和策は単一のモノリシックな塊ではありませんが、Spectre/Meltdownの各バリアントには独自の緩和策のセットがあることに注意してください。

Meltdown

Meltdownのカーネルレベルの軽減策は、ページテーブル分離と呼ばれます。カーネルはそれを単独で実行でき、パフォーマンスに大きな影響を与えます。

これは、プロセッサー+マイクロコードがプロセスコンテキストID(PCID)を提供する場合に役立ちます。さらに、プロセッサーでINVPCID命令が使用可能な場合はさらに役立ちます。特定のプロセッサモデル。 Linuxは、これらが利用可能であれば確かに使用でき、メルトダウン緩和のパフォーマンスへの影響を大幅に減らすことができます。

もちろん、最良の状況は、ページテーブルの分離がまったく必要ない場合であり、これは明らかに、メルトダウンの「ハードウェア」修正が意味するものです。

システムが十分に安全でパフォーマンスがより重要であると思われる場合は、メルトダウンフィックスをオフにするオプションがあります。

スペクターバリアント1

これは、パッチを適用することで軽減されますコンパイラ特定の状況でポインタをより注意深く処理し、パッチを適用したコンパイラを使用してカーネル(およびハイパーバイザー(存在する場合))とセキュリティが重要なバイナリを再構築します。これは行われました。コンパイルされたコードの主要な場所にいくつかの追加の命令が追加されるため、プログラムの実行が少し大きくなり、遅くなりますが、幸いなことに、通常、その違いはごくわずかです。

私が理解している限り、マイクロコードとプロセッサの設計はここではあまり機能しません。CascadeLakeでさえ、これに対するOS/VMMレベルの修正のみを示しています。

スペクターバリアント2

これはトリッキーなものであり、おそらく修正するのが最も難しいでしょう。真の修正にはCPU設計理論のレベルでの革新が必要だからです。

CPUハードウェア+マイクロコードの支援がなくても、カーネルはretpoline、つまりRETurn命令トランポリンを実装できます。これは、アセンブラレベルのプログラミング手法です。 Meltdown緩和策と同様に、これを実装するとシステムパフォーマンスから重要なチャンクが失われるため、セキュリティよりもパフォーマンスが必要であるというこの緩和策を無効にするオプションがあります。

CPU +マイクロコードは、カーネルのSpectreV2緩和を容易にするいくつかの新機能を再び提供できます。

  • 間接分岐制限スペキュレーション(IBRS)。基本的に、CPUの分岐予測子の切り替え可能なモードであり、ユーザー空間コードがユーザー->カーネルモード遷移全体でカーネル空間の分岐予測に影響を与えるのを防ぎます。
  • 間接分岐予測バリア(IBPB):基本的に、IBPB命令の後のコードの分岐予測に影響を与える前に、コードを停止する新しいCPU命令。
  • シングルスレッド間接分岐予測子(STIBP):同じコア上のハイパースレッドが分岐予測情報を共有しないようにする方法。

Linuxカーネルは、必要に応じてこれらの機能を使用して、レトポリン技術によって引き起こされるパフォーマンスの低下を最小限に抑えることができます。

詳細については、このIntel PDFを参照してください。

3
telcoM