监听式缓存的缺陷

  • 可拓展性差
  • 原因:可拓展的多处理器使用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也含有该缓存行)

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缓存行数

ShengYg

Step after step the ladder is ascended.


Tags •