目录一致性与片上互连
更新时间:2026-10-01。已有 MESI 等 snoopy 协议,本文讲核数一多为什么要换成目录。
本文要回答的问题
- snoopy 广播的可扩展性问题是什么?
- 目录如何知道该通知哪些核?
一、广播瓶颈
snoopy 假设每次一致性事务都广播到总线上所有核并由其各自检查,核数一大,带宽和能耗随核数爆炸,总线也难扩展。
二、目录的点对点
在 home node 维护目录项:记录每行的状态、唯一拥有者或共享者集合。写操作只向相关的共享者/拥有者发无效化,不打扰无关核,流量近似随实际共享者增长。代价是目录存储(每行额外位)和额外间接延迟。
三、常见坑
- 在大规模 mesh 上仍用纯广播。
- 忽略目录存储与 home 热点。
- 目录共享者表示过粗造成额外探测。
小结
目录用每行状态把一致性变成点对点、随共享者而非总核数扩展,代价是目录存储和一跳延迟。下一篇 缓存与持久内存/存储层级。
总结
snoopy 协议把每次一致性事务广播给所有核、靠各自嗅探应答,核数一多带宽与能耗随之爆炸,因此大规模多核必须改用目录协议:home node 为每行维护状态和拥有者/共享者集合,写操作只向真正相关的核发起点对点无效化,流量随实际共享者而非总核数增长。可扩展性不是免费的——目录用每行额外存储和多一跳间接延迟,换掉了广播的平方级代价,而 home 热点与过粗的共享者表示则是它自己的新瓶颈。