マルチプロセッサシステムのキャッシュ。 キャッシュの一貫性。 MESIプロトコル

こんにちは、Habr!



かつて、このトピックは私にとって非常に興味深いものだったので、控えめな知識をあなたと共有することにしました。 この記事は完全な詳細な説明ではなく、簡単な概要であると主張しています。



はじめに



現代のコンピューターでは、メモリーへのアクセスが同時に複数の独立したプロセッサー(カーネル、トレード)を持つことができるのは秘密ではありません。 それぞれに独自のプライベートキャッシュがあり、そこに必要な行のコピーが保存され、一部はローカルに変更されます。 問題は、複数のプロセッサが同時に同じラインを必要とする場合に発生します。 システムを正しく動作させるには、すべてのプロセッサに単一のメモリ空間を提供する必要があると結論付けることは難しくありません。



これを確実にするために、特別な一貫性プロトコルが発明されました。 キャッシュの一貫性-キャッシュプロパティ。システムが共有するローカルキャッシュに格納されているデータの整合性を意味します。 各キャッシュセルには、システムの他のプロセッサの同じアドレスを持つセルの状態にその状態がどのように関係するかを記述するフラグがあります。



現在のセルの状態が変更された場合、他のキャッシュに何らかの方法で通知する必要があります。 たとえば、マルチプロセッサシステムの内部ネットワークを介して配信されるブロードキャストメッセージを生成します。



多くのコヒーレンスプロトコルが発明されました。これらは、アルゴリズム、状態の数、そして結果として、操作の速度とスケーラビリティが異なります。 最新のコヒーレンスプロトコルのほとんどは、MESIプロトコルのバリエーションです[1]。 このため、検討します。



メシ


このスキームでは、各キャッシュラインは次の4つの状態のいずれかになります。







MESIプロトコル遷移図。 アクセスは、このキャッシュのプロセッサによって開始された場合はローカル、リモート-他から呼び出された場合はリモートです。



画像



また、MESIプロトコルの最適化の1つを検討したいと思います。



モエシ


このプロトコルでは、ステータスフラグが別の所有者(O) 英語で拡張されています。 所有者。 この状態は、「変更済み」状態と「共有」状態の組み合わせです。 この状態により、変更された行をメモリに書き込む必要がなくなるため、メモリに送信されるトラフィックが減少します。 この状態のキャッシュラインには、最新のデータが含まれています。 説明された状態は、他のプロセッサがキャッシュ内のRAMに関連する最新のデータを持つことができるという点で、共有と似ています。 ただし、これとは異なり、このような状態はメモリ内のデータが古いことを意味します。 特定のアドレスを持つ1行のみがこの状態を持つことができ、このアドレスでの読み取りのすべての要求に応答するのはメモリではなく、それです。



本日お話ししたかったのはこれだけです。私の記事が誰かの興味を引くことを願っています。



このトピックの詳細については、以下に示すソースをご覧ください。



文学



[1] 遷移図を含む既存のプロトコルの概要

[2] G.S. レシストフ、E.A。 ユリュギン、AA イワノフ、P.L。 ニュージャージー州シシポル クリッカー「コンピューターシミュレーションの基礎」 URL

[3] Ulrich Drepper「すべてのプログラマーがメモリについて知っておくべきこと」 URL



All Articles