2つのクライアントが特定のメモリブロックのキャッシュコピーを保持していて、一方のクライアントがそのブロックを変更した場合、もう一方のクライアントのコピーは無効化または更新されなければなりません。そうしないと、システムは矛盾した状態になります。つまり、同じメモリブロックの異なる2つのレコードが存在し、どちらも最新であると主張している状態です。 一貫性のないキャッシュ:キャッシュ間で、単一のアドレス位置の値が異なる。 コンピュータアーキテクチャ において、キャッシュコヒーレンスとは、複数の ローカルキャッシュ に格納される共有リソースデータの均一性のことである。キャッシュコヒーレントなシステムでは、複数のクライアントが共有メモリリソースの同じ領域のキャッシュコピーを持っている場合、すべてのコピーは同じである。キャッシュコヒーレンスがない場合、あるクライアントが領域に加えた変更が他のクライアントには認識されない可能性があり、異なるクライアントが使用するデータが一致しないとエラーが発生する可能性がある。[ 1 ]
キャッシュの一貫性を維持するために、キャッシュコヒーレンスプロトコルが使用されます。主な種類としては、 スヌーピングプロトコル とディレクトリベース プロトコルの2種類があります。
キャッシュの一貫性は、各CPUが 共有メモリリソースの独自のローカルキャッシュを持つことができるマルチプロセッシング システムにおいて特に重要である。
コヒーレントキャッシュ:すべてのキャッシュのコピー内の値が同じである。
概要 各プロセッサに個別のキャッシュメモリを備えた共有メモリマルチ プロセッサシステムでは、共有データのコピーを複数持つことが可能です。1つはメインメモリに、もう1つはそれを要求した各プロセッサのローカルキャッシュにコピーされます。データのコピーのいずれかが変更されると、他のコピーもその変更を反映する必要があります。キャッシュコヒーレンスは、共有オペランド(データ)の値の変更がシステム全体にタイムリーに伝播されることを保証する仕組みです。[ 2 ]
キャッシュコヒーレンスの要件は次のとおりです。[ 3 ]
伝播を書き込む キャッシュ内のデータへの変更は、ピアキャッシュ内の(そのキャッシュラインの)他のコピーにも伝播されなければならない。 トランザクションのシリアル化 単一のメモリ位置への読み書きは、すべてのプロセッサから同じ順序で認識されなければならない。 理論的には、コヒーレンスはロード/ストアの粒度 で実行できます。しかし、実際には、一般的にはキャッシュブロックの粒度で実行されます。[ 4 ]
意味 コヒーレンスは、単一のアドレス位置への読み書きの動作を定義します。[ 3 ]
マルチプロセッサシステムでは、複数のプロセッサがメモリ位置 X のコピーをキャッシュしているとします。キャッシュコヒーレンスを実現するには、次の条件が必要です。[ 5 ]
プロセッサ P がアドレス X に対して書き込みを行った後に、同じプロセッサ P がアドレス X に対して読み出しを行う場合、書き込み命令と読み出し命令の間に他のプロセッサによる X への書き込みが行われない限り、X は常に P によって書き込まれた値を返さなければならない。 プロセッサP1がアドレスXを読み出し、その直後に別のプロセッサP2がアドレスXに書き込みを行った場合、その間に他のプロセッサによる書き込みが一切行われず、かつ読み出しと書き込みが十分に分離されているとすれば、アドレスXは常にP2が書き込んだ値を返すはずです。この条件が、メモリの一貫性のあるビューという概念を定義します。書き込みを共有メモリの場所に伝播させることで、すべてのキャッシュがメモリの一貫性のあるビューを持つことが保証されます。プロセッサP1が、P2による書き込み後であっても、アドレスXの古い値を読み出した場合、メモリは一貫性がない状態であると言えます。 上記の条件は、キャッシュコヒーレンスに必要な書き込み伝播の基準を満たしています。しかし、 トランザクションシリアル化の条件 を満たしていないため、十分ではありません。これをより分かりやすく説明するために、次の例を考えてみましょう。
マルチプロセッサシステムは、4 つのプロセッサ (P1、P2、P3、P4) で構成され、それぞれが初期値 0 の共有変数Sのキャッシュされたコピーを保持しています。プロセッサ P1 が Sの値を (キャッシュされたコピーで) 10 に変更すると、プロセッサ P2 が S の値を自身のキャッシュされたコピーで 20 に変更します。書き込み伝播のみを保証すると、P3 と P4 はP1 と P2 によってS に加えられた変更を確実に認識します。しかし、P3 は P2 による変更を見た後に P1 による変更を見る可能性があり、そのためS の読み取りで 10 を返します。一方、P4 は P1 と P2 による変更をその順序で見る可能性があり、そのためS の読み取りで 20 を返します。プロセッサ P3 と P4 は、メモリに対して一貫性のない認識を持つことになります。
したがって、トランザクションの直列化を満たし、キャッシュの一貫性を実現するためには、このセクションで述べた前の2つの条件に加えて、次の条件も満たす必要があります。
同じ場所への書き込みは順序付けされなければならない。言い換えれば、任意の2つのプロセッサから場所Xに異なる値AとBがこの順序で入力された場合、プロセッサは場所XをBとして読み取った後、Aとして読み取ることは決してできない。場所Xは、AとBの順序で値として認識されなければならない。[ 6 ] コヒーレントシステムの別の定義は、シーケンシャル一貫性 メモリモデルの定義によるものです。「キャッシュコヒーレントシステムは、すべてのスレッドのロードとストアを、各スレッドのプログラム順序を尊重する全体順序で単一のメモリ位置に実行するように見える必要があります」。 [ 4 ] したがって、キャッシュコヒーレントシステムとシーケンシャル一貫性システムの唯一の違いは、定義で言及されているアドレス位置の数です(キャッシュコヒーレントシステムでは単一のメモリ位置、シーケンシャル一貫性システムではすべてのメモリ位置)。
別の定義としては、「マルチプロセッサは、同じメモリ位置へのすべての書き込みが何らかの順序で実行される場合にキャッシュ一貫性がある」というものがあります。[ 7 ]
まれではあるが、特にアルゴリズムにおいては、一貫性とは参照の局所性 を指す場合がある。同じデータの複数のコピーが異なるキャッシュに同時に存在し、プロセッサが自身のコピーを自由に更新できる場合、メモリの不整合が生じる可能性がある。
コヒーレンス機構 一貫性を確保する最も一般的なメカニズムは、スヌーピング とディレクトリベースの 2 つで、それぞれに利点と欠点があります。[ 8 ] スヌーピングベースのプロトコルは、十分な帯域幅 が利用可能であれば、すべてのトランザクションがすべてのプロセッサによって認識されるリクエスト/レスポンスであるため、高速になる傾向があります。欠点は、スヌーピングはスケーラブルではないことです。すべてのリクエストはシステム内のすべてのノードにブロードキャストする必要があるため、システムが大きくなるにつれて、(論理または物理) バスのサイズとそれが提供する帯域幅を拡張する必要があります。一方、ディレクトリは、(3 ホップのリクエスト - フォワード - レスポンス) でレイテンシが長くなる傾向がありますが、メッセージはポイントツーポイントでブロードキャストされないため、帯域幅の使用量ははるかに少なくなります。このため、大規模なシステム (> 64 プロセッサ) の多くは、このタイプのキャッシュコヒーレンスを使用しています。
盗み見 1983年に初めて導入された[ 9 ] スヌーピングは、個々のキャッシュがキャッシュしたメモリ位置へのアクセスを監視するためにアドレスラインを監視するプロセスです[ 5 ] 。書き込み無効化プロトコル と書き込み更新プロトコルは このメカニズムを利用します。 スヌーピング機構では、スヌープフィルタは、1つまたは複数のノードが所有する可能性のあるキャッシュラインを表す複数のエントリを保持することで、スヌーピングトラフィックを削減します。エントリのいずれかを置き換える必要がある場合、スヌープフィルタは、各エントリの存在ベクトルから判断して、最も少ないノードが所有するキャッシュラインを表すエントリを置き換える対象として選択します。最も少ないノードが複数のキャッシュラインを所有している場合は、時間的アルゴリズムまたはその他のタイプのアルゴリズムを使用して選択を絞り込みます。[ 10 ]
ディレクトリベース ディレクトリベースのシステムでは、共有されるデータは共通のディレクトリに格納され、キャッシュ間の整合性が維持されます。このディレクトリはフィルタとして機能し、プロセッサはプライマリメモリからキャッシュにエントリをロードする際に、このディレクトリを通して許可を求める必要があります。エントリが変更されると、ディレクトリはそのエントリを含む他のキャッシュを更新または無効化します。 分散共有メモリ システムは、疎結合システム内のメモリブロック間の一貫性を維持するために、これらのメカニズムを模倣します。[ 11 ]
一貫性プロトコル コヒーレンスプロトコルは、マルチプロセッサシステムにおいてキャッシュコヒーレンスを適用する。その目的は、2つのクライアントが同じ共有データに対して異なる値を見ることが決してないようにすることである。
プロトコルは、一貫性に関する基本要件を満たす必要がある。対象システムやアプリケーションに合わせてカスタマイズすることも可能である。
プロトコルは、スヌーピー型とディレクトリ型に分類することもできます。初期のシステムでは、通常、ディレクトリ型プロトコルが使用されていました。ディレクトリは、共有されるデータと共有者を追跡する役割を担っていました。スヌーピー型プロトコルでは、トランザクション要求(読み取り、書き込み、アップグレードなど)がすべてのプロセッサに送信されます。すべてのプロセッサは要求を監視し、適切に応答します。
Snoopyプロトコルにおける書き込み伝播は、以下のいずれかの方法で実装できます。
書き込み無効化 キャッシュがコピーを保持している場所への書き込み操作が観測されると、キャッシュコントローラはスヌープされたメモリ位置の自身のコピーを無効化し、次のアクセス時にメインメモリから新しい値を読み取らせる。[ 5 ] 書き込み更新 キャッシュがコピーを保持しているメモリ位置への書き込み操作が検出されると、キャッシュコントローラは、監視対象のメモリ位置の自身のコピーを新しいデータで更新します。 プロトコル設計において、共有データのいずれかのコピーが変更された場合、他のすべてのコピーも変更を反映するように「更新」する必要があると規定されている場合、それは書き込み更新プロトコルです。一方、いずれかのプロセッサがキャッシュされたコピーに書き込むと、他のプロセッサは自身のキャッシュされたコピーを破棄または無効化する必要があると規定されている場合、それは書き込み無効化プロトコルです。
しかし、拡張性はブロードキャストプロトコルの欠点の1つである。
コヒーレンスを維持するために、 MSI 、MESI (別名イリノイ)、MOSI 、MOESI 、MERSI 、MESIF 、write-once 、Synapse、Berkeley、Firefly 、Dragonプロトコル など、さまざまなモデルとプロトコルが考案されています。[ 2 ] 2011年、ARM Ltdは SoC のコヒーレンス処理のためにAMBA 4 ACEを提案しました[ 12 ] 。AMBA5仕様グループに属するARM Ltd のAMBA CHI(Coherent Hub Interface)仕様[ 13 ] は、完全コヒーレントプロセッサの接続用インターフェースを定義しています。
参考文献 ↑ マロフカ、アミ (2010-01-01). 「第2章 - マルチコアプログラミングの落とし穴と問題点」. Advances in Computers . Vol. 79. Elsevier. pp. 71–117 . doi : 10.1016/s0065-2458(10)79002-1 . ISBN 978-0-12-381027-4 。 1 2 E. Thomadakis、Michael (2011)。Nehalem プロセッサと Nehalem-EP SMP プラットフォームのアーキテクチャ (PDF) 。テキサス A&M 大学。p. 30。2014 年 8 月 11 日に オリジナル (PDF) からアーカイブされました 。 1 2 Yan, Solihin. 並列マルチコアアーキテクチャの基礎 . OCLC 884540034 . 1 2 Sorin, Daniel J.; Hill, Mark D.; Wood, David Allen (2011-01-01). メモリの一貫性とキャッシュの一貫性に関する入門書 。Morgan & Claypool Publishers. OCLC 726930429 . 1 2 3 パターソンとヘネシー。 『コンピュータ構成と設計』第4 版 。ISBN 978-0-12-374493-7 。↑ Neupane, Mahesh (2004年4月16日). "Cache Coherence" (PDF). 2010年6月20日にオリジナル(PDF)からアーカイブされました。 ↑ Steinke, Robert C.; Nutt, Gary J. (2004-09-01). "A Unified Theory of Shared Memory Consistency". J. ACM . 51 (5): 800– 849. arXiv : cs/0208027 . doi : 10.1145/1017460.1017464 . ISSN 0004-5411 . S2CID 3206071 . ↑ パターソン、デイビッド A.、ヘネシー、ジョン L. (1990). コンピュータアーキテクチャ:定量的アプローチ . モーガン・カウフマン出版. pp. 467–468 . ISBN 1-55860-069-8 。↑ 「Ravishankar, Chinya; Goodman, James (1983年2月28日)『複数のマイクロプロセッサのためのキャッシュ実装』」 " (PDF) . IEEE COMPCON 会議録: 346–350 .↑ Rasmus Ulfsnes (2013 年 6 月)「スヌープベースのキャッシュコヒーレンシ プロトコルのためのスヌープ フィルタの設計」Wayback Machine に 2014 年 2 月 1 日に アーカイブ(PDF)。diva -portal.org 。ノルウェー科学技術大学。2014 年 1 月 20 日に取得。 ↑ 「講義18:スヌーピングとディレクトリベースの一貫性」 ( PDF) 。Berkeley.edu 。 2023年 5月14日 取得 。 ↑ Kriouile (2013年9月16日). キャッシュコヒーレントシステムオンチップ向けACE仕様の形式分析. 『産業用重要システムのための形式手法』所収 . Springer Berlin Heidelberg. ISBN 978-3-642-41010-9 。↑ Ltd、Arm。 「AMBA | AMBA 5」 。Arm Developer 。 2021年4月27日 取得 。
さらに読む パターソン、デイビッド ;ヘネシー、ジョン (2009)。コンピュータ構成 と設計 (第4 版)。モーガン・カウフマン 。ISBN 978-0-12-374493-7 。ハンディ、ジム( 1998)。キャッシュメモリーブック (第2 版)。モーガン・カウフマン 。ISBN 9780123229809 。Sorin, Daniel; Hill, Mark; Wood, David (2011).メモリ一貫性とキャッシュコヒーレンス入門 (PDF) . Morgan and Claypool . ISBN 978-1608455645 2017年10月20日 に取得 。 Steinke, Robert C.; Nutt, Gary J. (2004年9月1日). 「共有メモリの一貫性に関する統一理論」. Journal of the ACM . 51 (5): 800–849 . arXiv : cs/0208027 . doi : 10.1145/1017460.1017464 . S2CID 3206071 .