Введение

Автобусный шпионаж или автобусный сниффинг — это схема, при которой контроллер когерентности (снупер) в кэше (кэш с функцией сниффинга) отслеживает транзакции шины, и его целью является поддержание когерентности кэша в распределенных системах с общей памятью. Эта схема была предложена Равишанкаром и Гудманом в 1983 году под названием "запись один раз" для обеспечения когерентности кэша. Кэш, содержащий контроллер когерентности (снупер), называется кэшем с функцией сниффинга.

Как это работает

Когда определенные данные совместно используются несколькими кэшами, и процессор изменяет значение этих данных, это изменение должно быть распространено на все остальные кэши, имеющие копию данных. Такое распространение изменений предотвращает нарушение когерентности кэша. Оповещение об изменении данных может осуществляться посредством прослушивания шины. Все прослушиватели отслеживают каждую транзакцию в шине. Если в шине появляется транзакция, изменяющая общий блок кэша, все прослушиватели проверяют, есть ли у них в кэшах та же копия этого блока. Если кэш содержит копию общего блока, соответствующий прослушиватель выполняет действие для обеспечения когерентности кэша. Это действие может заключаться в сбросе или инвалидации блока кэша, а также в изменении состояния блока кэша в соответствии с используемым протоколом когерентности кэша.

Запись-недействительность

Когда процессор записывает данные в общий блок кэша, все совместно используемые копии в других кэшах становятся недействительными посредством прослушивания шины. Этот метод гарантирует, что только одна копия данных может быть эксклюзивно прочитана и записана процессором. Все остальные копии в других кэшах аннулируются. Это наиболее распространенный протокол прослушивания шины. Протоколы MSI, MESI, MOSI, MOESI и MESIF относятся к этой категории.

Обновление записи

Когда процессор записывает данные в общий блок кэша, все остальные совместно используемые копии в других кэшах обновляются посредством прослушивания шины. Этот метод транслирует данные записи во все кэши, подключенные к шине, что приводит к большему трафику шины, чем в протоколе отмены записи (write invalidate). Именно поэтому этот метод используется редко. Протоколы Dragon и Firefly относятся к этой категории.