首页 > 解决方案 > DC PMM(内存模式)缓存​​一致性如何表现?

问题描述

当前设置:
当今大多数最新的英特尔架构都具有非包容性 L3 缓存,其中每个切片 (+CHA) 都包含一个“窥探过滤器”,其中包含 L3 目录在包容性情况下将提供的位置信息(这种设计选择可能会避免一致性消息占用超过网状带宽)。大多数还默认启用“内存目录”,可用于过滤远程监听或以其他方式更改一致性事务的本地和远程部分的时间属性。当访问属于不同套接字的内存位置时,RFO 直接发送到 QPI/UPI 环,而不是 L3+CHA。内核复制 L3 维护的源地址解码器 (SAD) 寄存器,这些寄存器确定哪个 NUMA 节点负责物理地址。一旦 RFO 到达负责的家乡代理,它决定是否必须将窥探发送到其他套接字/内核并响应调用者(可以并行执行此操作)。如果带宽可用,还有 OSB 可以让 L3 进行推测性窥探。

“内存目录”是与 DRAM 中的高速缓存行数据一起定位的一个或多个位,指示另一个相干域是否可能具有高速缓存行的修改副本。
这些位不会针对来自本地核心/缓存的负载进行更新,因为 L3/CHA 会跟踪它。在 M 状态高速缓存行回写失效后,内存目录位被清除,因为只有一个 L3/CHA 可以使高速缓存行处于 M 状态。

英特尔 DC PMEM、
From、英特尔® 64 和 IA-32 架构优化参考手册第 2.1.31 节
(我想是在内存模式下,尽管他们没有在该节中指定)

在具有多个处理器的系统上,目录用于缓存一致性。该目录实现为分布式内存目录,每个缓存行的一致性状态存储在内存中行本身的元数据中。
如果不同处理器中的内核重复读取 Intel Optane DC Persistent Memory Module 中的同一组行,则每次都会对 Intel Optane DC Persistent Memory Module 进行多次写入,记录一致性状态的变化。

这表明 PMM 使用内存目录。

这些写入被称为“目录写入”并且在本质上往往是随机的。因此,其中一些写入会降低应用程序可用的有效 Intel Optane DC Persistent Memory Module 带宽。

在类似的设置中,普通 DRAM 也会遭受随机目录写入的影响吗?还是在具有 48GB/s 写入 b/w 而 PMM 只有 ~2.3GB/s (1)
的 DRAM 中无关紧要?

当 DRAM 内存目录存在时,为什么 PMM 需要使用目录一致性协议?

Optane DC Persistent Memory Module 可能被不同的线程访问,如果观察到这种模式,需要考虑的一个选项是通过禁用目录系统范围。

对远程 PMM 的 RDMA 请求是否也需要通过远程 DRAM?

标签: x86intelcpu-architecturecpu-cachepersistent-memory

解决方案


当今最新的英特尔架构具有非包含的 L3 缓存,其中每个切片 (+CHA)

自 Skylake 以来,采用服务器非核心设计的处理器在网状互连上具有非包容性 L3。Tiger Lake (TGL) 是第一个具有客户端非核心设计的同构(仅限大核心)微架构,其中包括非包容性 L3。请参阅:在 Intel Core i3/i7 的情况下,数据从缓存集中逐出后的去向。但是 TGL 中没有使用 CHA 设计。

包括一个“窥探过滤器”,其中包含 L3 目录如果它是包容性的,它将提供的位置信息

窥探过滤器是一个目录。这两个术语都指用于保存一致性信息的相同硬件结构。

当访问属于不同套接字的内存位置时,RFO 直接发送到 QPI/UPI 环

片上环形互连不符合 QPI 或 UPI 规范。这些互连实际上彼此之间存在显着差异。在片上互连和在消息格式之间转换的外部互连之间有专用的接口单元。英特尔使用 QPI/UPI 进行芯片之间的链接。

当访问属于不同套接字的内存位置时,RFO 直接发送到 QPI/UPI 环,而不是 L3+CHA。

你的意思是从核心访问?从核心到任何地址的所有类型的请求都通过一个缓存代理,它可以是与该核心或同一 NUMA 域中的另一个 CA 并置的代理。当 CA 接收到请求时,它会将请求发送到 SAD(位于 CA 内部)以确定哪个单元应该为请求提供服务。同时,根据请求的类型,它也会被发送到相关的 L3 切片(如果存在并启用)进行查找。例如,如果请求是读取处于 E/F/S 状态的数据缓存行 ( RdData),则并行执行 L3 查找操作。如果是从遗留 I/O 空间读取,则不执行查找。如果执行查找并且查找的结果是未命中,则 SAD 的输出用于确定将请求发送到何处。

一旦 RFO 到达负责的本地代理,它会决定是否必须将窥探发送到其他套接字/内核并响应调用者(可以并行执行此操作)。

本地代理(或 CHA 的本地代理功能)不会在本地发送窥探。在 L3 未命中后,假设 Home 侦听模式,会发生以下情况:

  • 该请求被发送到拥有该线路的本地代理,该代理最终将为该请求提供服务。
  • 如果线路位于与请求者所在的不同的 NUMA 域中,则向拥有该线路的 CA 发送探听请求。
  • 一个 snoop 请求被发送到与请求者相同的 NUMA 域中的每个 IIO 单元(因为每个 IIO 单元中都有一个缓存)。
  • 向主 NUMA 域中的每个 IIO 单元发送一个探听请求。

HA 然后检查目录缓存(如果支持并启用),如果丢失,它会检查内存中的目录(如果支持并启用),并根据结果向其他 NUMA 域发送窥探。

HA 收集所有响应,然后最终发回请求的行并更新目录。

我不知道您所说的“可以并行执行”是什么意思。

“内存目录”是与 DRAM 中的高速缓存行数据一起定位的一个或多个位,指示另一个相干域是否可能具有高速缓存行的修改副本。

这不仅仅是跟踪修改后的副本,而是跟踪任何状态下行的存在。

请注意,我们在这里讨论的所有缓存代理都在同一个一致性域中。这只是一个连贯域。我认为您的意思是另一个 NUMA 节点。

在类似的设置中,普通 DRAM 也会遭受随机目录写入的影响吗?

是的。如果碰巧有太多对目录的访问并且不支持或禁用目录缓存,即使对 DRAM 也会产生重大影响。但在 3D XPoint 中的影响要大得多,因为写入具有低得多的行缓冲区局部性(即使在一般情况下,不仅仅是目录写入),而且 3D XPoint 的预充电时间远高于 DRAM。

当 DRAM 内存目录存在时,为什么 PMM 需要使用目录一致性协议?

无论是在 DRAM 还是 3D XPoint 中,每条线都会存储相干状态。只需要一个事务来读取状态和行,而不是潜在的两个事务将所有目录都存储在 DRAM 中。我不确定哪种设计在性能方面更好以及多少,但是用每一行存储状态肯定更简单。

对远程 PMM 的 RDMA 请求是否也需要通过远程 DRAM?

我不明白这个问题。如果请求的地址映射到 PMM,为什么您认为它必须通过 DRAM?


推荐阅读