考虑具有以下核心拓扑的 Intel Core 2 架构:
Socket 0: ( 0 2 4 6 )
Socket 1: ( 1 3 5 7 )
每个核心都有自己的一级缓存;L2缓存组是这样的:
( 0 2 ) ( 4 6 ) ( 1 3 ) ( 5 7 )
1. 我观察到在某些应用程序中,性能计数器 L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID 的值相当高。在这些应用程序上,#L2 数据缓存未命中率也很高。RESOURCE_STALLS_ROB_FULL 也很高,是总停顿周期的主要部分。
是否正确告诉,例如,核心 0 在 L2 中找到数据并未命中,然后其 L2 缓存的总线控制器向其他 L2 的总线控制器广播一些消息以查看数据是否在其 L2 中。但是,由于总线带宽的限制,总线上的竞争非常激烈,不知怎么的,其他人的总线队列一直都满了,那么core 0又要多次重播look-up消息?如果这是真的那么这就是为什么 L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID 如此之高?还是我在翻译?
2. 假设是否正确,撇开冷缺失的影响,如果我执行一个在核心上有 100 个 L2 数据缓存未命中的循环,导致 200 个 L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID,然后执行更长的循环(例如迭代次数加倍)有 200 次 L2 数据缓存未命中将导致 400 L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID?如果不是,那么导致意外非线性的原因是什么?