Bus snooping
# Bus snooping

Bus snooping (englisch ‚schnüffeln‘) bezeichnet in einem Computersystem die stetige Kontrolle der Speicher-Adressleitungen („Bus“), um eventuellen Konflikten zwischen Speicher- und Cacheinhalten vorzubeugen.

## Problem

In einem Mehrprozessorsystem besitzt jeder Prozessor einen eigenen und unabhängigen Cache. Falls ein Teilnehmer des Hostbus Daten im Hauptspeicher ändert, kann es zu Cache-Inkohärenzen kommen, da die Cache-Line nicht den modifizierten Wert des Hauptspeichers beinhaltet.

## Grundprinzip

Das Grundprinzip des Bus-Snoopings ist, dass jeder Teilnehmer des Hostbus Adressierungen eines anderen Teilnehmers auf dem Bus mitliest und seinen Cache überprüft, ob eine Cache-Line mit der entsprechenden Adresse vorhanden ist. Dazu wird der Cache-Controller um eine Snoop-Logik erweitert. In der Regel befinden sich alle Teilnehmer in diesem Snooping-Zustand, bis auf den Teilnehmer, der die Transaktion auf dem Bus ausführt.

## Snoop-Hit on a Write

Ein Teilnehmer des Hostbus, zum Beispiel ein DMA-Controller, führt eine Write-Transaktion auf dem Bus durch und legt dazu eine Adresse auf dem Bus an. Die anderen Teilnehmer, die sich im Snooping-Zustand befinden, überprüfen, ob eine ihrer Cachelines zu der angelegten Adresse vorhanden ist. Falls dies zutrifft, also ein sogenannter Hit eintritt, bezeichnet man ihn als „Snoop Write Hit“. Um eine Inkohärenz des Caches zu vermeiden, wird die Cacheline als ungültig markiert.

## Snoop-Hit on a Read

Ein Teilnehmer führt eine Read-Transaktion auf dem Hostbus durch und legt die Adresse des Speicherbereiches auf dem Bus an. Die anderen Teilnehmer befinden sich im Snooping-Zustand und lesen die angelegte Adresse mit. Falls eine Cache-Line mit der angelegten Adresse übereinstimmt, also ein Hit im Cache vorliegt, bezeichnet man ihn als Snoop Read Hit. In diesem Fall wird der Lesezugriff durch den mithörenden Teilnehmer unterbrochen und von diesem die geänderten Daten in den Arbeitsspeicher geschrieben.