キャッシュ・コヒーレンシとは? わかりやすく解説

コヒーレンシ

別名:コヒーレンシー,キャッシュコヒーレンシ
【英】cache coherency

コヒーレンシーとは、メインメモリキャッシュメモリデータにおける一貫性のことである。

コヒーレンシーは特にマルチプロセッサにおいて重要視される通常データキャッシュメモリに上にあれば、そのキャッシュメモリから内容読み取る複数プロセッサデータを扱う場合に、メインメモリ上のデータキャッシュメモリ上のデータ違いがあると、正しい処理が行われなくなってしまう。

コヒーレンシーを保つための技術はいくつかある。例としては、先にキャッシュメモリだけに書き込みキャッシュから追い出されるときに、メインメモリ書き出すライトバック方式と、メモリ内容キャッシュメモリメインメモリ同時に書き込むライトスルー方式などを挙げることができる。なお、DMAコントローラによるメモリ転送のようなプロセッサとは独立したメモリ書き込みがあると、メインキャッシュメモリ間での内容不一致発生する問題がある。この問題回避するためには、メモリ転送キャッシュ対象外メモリ限定する一時的にキャッシュ無効にする、あるいは監視によりメインメモリからキャッシュメモリコピーすることで一貫性を取る機構が必要となる。

半導体メモリのほかの用語一覧
メモリ:  キャッシュメモリ  記憶領域  共有メモリ  コヒーレンシ  メモリスイッチ  メモリ  メモリウェイト

キャッシュコヒーレンシ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/03/20 15:28 UTC 版)

リソースを共有する複数のキャッシュの概念図

キャッシュコヒーレンシ: cache coherency)とは、共有リソースに対する複数のキャッシュの一貫性を意味する。キャッシュコヒーレンシはメモリ一貫性の一種である。

複数のクライアントが共有メモリリソースのキャッシュを保持するとき、キャッシュ間のデータの不一致という問題が生じる。この問題は特にマルチプロセッシングシステムのCPU間で顕著である。右図において、上のクライアントがメモリのある部分を以前に読み込んでいてキャッシュ上にコピーを保持しているとき、下のクライアントが同じメモリ部分を更新すると、更新を何らかの方法で伝えない限り上のクライアントのキャッシュの内容は不正となる。キャッシュコヒーレンシはそのような状況に対処し、キャッシュとメモリの間の一貫性を保つことである。

定義

一貫性を保つには、同じメモリ位置へのリードとライトの振る舞いを定義する。キャッシュコヒーレンシは以下の条件に適合するよう行われる。

  1. プロセッサPが位置Xにライトし、同じプロセッサPがXをリードする。その間、他のプロセッサがリードやライトを行っていない場合、Xは常にPがライトした値を返す。これはプログラムの実行順序の保持とも関係し、単一処理アーキテクチャでも常に成り立つ。
  2. プロセッサP2が位置Xにライトし、その後プロセッサP1がXをリードしたら、その間他のプロセッサがXにライトしていないなら、Xは常にP2がライトした値を返す。これはメモリの一貫性を定義する条件である。P2がライトした後もプロセッサから古い値がリードされる場合、メモリの一貫性が保たれていないと言える。
  3. 同じ位置へのライトは逐次化される。つまり、Xという位置に対してAという値のライトとBという値のライトがそれぞれ別のプロセッサから発行されたとき、どのプロセッサから見てもライトの順序は一定でなければならず、最終的な値は後からライトした値でなければならない。

これらの条件はリードやライトが瞬間的に行われると仮定して定義している。しかし、実際のハードウェアではメモリレイテンシもあるし、その他アーキテクチャ上の制約によって瞬間的にリードやライトを実行することはできない。プロセッサXがライトを発行した直後にプロセッサYがリードを発行したとき、その間隔が短いとYにはXがライトした内容が見えない場合がある。メモリ一貫性モデルでは、ライトで書き込んだ値はその後の他のプロセッサからのリードで必ず取得できるようにしなければならない。

キャッシュコヒーレンシ機構

ディレクトリベースの一貫性機構
キャッシュブロック群を集中ディレクトリ管理する。
バススヌーピング
個々のキャッシュ機構がアドレスバスを常に監視し、キャッシュ上にあるメモリ位置へのアクセスがないかを見ている。キャッシュ上にあるメモリ位置へのライトが観測されたら、キャッシュコントローラが自身のキャッシュ上のコピーを無効化する。
スナーフィング (snarfing)
キャッシュコントローラはバスのアドレスとデータ双方を監視し、自身のキャッシュ上のコピーのある位置が更新されたら、キャッシュの内容もそれに合わせて更新する。

分散共有メモリシステムはこれらの機構を疎結合システムに分散配置されたメモリ間でも擬似的に実現し、一貫性を保とうとする。

ディレクトリとスヌーピングはよく研究されていて、それぞれの利点と欠点がよく分かっている。スヌーピングは各ノードの帯域幅が十分大きければ性能がよい。しかし、スケーラビリティはよくない。全てのメモリアクセス要求を全体にブロードキャストしなければならないため、ノード数が増えるとバスの帯域幅もより大きくしなければならなくなる。一方ディレクトリはレイテンシが大きくなる傾向がある(ノードとメモリの間にディレクトリ機構があるため)が、ブロードキャストが不要であるため帯域幅は小さくてもよい。このため、64プロセッサ以上程度の大規模システムではディレクトリベースのキャッシュコヒーレンシを使うことが多い。

一貫性モデル

キャッシュコヒーレンシを保つための各種モデルやプロトコルが考案されてきた。以下に主なものを挙げる。

  • MESIプロトコル(イリノイプロトコル)
    • MSIプロトコル
    • MOSIプロトコル
    • MOESIプロトコル
  • Write-onceプロトコル英語版
  • Synapse protocol
  • Berkeley protocol
  • Fireflyプロトコル英語版
  • Dragonプロトコル英語版

一貫性モデルの選択はキャッシュコヒーレンシシステムの設計においては重要である。一貫性モデルには様々な性能とスケーラビリティのものがあり、個々のシステム毎にどれが最適かは異なる。

さらに、それぞれの実装でどのように状態遷移させるかも様々である。リードやライトで更新するのか無効化するのかによっても4種類の遷移の組合せが考えられる。状態遷移の選択によってキャッシュ間のトラフィック量が変わり、それが全体としての実際の帯域幅にも影響する。マルチプロセッサのキャッシュ間で頻繁に衝突が発生するようなソフトウェアでは、この点も考慮する必要がある。

関連項目

参考文献


キャッシュコヒーレンシ (Cache Coherency)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/05 14:09 UTC 版)

キャッシュメモリ」の記事における「キャッシュコヒーレンシ (Cache Coherency)」の解説

詳細は「キャッシュコヒーレンシ」を参照 マルチCPU/キャッシュ構成など複数バスマスタ存在し各々データ更新行った場合でも最新正しデータアクセスできるよう保つべきデータ一貫性のことをキャッシュコヒーレンシもしくはキャッシュコンシステンシ (Cache Consistency) という。データ更新上記ライトバック方式用いた場合など、キャッシュ更新されデータ滞留して主記憶装置など下位レベルメモリには最新データ存在しない可能性がある。この時に複数CPU同一記憶領域参照更新しようとすると、データ不整合起こり正し結果得られないため、これを解決しどのCPUも必ず最新データアクセスできるようにする必要があるこのため代表的なアルゴリズムスヌープ方式ディレクトリ方式共有キャッシュがある。 スヌープ方式 (Cache Snooping) 詳細は「バススヌーピング」を参照 キャッシュコヒーレンシのアルゴリズムにおいて、特に各キャッシュ自身搭載され方法としてスヌープ方式(スヌープキャッシュ)がある。これは各々キャッシュ自身や他CPUキャッシュライン更新状態を把握管理し、他のキャッシュ更新状態の情報交換することで、どのキャッシュ最新データ存在するかを知り、各キャッシュ必要なとき最新データ取得できるように自身の状態を変更したラインパージを行う。この情報交換は共通のデータバスを介して行われるため、情報通知実際のデータ転送との順序保たれ破綻起こすことはない。逆に共通バス持たない分散型メモリシステムには用いることが困難などの制約もある。このプロトコルとして下記のものが知られている。無効型プロトコル (Invalidate Protocol) 複数キャッシュから参照があるアドレス対しあるキャッシュ更新を行う場合、そのアドレスダーティであるとして参照中の全キャッシュ該当ライン無効化する。これにより更新されラインありながら他のキャッシュで古いデータキャッシングしている状態がなくなりコヒーレンシ保たれる。MESI(Illinoisプロトコル)、MOSI(Berkeleyプロトコル)などがある。 更新型プロトコル (Update Protocol) 複数キャッシュ参照しているアドレスに対してデータ更新を行うときはライトスルー型となり、単独アクセスしている場合ライトバック型となるような制御を行うことで更新データ行き渡らせコヒーレンシを保つ。MEI(Fireflyプロトコル)、MOES(DRAGONプロトコル)などがある。 ディレクトリ方式 (Directory-based Protocol) スヌープ方式異なりメモリ一貫性ディレクトリと呼ぶ専用領域にて一元管理する方式。この領域実装上のメモリ領域分散してよく、分散メモリ型システム適している。 共有キャッシュ (Shared Cache) 1つキャッシュ対し複数CPU参照できるような構成を持つキャッシュ1チップ集積され複数CPUを扱うなど限定的な場面ではキャッシュコヒーレンシを根本的に解決するが、キャッシュ自体構造が非常に複雑となる、もしくは性能低下要因となり、多くCPU接続することはより困難となる。

※この「キャッシュコヒーレンシ (Cache Coherency)」の解説は、「キャッシュメモリ」の解説の一部です。
「キャッシュコヒーレンシ (Cache Coherency)」を含む「キャッシュメモリ」の記事については、「キャッシュメモリ」の概要を参照ください。

ウィキペディア小見出し辞書の「キャッシュ・コヒーレンシ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「キャッシュ・コヒーレンシ」の関連用語

キャッシュ・コヒーレンシのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



キャッシュ・コヒーレンシのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【コヒーレンシ】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのキャッシュコヒーレンシ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのキャッシュメモリ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS