コヒーレンシ
【英】cache coherency
コヒーレンシーとは、メインメモリとキャッシュメモリのデータにおける一貫性のことである。
コヒーレンシーは特にマルチプロセッサにおいて重要視される。通常、データがキャッシュメモリに上にあれば、そのキャッシュメモリから内容を読み取る。複数のプロセッサがデータを扱う場合に、メインメモリ上のデータとキャッシュメモリ上のデータに違いがあると、正しい処理が行われなくなってしまう。
コヒーレンシーを保つための技術はいくつかある。例としては、先にキャッシュメモリだけに書き込み、キャッシュから追い出されるときに、メインメモリに書き出すライトバック方式と、メモリ内容をキャッシュメモリとメインメモリに同時に書き込むライトスルー方式などを挙げることができる。なお、DMAコントローラによるメモリ転送のようなプロセッサとは独立したメモリ書き込みがあると、メインとキャッシュメモリ間での内容に不一致が発生する問題がある。この問題を回避するためには、メモリ転送をキャッシュ対象外のメモリに限定する、一時的にキャッシュを無効にする、あるいは監視によりメインメモリからキャッシュメモリにコピーすることで一貫性を取る機構が必要となる。
キャッシュコヒーレンシ
キャッシュコヒーレンシ (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)」を含む「キャッシュメモリ」の記事については、「キャッシュメモリ」の概要を参照ください。
固有名詞の分類
- キャッシュコヒーレンシのページへのリンク