January
26th,
2019
监听式缓存的缺陷
- 可拓展性差
- 原因:可拓展的多处理器使用NUMA(non-uniform memory access)共享内存,而监听式缓存依赖于缓存控制器之间的信息传播,因此保证较远的处理器有缓存一致性开销大。
- 一种解决方案:层次式监听缓存(hierarchical snooping)
- 容易实现
- 根节点成为性能瓶颈;相比于直连,有更大的延迟;不适合其他网络拓扑结构。
目录式缓存
基本目录结构
- 每个缓存行对应一个目录条目(directory entry)
- 每个目录条目包含:dirty-bit,P-presence-bits(处理器P是否含有该缓存行)

分布式目录
- home node:包含该缓存行的节点
- requesting node:请求该缓存行的节点

例子
1. 读丢失,dirty-bit=False
- requesting node将读丢失信号发送到home node
- home目录检查缓存行entry
- 直接读取,设置presence_i为true(表示处理器i也含有该缓存行)
- 直接读取,设置presence_i为true(表示处理器i也含有该缓存行)
2. 读丢失,dirty-bit=True
- dirty-bit=True,则最新版数据一定在其他处理器的缓存处
- home node告诉最新数据在哪个节点(owner node)
- requesting node从owner node请求数据
- owner node响应,改变缓存状态为shared(只读)
- owner node响应home node,home清理dirty-bit,更新presence bit,更新内存

3. 写丢失

存储开销
存储空间=节点数*缓存行数,存储开销与节点数成正比
方案一:层次化
- 节点间采用目录式
- 节点内采用监听式
方案二:限制目录条目长度
- 缓存行只在有限的处理器缓存中,因此目录条目只需包含有限个数。如1024处理器系统,目录条目只需包含100位。
- 目录条目溢出
- 使用broadcast(如果硬件支持)
- 禁止超过最大值的sharers
- 总结:大多数情况下很快,少数情况下产生溢出导致额外开销,但这情况不多见
方案三:稀疏目录
- 只对在缓存中的内存建立条目,条目以链表形式连接
- 优点:低存储开销
- 缺点:写的延迟与sharers数量成正比(信号以串行形式发送,原来是并行)
core i7 cpu

directory dimension:
- p=4
- m=L3缓存行数