キャッシュコヒーレンシ

キャッシュコヒーレンシは、マルチプロセッサシステムにおいて、複数の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のセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

クラウドネイティブ技術とアジャイル手法を駆使し、市場投入スピード(Time-to-Market)を最大化。「進化し続けるアプリケーション」を開発します。初期リリースを最速化し、拡張性と柔軟性を備えた、ビジネスの成長に追従できるアプリケーションを開発します。

DX・AI戦略支援

「何から手を付けるべきか分からない」「AIを導入したいが、費用対効果が見えない」といった経営課題に対し、技術とビジネスの両面から解を導き出します。 絵に描いた餅で終わる戦略ではなく、エンジニアリングの実装能力に基づいた、「実現可能で、勝てる技術戦略」を策定します。


リファクタリング・リアーキテクチャ

「システムが古くて改修できない」「障害が頻発する」といった技術的負債を解消します。既存資産の徹底的な診断に基づき、コードのクリーン化(リファクタリング)や、クラウドへの移行(リアーキテクチャ)を行い、システムの寿命を延ばしコストを最適化します。