【问题标题】:what's L3$ role part in MESI protocalMESI 协议中的 L3$ 角色是什么
【发布时间】:2019-06-14 09:17:42
【问题描述】:

我想在 intel Broadwell 了解 MESI 的更多细节。

假设一个 cpu socket 有 6 个核心 core 0 到 core 5 , 他们每个人都有自己的 L1$ 和 L2$ 并共享 L3$ , 共享内存中有一个 var X , x 位于缓存行中 称为 XCacheL ,以下是我的问题的详细信息:

T1 : 核心 0 和核心 4 和核心 5 具有 x = 100 和 XCacheL 是S共享状态,因为 3 核具有 XCacheL 的副本。

T2 : 核心 0 需要修改 x ,所以核心 0 广播无效信号,核心 4 和核心 5 接收信号 ,使他们的 XCacheL 副本无效,Core 0 将 x 修改为 200 并且 XCacheL 状态现在是M修改了。

T3:核心 4 需要读取 x,但其 XCacheL 副本在 T2 中无效,因此会触发读取未命中,将发生以下情况:

● Processor makes bus request to memory
● Snooping cache puts copy value on the bus
● Memory access is abandoned
● Local processor caches value
● Local copy tagged S
● Source (M) value copied back to memory
● Source value M -> S

所以在 T3 之后,XCacheL 是 core 0 和 core 4 状态:Shared 和 Invalidated in core 5 ,还有 L3$ 和主内存有最新的有效 XCacheL 。

T4 :核心 5 需要读取 x ,因为它的 XCacheL 副本在 T2 中Invalidated,但是这个monent XCacheL 具有 L3$ 中的正确副本,核心 5 是否需要像核心 4 那样触发读取未命中?!

我的猜测是:不需要,因为 L3$ 具有有效的 XCacheL, 所以核心 5 可以达到 L3$ 并在核心 5 中从 L3$ 到 L1$ 获得正确的 XCacheL,因此核心 5 不会触发读取未命中。

【问题讨论】:

  • 在 L3 包含在内的地方,从那里读取共享行可能更快。如果不是,它们是从其他缓存转发的。这就是MESIF存在的原因。 uncore 可能只是在 QPI/UPI 链路中广播请求,而 L3、iMC 或另一个核心归位代理会响应它。这就是您所说的读取未命中(对不起,我缺乏术语)的意思,而不是核心仍然会触发它。实际上,你总是需要从内核外部触发一些东西来读取,即使是从 L1 读取。
  • 读取时从 Modified 直接转换为 Shared 并非在所有处理器上都完成。有时最好使无效,因为读取很快就会变成写入,并且您只需要该行。见 - software.intel.com/en-us/forums/…

标签: caching x86 cpu-architecture cpu-cache mesi


【解决方案1】:

你是对的,在你的 T4 步骤中,核心 #5 的负载将在 L3 中达到,因此不会发生内存访问。核心 #5 获得该行的另一个副本,处于共享状态。


对于像 Broadwell 这样所有内核共享对片上 DRAM 控制器的访问权限的 CPU,您的步骤顺序是零意义的。

环形总线连接核心(每个核心都有一片 L3 缓存)和系统代理(PCIe 链接和与其他核心的连接)和归属代理(内存控制器)。请参阅https://en.wikichip.org/wiki/intel/microarchitectures/broadwell_(client)#Die_Stats 了解显示环形总线的框图。

单个内核不直接驱动“内存总线”,甚至不驱动 2 或 4 条 DRAM 总线之一。内存控制器仲裁对 DRAM 的访问,并有一些缓冲来重新排序/组合访问。 (所有访问内存的都经过它,包括 DMA,所以它可以做任何它喜欢做的事情,只要它给出以某种合理的顺序发生的加载/存储的外观。)

加载请求在 L3 缓存未命中之前不会发送到系统代理。参见https://superuser.com/questions/1226197/x86-address-space-controller/1226198#1226198 以了解四核桌面(更简单,只是将内存控制器连接到系统代理,使其与 CPU 集成内存控制器之前的北桥完全一样。)


由于 Broadwell 使用包含 L3 缓存,因此 L3 标签可以告诉它哪个(如果有)核心具有修改或独占副本,即使 L3 本身中的行不可共享。 (即一行的数据在 L3 中可能是无效的,但标签仍在跟踪哪个核心有私有副本)。见Which cache mapping technique is used in intel core i7 processor?

这让 L3 标签充当窥探过滤器以减少广播。

【讨论】:

    【解决方案2】:

    您似乎在谈论 Early Snoop 算法,其中 L3 切片的缓存代理负责发送窥探。所以我会按照那个算法来回答这个问题。

    所有 Broadwell 处理器都使用包容性 L3。所以是的,核心 5 将在其私有 L1 和 L2 缓存中丢失,并且读取请求被发送到请求行映射到的 L3 切片的缓存代理。缓存代理确定它有线路并且它处于 S 状态。由于是读请求,所以缓存代理会将缓存行发送到核心 5。行的状态不会改变,也不会发送任何 snoops。

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 2014-11-24
      • 2015-01-23
      • 2021-06-18
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多