4

如果我可以从一个例子开始。

假设我们有一个 4 个插槽的系统,其中每个插槽有 4 个内核,每个插槽有 2GB RAM ccNUMA(高速缓存相干非统一内存访问)类型的内存。

假设在每个套接字上运行的 4 个进程都在 P2 的 RAM 中分配了一些共享内存区域,表示为 SHM。这意味着对该区域的任何加载/存储都会导致查找 P2 的目录,对吗?如果是这样,那么......当查找发生时,就延迟而言,这是否等同于访问 RAM?这个目录在物理上驻留在哪里?(见下文)

举一个更具体的例子:假设 P2 在 SHM 上执行 LOAD,并且该数据被带入 P2 的 L3 高速缓存,并带有标记“(O)wner”。此外,假设 P4 在同一个 SHM 上执行 LOAD。这将导致 P4 对 P2 的目录进行查找,并且由于数据被标记为由 P2 拥有,我的问题是:

P4 是从 P2 的 RAM 中获取 SHM,还是总是从 P2 的 L3 缓存中获取数据?

如果它总是从 L3 缓存中获取数据,那么直接从 P2 的 RAM 中获取数据不是更快吗?既然它已经必须在 P2 的目录中进行查找?我的理解是,该目录实际上位于 RAM 之上。

抱歉,如果我严重误解了这里发生的事情,但我希望有人能帮助澄清这一点。

此外,是否有任何关于此类目录查找速度的数据?在数据检索方面,是否有关于此类查找的平均延迟的文档?L3 读命中、读未命中、目录查找有多少个周期?等等

4

1 回答 1

2

这取决于 Opteron 处理器是否实现了 HT Assist 机制。

如果没有,则没有目录。在您的示例中,当 P4 发出负载时,内存请求将到达 P2 内存控制器。P2 将使用缓存线进行回复,并且还将向其他两个内核发送探测消息。最后,这两个核心将通过 ACK 回复 P4,表示它们没有缓存行的副本。

如果启用了 HT Assist(通常用于 6 核和更高的套接字),则每个 L3 高速缓存都包含一个窥探过滤器(目录),用于记下哪些内核保持一条线。因此,在您的示例中,P4 不会向其他两个核心发送探测消息,因为它会查找 HT Assist 目录以发现没有其他人拥有该行的副本(这是一种简化,因为行将是独占而不是拥有,并且不需要目录查找)。

于 2014-12-06T13:33:55.420 回答