バススヌーピング
バススヌーピング(英: bus snooping, bus sniffing、またはバススヌープ、スヌープキャッシュ)は、分散共有メモリとマルチプロセッサを備えたシステムでキャッシュコヒーレンシを実現するために用いられる技術である。
システムにメインメモリが一つしかない場合でも、キャッシュメモリがプロセッサごとに一つずつ(システム全体では複数)存在し、何らかの対策を施さない限り同じメモリが複数のキャッシュにロードされ異なる値を持ってしまう可能性がある。これを防止するため、各キャッシュコントローラはバスを監視し、バス上に流れるブロードキャストの通知を受け、必要に応じて特定のキャッシュラインを無効にする。
各キャッシュラインは「更新済み」(ローカルのプロセッサが更新)、「有効」/「無効」、「共有」の状態を持つ。ローカルキャッシュの読み取りミスすると、バス上にリード要求がブロードキャストされる。あるノードでそのアドレスをキャッシュされており、かつ「更新済み」状態であるなら、そのノードでキャッシュラインの状態を「有効」に変え、情報のコピーを要求したノードに送出する。
ローカルキャッシュの書き込みミスが発生すると、他のキャッシュにあるコピーが「無効」になることが バススヌーピングにより保証される。「有効」状態のブロックへの書き込みを行う場合には、キャッシュラインの状態が「更新済み」に変更され、すべてのキャッシュコントローラに、そのラインを無効にするようブロードキャストが送られる。
スヌーピングによる方法は大規模化にうまく対応できないので、規模の大きいccNumaシステムではディレクトリベースの一貫性機構を用いる傾向にある。