snooping 协议的基本想法:
所有的 coherence 控制器观测到的 coherence 请求的顺序是相同的
各 coherence 控制器对某个 block 观测到的请求顺序不一致可能导致:
- 可能违反 SWMR 不变性的要求
- 可能导致死锁(没有控制器认为自己是 owner ,因此 coherence 请求不会收到响应)
通过获取按序达到的给定 block 的所有请求, snooping 系统可以使能分布式 coherence 控制器来正确更新有限状态机
传统 snooping 系统
- 广播请求到所有的 coherence 控制器
- coherence 请求通过有序广播网络传播,如总线
- 互联网络必须串行化请求以实现 total order
- 总线可以通过仲裁逻辑保证总线上只有一个请求
- 发出请求后控制器需要观察其他控制器接受到的请求来判断所发送的请求在 total order 中的位置
- 针对所有的 blocks 创建一个 total order
- coherence 本身只要求每个 block 请求的顺序
- 更容易实现 SC / TSO 等要求 total order 的 memory consistency models
snooping 响应与 snooping 请求的要求不同:
- 响应可以通过单独的互联网络传播,不需要支持广播和排序的要求
- 响应数据包中包含数据,比请求数据包更长,需要更简单和低成本的网络
一次 coherence transaction 包含:一次广播请求和一次单播响应。二者之间的时间间隔影响协议的实现,但不影响 tranaction 的串行化。