キャッシュコヒーレンシ

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



キャッシュコヒーレンシとは、複数のキャッシュが共有メモリリソースにアクセスする際に、データの一貫性を保つための仕組みです。特にマルチプロセッサシステムにおいて、各プロセッサが持つキャッシュ間でデータの不整合が発生すると、システムの動作が不安定になる可能性があります。キャッシュコヒーレンシは、このような問題を解決し、システム全体の整合性を保つために不可欠な技術です。

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



複数のクライアント(例えばCPU)が共有メモリリソースのキャッシュを保持している場合、あるクライアントがメモリの内容を更新したとしても、他のクライアントのキャッシュにはその変更が即座に反映されない可能性があります。これにより、各キャッシュ間でデータの不整合が発生し、古いデータに基づいて処理が行われるなど、予期しない動作を引き起こす可能性があります。キャッシュコヒーレンシは、このような状況を回避し、常に最新のデータに基づいて処理が行われるようにするための仕組みです。

キャッシュコヒーレンシの定義



キャッシュコヒーレンシは、以下の条件を満たすように設計されています。

1. 一貫性の保証: あるプロセッサが特定のメモリ位置にデータを書き込んだ後、同じプロセッサがその位置からデータを読み出す場合、他のプロセッサによる書き込みがない限り、常に書き込んだ値が読み出される必要があります。これは、プログラムの実行順序が守られることを保証するものです。
2. データの一貫性: あるプロセッサが特定のメモリ位置にデータを書き込んだ後、他のプロセッサがその位置からデータを読み出す場合、他のプロセッサによる書き込みがない限り、書き込んだ値が必ず読み出される必要があります。これは、共有メモリシステム全体でデータの一貫性が保たれることを保証するものです。
3. 書き込みの逐次性: 複数のプロセッサが同じメモリ位置に異なる値を書き込んだ場合、どのプロセッサから見ても書き込みの順序が一定であり、最終的な値は最後に書き込まれた値でなければなりません。

これらの条件は、リードやライトが瞬間的に行われることを前提としていますが、実際のハードウェアではメモリのレイテンシやその他の制約により、瞬時に処理を完了することはできません。したがって、キャッシュコヒーレンシ機構は、これらの制約を考慮した上で、データの一貫性を保つ必要があります。

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



キャッシュコヒーレンシを実現するための主な機構には、以下のものがあります。

1. ディレクトリベースの一貫性機構: 共有メモリのキャッシュブロックを集中管理する方式です。ディレクトリが各キャッシュの状態を把握し、データの整合性を維持します。
2. バススヌーピング: 各キャッシュがアドレスバスを監視し、他のキャッシュがメモリにアクセスする際に、自身が保持しているキャッシュの内容が無効化されるべきかどうかを判断します。これにより、他のキャッシュの更新を検出し、自身のキャッシュの整合性を保ちます。
3. スナーフィング: バス上のアドレスとデータを監視し、キャッシュに保持しているデータが更新された場合、自身のキャッシュもそれに合わせて更新します。これにより、常に最新のデータを保持できます。

これらの機構は、システムの規模や構成によって使い分けられます。スヌーピングは、各ノードの帯域幅が十分な場合に有効ですが、大規模なシステムではバスの帯域幅がボトルネックになる可能性があります。一方、ディレクトリベースは、レイテンシが大きくなる傾向がありますが、大規模システムでのスケーラビリティに優れています。

キャッシュコヒーレンシモデル



キャッシュコヒーレンシを維持するためのモデルやプロトコルも多数存在します。代表的なものとしては、以下のようなものがあります。

MESIプロトコル: 一般的なプロトコルで、キャッシュの状態をModified, Exclusive, Shared, Invalidの4つに分類し、状態遷移を定義します。
MSIプロトコル: MESIプロトコルの簡略版で、Exclusive状態がないものです。
MOSIプロトコル: MESIプロトコルにOwned状態を追加したものです。
MOESIプロトコル: MOSIプロトコルにExclusive状態を追加したものです。
Write-onceプロトコル: 最初に書き込んだ際にのみメモリに書き込むプロトコルです。
Synapse protocol, Berkeley protocol, Fireflyプロトコル, Dragonプロトコル: 他にも様々なプロトコルが存在します。

どのプロトコルを選択するかは、システム全体の性能に大きく影響します。各プロトコルにはそれぞれ特徴があり、システムの要件に合わせて最適なものを選択する必要があります。また、各実装でどのように状態遷移させるかによっても、性能やトラフィック量が変化します。特に、マルチプロセッサ間で頻繁に衝突が発生するようなソフトウェアでは、状態遷移の選択が重要になります。

まとめ



キャッシュコヒーレンシは、マルチプロセッサシステムにおいて、データの整合性を保つために不可欠な技術です。適切な機構とモデルを選択し、効率的なキャッシュコヒーレンシを実現することで、システム全体の性能と信頼性を向上させることができます。

関連項目



ccNUMA (キャッシュコヒーレントな非均一メモリ構造)
メモリバリア

参考文献



* Handy, Jim. The Cache Memory Book. Academic Press, Inc., 1998. ISBN 0-12-322980-4

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。