从我的理解:基于目录的系统更加以服务器为中心的设计 和 窥探更加以同行为中心。
这就是为什么基于目录的任何读取错误都需要较少的消息,因为它可以在检查目录后到达拥有有效数据的处理器。
Snooping只询问每个其他处理器是n-1条消息。
因此,基于目录的系统可以扩展更多。
现在我的问题是:如果只有一个中心指示,那么当读取未命中时有太多处理器在询问时它是否会面临瓶颈?
答案 0 :(得分:1)
如果您要问的情况是:如果所有(或N-1)处理器同时具有读取未命中(这通常会生成读取共享消息)会发生什么情况,那么是的,所有N-1个处理器将会发送消息到目录,所有都需要响应。当每个处理器在同一个螺旋锁上等待时,这种情况实际上只会经常发生。解决方案不是修复一致性协议(尽管有很多选择),而是使用更好的算法。通常人们使用基于队列的锁定算法(例如,着名的Mellor-Crummey and Scott锁定算法)。
旋转锁同时也是每个人都在问“我们还在吗?”一遍又一遍。使用基于队列的锁,每个人都需要一个数字并排队。然后,当资源变得可用时,下一个在线的人就可以直接通知私有变量。
只是为了澄清一些事情,虽然(通常)逻辑上有一个中心目录,但并不是所有物理上都存在于一个地方。特定内存位置的目录条目通常位于处理器上,该处理器具有支持该内存的物理DRAM。