投機的実行とは何ですか?

Intel Sandy Bridge CPUダイショット

の議論としてスペクターとメルトダウンの欠陥技術ニュースサイクルを支配し続け、ハイエンドCPUの特定の機能である投機的実行への言及が繰り返されています。これは、ハイエンドのARM製品、AppleのカスタムARMコア、IBMのPOWERファミリ、およびIntelとAMDが生産するx86プロセッサの大部分の主要機能です。ここでは、投機的実行とは何か、それが最近のマイクロプロセッサの他の主要な機能とどのように関連しているか、そして最近のMeltdownバグが特にIntel CPUをターゲットにしている方法について説明します。

投機的実行とは何ですか?

投機的実行は、CPU設計者がCPUパフォーマンスを向上させるために使用する手法です。これは、動的実行とも呼ばれる、順不同実行の3つのコンポーネントの1つです。複数の分岐予測(近い将来に必要になる可能性が最も高い命令を予測するために使用)とデータフロー分析(命令を到着順に実行するのではなく、最適な実行のために整列するために使用)とともに、投機的実行により、以前のIntelプロセッサーと比較して劇的なパフォーマンスの向上。これらの手法は非常にうまく機能したため、K5から始まる順不同の処理を使用するAMDによってすぐに採用されました。 ARMは低消費電力のモバイルプロセッサに重点を置いていたため、当初はOOoEの分野から除外されていましたが、Cortex A9の構築時にアウトオブオーダー実行を採用し、より強力なCortexを使用してこの技術の使用を拡大し続けましたブランドのCPU。



仕組みは次のとおりです。最新のCPUはすべてパイプライン化されています。つまり、次の図に示すように、複数の命令を並行して実行できます。



パイプライン-ウィキペディア

画像による ウィキペディア。これは、パイプライン化されたCPUの一般的な図であり、命令がプロセッサをクロックサイクルからクロックサイクルに移動する方法を示しています。

緑のブロックがif-then-elseブランチを表すと想像してください。分岐予測子は、どの分岐が実行される可能性が高いかを計算し、その分岐に関連付けられている次の命令セットをフェッチし、使用する2つのコード分岐のどちらかを知る前に、投機的に実行を開始します。上の図では、これらの投機的命令は紫色のボックスで表されています。分岐予測子が正しく推測した場合、CPUが必要とする次の命令セットが整列し、準備が整い、パイプラインのストールや実行遅延は発生しません。



分岐予測と投機的実行がなければ、パイプラインの最初の命令(緑色のボックス)が実行を終了してステージ4に移動するまで、CPUはどの分岐を実行するかを認識しません。1つの命令セットから次に、CPUは適切な命令が到着するのを待つ必要があります。 CPUが有用な作業を実行している可能性があるため、システムパフォーマンスが低下します。

もちろん、その「投機的」な実行の理由は、CPUが間違っている可能性があるためです。そうであれば、システムは適切なデータをロードし、代わりにそれらの命令を実行します。しかし、分岐予測子はそれほど頻繁に間違っているわけではありません。正確率は通常95%を超えます。

投機的実行を使用する理由

数十年前、アウトオブオーダー実行が発明される前は、CPUは今日、「順序どおり」の設計と呼ばれていました。命令は受信した順序で実行され、順序を変更したり、より効率的に実行したりすることはありません。順序実行の主な問題の1つは、問題が解決されるまで、パイプラインのストールによりCPU全体が停止することです。



投機的実行の開発を促進したもう1つの問題は、CPUとメインメモリの速度のギャップでした。下のグラフは、CPUクロックとメモリクロックのギャップを示しています。ギャップが大きくなると、CPUがメインメモリで情報を配信するために待機する時間も増加しました。 L1、L2、L3キャッシュや投機的実行などの機能は、CPUをビジー状態に保ち、アイドリングに費やす時間を最小限に抑えるように設計されています。

mem_gap

メモリがCPUのパフォーマンスと一致する場合、キャッシュは必要ありません。

出来た。大規模なオフダイキャッシュと順不同の実行の組み合わせにより、IntelのPentium ProおよびPentium IIは、以前のチップでは実現できなかった方法で脚を伸ばす機会を与えられました。 1997年のAnandtechによるこのグラフ 論文 利点を明確に示しています。

cpuben6

投機的実行と大きなキャッシュの組み合わせのおかげで、Pentium II 166は、Pentium 250 MMXのパフォーマンスを決定的に上回っています。

最終的に、アウトオブオーダー実行のメリットをほとんどの消費者に提供したのはPentium IIでした。 Pentium IIは、直前にトップエンドであったPentiumシステムに比べて高速なマイクロプロセッサでした。 AMDは完全に機能する第2層のオプションでしたが、最初のAthlonが発売されるまで、Intelは絶対的なパフォーマンスの王冠を獲得していました。

Pentium Proとそれ以降のPentium IIは、Intelが使用していた以前のアーキテクチャよりもはるかに高速でした。これは保証されませんでした。 IntelがPentium Proを設計したとき、大量のダイと電力バジェットを費やして、順不同の実行を可能にしました。しかし、賭けは報われました。

Intel、AMD、およびARMが投機的実行を実装する方法には違いがあり、それらの違いは、他のベンダーがそうでない方法でIntelがこれらの攻撃の一部にさらされている理由の一部です。しかし、テクニックとしての投機的実行は、使用を止めるにはあまりにも価値があるだけです。現在、AMD、ARM、IBM、Intel、SPARCの各シングルハイエンドCPUアーキテクチャは、アウトオブオーダー実行を使用しています。また、投機的実行は、会社ごとに異なる方法で実装されますが、それぞれが使用します。投機的実行がなければ、機能しないことがわかっているアウトオブオーダー実行。

なぜメルトダウンはインテルにとってこのような問題なのですか?

メルトダウンがインテルにそのような独特の頭痛を引き起こす理由は、インテルが許可するためです 投機的 ユーザー空間のアプリケーションがアクセスできる特権メモリにアクセスするための実行。 MarkCCの方法は次のとおりです Goodmath.org 問題について説明します:

投機的実行で実行されているコード しない キャッシュからのメモリアクセスが特権メモリにアクセスしているかどうかのチェックを行います。特権チェックなしで命令の実行を開始し、投機的実行を続行するかどうかをコミットするときは、チェックが発生します。しかし、その間に、特権チェックなしでキャッシュに対して一連の命令を実行する機会があります。したがって、分岐予測の正しい順序でコードを記述して、分岐予測を希望どおりに機能させることができます。そして、それを使って、読むことができないはずのメモリを読むことができます。

他のCPUベンダーの投機的予測の実装では、ユーザー空間アプリケーションがカーネル空間メモリの内容をいつでも調査することを許可していません。ソフトウェアでMeltdownを軽減する唯一の方法は、カーネルとユーザーのメモリ空間を切り替えるたびに、システムに強制的に完全なコンテキスト切り替えを実行させることです。 Meltdownによるパフォーマンスへの影響が非常に多様である理由は、このパッチがどれだけ害を及ぼすかは、アプリケーションがコンテキストスイッチを行う頻度の関数であるためです。ただし、パフォーマンスの問題はサーバーに限定されているように見え、一般にコンシューマー側では見られませんでした-少なくとも、それほどではありません。

一部の緩和戦略にはパフォーマンスへの影響があります

私たちが提案した緩和戦略の1つは、特に最近では、ハイパースレッディングを無効にすることです。 AppleはMDSに関連するアップデートを発行し、同じCPUコア内の複数のスレッド間でデータがリークする機能を制限したい場合は、HTを無効にできることをユーザーに通知しました。また、これによりパフォーマンスが最大40%低下する可能性があるとも述べています。 HTは一般にIntel CPUに対してそれほどパフォーマンスが高くないため、これは極端なケースです。通常の影響は20〜30%の範囲になると予想されますが、それでもかなりの打撃であり、パフォーマンスははるかに優れています。通常、新しいCPUバージョンから確認します。

人々が身を守るためにこれを行う必要がある度合いについて、専門家の間で真の意見の相違があります。 FreeBSDプロジェクトを運営しているTheo de Raadtのように、 無効なHT デフォルトでは。他のOSはまだこのステップを踏んでいません。 Appleのような企業は、顧客にもこれを行うように指示するのを避けてきました。 書き込み:「この記事の執筆時点では、顧客に影響を与える既知のエクスプロイトはありませんが、自分のコンピューターが攻撃のリスクが高いと考えている顧客(HTを無効にできる)です。」 SpectreとMeltdownの修正に関連する一部のパッチもパフォーマンスに影響を与えましたが、一部の影響はその後のパッチによって軽減され、スローダウンの程度はワークロードであり、ある程度はそもそもCPUアーキテクチャーに依存しています。

長期的には、AMD、Intel、およびその他のベンダーが、ハードウェア、ソフトウェア、およびファームウェアの更新を組み合わせて、これらの問題が発生したときにパッチを適用し続けることを期待しています。概念的には、このようなサイドチャネル攻撃は、不可能ではないにしても、防ぐことは非常に困難です。特定の問題は軽減または回避できますが、投機的実行の性質は、特定の状況下で特定の量のデータがリークすることを意味します。ほとんどのユーザーが受け入れたいパフォーマンスよりもはるかに高いパフォーマンスを放棄せずにそれを防ぐことは不可能かもしれません。

Copyright © 全著作権所有 | 2007es.com