web-dev-qa-db-ja.com

マイクロコードはメルトダウンを物理的に軽減できますか?

私は利用可能なメルトダウンのマイクロコード修正がないことを知っています(それはすでに さまざま質問 で回答されています)、そして唯一の現存するマイクロコードパッチ( IBRSおよびIPBP )はSpectreバリアントの1つでのみ役立ちますが、Meltdownのマイクロコード修正がpossibleおよび実現可能

具体的には、私は好奇心旺盛です:

  • インテルのマイクロコード実装は、メルトダウンを軽減するのに十分な能力があります。
  • このような緩和策は、極端なパフォーマンスヒットなしで可能です。
  • マイクロコードの修正は十分実用的であり、将来的にはリリースされる可能性があります。
  • この質問に答えるだけの十分な公開情報がありません。

KPTIがMeltdownの現在の「公式」修正であり、そのマイクロコードと新しい コンパイラーインストルメンテーション がSpectreを部分的に処理していることをすでに知っています。免責事項:Intelマイクロコードの制限に光を当てるかもしれない 4c3トーク を見たことはありませんが、制限があることは承知しています。

3
forest

LWNスレッドで満足のいく answer を見ました。 jcm:のコメントから引用

マイクロコードでそれが可能であるとは思えません。それを見てみましょう:

  1. 投機的ロード。マイクロコードでできることは、すべての推測をオフにすること、またはすべてのロードをシリアル化することです(同様)。

  2. 分岐予測。間接予測子(しかしそれはIBRSが行うことです)*

  3. 投機中の権限チェック。投機またはキャッシュをオフにするか、TLBを強制終了するか、ほとんど選択肢がなくなります。

いくつかの理由により、マイクロコードのランダムな命令を単に置き換えたり、複雑な動作を追加したりすることはできません。

  1. すべての命令がマイクロコード化されているわけではありません。高速パス命令はマイクロコードシーケンサーにさえ触れません。

  2. パッチRAMはtinyであり、そのようなパッチのようなものを運ぶことはできません。

  3. 複雑なTLBと分岐予測ロジックは、マイクロコードを介した直接的なアルゴリズム制御の対象ではなく、特定の側面のみが対象です。動作を変更したり、微調整 チキンビット 、制御信号を操作したりできますが、まだデザインに含まれていないものを追加することはできません。

マイクロコードは魔法ではありません。正しく動作しないミルランの複雑な命令の大部分を修正するため、またはチキンビットを強打するためなどがあります。

* IBRSの動作に関するこのステートメントは、LWNに関する別のコメントで 論争 でした。

2
forest