スヌーピングプロトコルとは
スヌーピングプロトコルは、マルチプロセッサシステムや分散共有メモリシステムにおいて、複数のCPUが共有するキャッシュメモリの一貫性(キャッシュコヒーレンシ)を維持するために、各プロセッサが他のプロセッサのメモリ書き込み操作を監視(スヌープ)する仕組みを定めた通信規約のことであり、いずれかのプロセッサが共有データを変更した際に、他のプロセッサが持つ古いキャッシュデータを無効化または更新することで、常に最新のデータアクセスを保証するための、高性能並列コンピューティング環境における不可欠なキャッシュ制御技術のことです。
スヌーピングプロトコルの概要と必要性
現代の高性能なコンピュータシステムでは、処理速度の速いCPUと、比較的低速な主記憶装置(メインメモリ)との速度差を埋めるために、CPUごとにキャッシュメモリが設けられています。複数のCPUが同じメインメモリを共有するマルチプロセッサシステムでは、以下の問題が発生します。
1. キャッシュコヒーレンシの問題
複数のCPUが同じデータ(メモリのアドレス)をそれぞれのキャッシュに読み込んだ状態で、あるCPUがそのデータを更新(書き込み)した場合、他のCPUのキャッシュ内のデータは古いままとなり、データの一貫性(コヒーレンシ)が失われます。
スヌーピングプロトコル(Snooping Protocol)は、このコヒーレンシを維持するために設計されました。
2. スヌーピングの仕組み
「スヌーピング(Snooping)」とは、「のぞき見する」という意味です。このプロトコルでは、各プロセッサのキャッシュコントローラが、プロセッサ間で共有されているバス(Bus)上のすべてのメモリトランザクション(読み書きの要求)を監視します。
- 監視対象: 他のプロセッサからの「書き込み」要求を特に監視します。
- 動作: 自身のキャッシュに監視されたアドレスのデータが存在する場合、そのデータに対して適切に処理(無効化または更新)を行うことで、キャッシュコヒーレンシを維持します。
代表的なスヌーピングプロトコル
スヌーピングプロトコルは、共有データの状態を管理するために、各キャッシュラインに特定のステータスを持たせます。この状態遷移を定めることで、コヒーレンシを実現します。
1. ライトインバリデート方式(Write-Invalidate)
最も一般的に使用される方式です。
- 書き込み時: あるCPUがキャッシュラインの内容を書き換えようとするとき、まず共有バスを通じて他のすべてのCPUに対して「このアドレスのキャッシュを無効化(Invalidate)せよ」という信号をブロードキャストします。
- 結果: 他のCPUは、自身のキャッシュ内に該当データがあれば、そのキャッシュラインの状態を「無効(Invalid)」に設定します。
- 利点: ネットワーク(バス)上に転送されるデータ量が少なく、書き込み処理が比較的速いです。読み込み時には、無効化されたキャッシュラインはメインメモリから最新のデータを読み込み直します。
2. ライトアップデート方式(Write-Update)
この方式では、書き込み時に古いキャッシュを無効化する代わりに、最新のデータをすべてのプロセッサにブロードキャストしてキャッシュを更新します。
- 書き込み時: あるCPUがキャッシュラインの内容を書き換えると、変更された新しいデータを共有バスを通じて他の全てのCPUにブロードキャストします。
- 結果: 他のCPUは、自身のキャッシュ内の該当データを最新の値に更新(Update)します。
- 欠点: バス上に大量のデータ(更新されたデータ)を転送するため、バスの帯域幅を多く消費します。
3. MSIプロトコル
スヌーピングプロトコルで一般的に用いられる基本的な状態管理モデルの一つで、各キャッシュラインの状態を以下の三つで表現します。
- Modified(M、変更済): データがメインメモリと異なる(書き換えられた)最新の状態であり、このキャッシュラインを持つプロセッサは一つだけである。
- Shared(S、共有): データがメインメモリと同じであり、複数のプロセッサ間で読み込み用に共有されている状態。
- Invalid(I、無効): データが古く、使用できない状態。
他のより複雑で効率的なプロトコル(例:MESI, MOESI)は、このMSIプロトコルにさらに状態を追加することで、コヒーレンシ管理を最適化しています。
スヌーピングプロトコルは、キャッシュコヒーレンシ管理において最もシンプルで実装しやすい手法の一つですが、バスを共有するため、プロセッサの数が増えるとバスの競合(バスへのアクセス待ち)が激しくなり、スケーラビリティに限界があるという特性を持ちます。
関連用語
お問い合わせ
システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。
APPSWINGBYの
ソリューション
APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。
システム開発
既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。
iOS/Androidアプリ開発
既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。
リファクタリング
他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。

ご相談・お問い合わせはこちら
APPSWINGBYのミッションは、アプリでビジネスを加速し、
お客様とともにビジネスの成功と未来を形作ること。
私達は、ITテクノロジーを活用し、様々なサービスを提供することで、
より良い社会創りに貢献していきます。
T関する疑問等、小さなことでも遠慮なくお問合せください。3営業日以内にご返答致します。

ご相談・お問合せはこちら
APPSWINGBYのミッションは、アプリでビジネスを加速し、お客様とともにビジネスの成功と未来を形作ること。
私達は、ITテクノロジーを活用し、様々なサービスを提供することで、より良い社会創りに貢献していきます。
IT関する疑問等、小さなことでも遠慮なくお問合せください。3営業日以内にご返答させて頂きます。