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