キャッシュコヒーレンシとは

キャッシュコヒーレンシは、マルチプロセッサシステムにおいて、複数のCPUコアやプロセッサが共有メモリにアクセスする際に、各コアが持つローカルキャッシュメモリの内容が、一貫した(コヒーレントな)状態に保たれていることを指す概念であり、複数のキャッシュに同一のデータブロックのコピーが存在する場合でも、いずれかのコピーが更新された際には、他のすべてのコピーも最新の値に同期されていることを保証するためのハードウェアおよびプロトコルによる制御機構のことです。

キャッシュコヒーレンシの概要と必要性

現代の高性能なコンピュータシステム、特にマルチコアプロセッサ(マルチプロセッサ)を搭載したシステムでは、CPUコアと主記憶装置(メインメモリ)間の速度差を埋めるために、各コアが独立したローカルキャッシュメモリ(L1, L2キャッシュなど)を持っています。

1. 問題の発生

複数のCPUコアが同じメモリ領域のデータ(データブロック)を読み取り、それぞれが自分のキャッシュにそのコピーを持っている状況を想定します。

このとき、あるCPUコア $A$ がキャッシュ内のデータを更新した場合、他のCPUコア $B$ が持つキャッシュには古いデータが残ってしまいます。コア $B$ が古いデータを読み込んで処理を続行すると、システム全体としてデータの不整合(Inconsistency)が発生し、プログラムが誤動作する原因となります。

2. コヒーレンシの役割

キャッシュコヒーレンシ(Cache Coherency、キャッシュ一貫性)は、このようなデータの不整合を防ぎ、どのCPUコアから見ても、共有メモリ上のデータが常に最新で一貫した状態に見えるように保証する役割を果たします。

主な目的は、システムが共有メモリモデルに基づいて動作する際の信頼性を確保し、プログラマがキャッシュの存在を意識することなく並列処理を記述できるようにすることです。

キャッシュコヒーレンシを維持するプロトコル

コヒーレンシを実現するために、複数のプロセッサが相互に通信し、キャッシュの状態を監視・制御するコヒーレンシプロトコルが使用されます。最も一般的なアプローチは、スヌーピング(Snooping)ディレクトリ(Directory)ベースのプロトコルです。

1. スヌーピングプロトコル(バス監視方式)

  • 原理: 各CPUコアのキャッシュコントローラが、プロセッサバス(共有バス)上で行われる他のプロセッサのメモリ書き込みトランザクションを常に監視(Snoop)しています。
  • 動作: あるプロセッサがキャッシュライン(キャッシュのデータブロック単位)を書き込みによって変更した場合、その変更をバスに通知します。他のプロセッサは、そのキャッシュラインのコピーをローカルに持っている場合、そのコピーを無効化(Invalidate)するか、新しい値に更新(Update)します。
  • 代表的なプロトコル: MSIプロトコルや、その発展形であるMESIプロトコル(Modified, Exclusive, Shared, Invalidの4つの状態を持つ)が広く使われています。

2. ディレクトリベースプロトコル

  • 原理: スケールが大きいシステム(多数のプロセッサを持つシステム)では、スヌーピングによるバスの監視が非効率になるため、共有メモリの各データブロックに対し、どのキャッシュがそのコピーを持っているかを記録する集中型のディレクトリを設けます。
  • 動作: あるプロセッサがデータブロックを更新しようとする場合、まずディレクトリに問い合わせます。ディレクトリは、そのデータを持つ全てのプロセッサリストに対して、通知(無効化リクエストなど)を送信します。
  • 利点: バスへのトラフィックを最小限に抑えられ、プロセッサ数の多いシステムでも効率的なスケーリングが可能です。

状態遷移(MESIプロトコルの例)

MESIプロトコルでは、キャッシュラインは以下の4つのうち、いずれかの状態を持ちます。

  1. Modified (M): ローカルキャッシュ内でのみ変更されており、メインメモリの内容と異なっている(ダーティ)。他のキャッシュにはコピーが存在しない。
  2. Exclusive (E): メインメモリと一致しており、他のキャッシュにはコピーが存在しない。
  3. Shared (S): メインメモリと一致しており、他のキャッシュにもコピーが存在する。
  4. Invalid (I): キャッシュラインの内容が無効であり、使用できない。

いずれかのコアが書き込み操作を行う際、コヒーレンシプロトコルが自動的にこれらの状態を適切に遷移させ、他のコアのキャッシュラインをInvalid状態にするなどして一貫性を維持します。

関連用語

メモリリーク | 今更聞けないIT用語集
メモリウォール | 今更聞けないIT用語集
ソフトウェアエンジニアリング

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。