如果我可以从一个例子开始。
假设我们有一个4个套接字的系统,每个套接字有4个内核,每个套接字有2GB内存 ccNUMA(缓存一致的非统一内存访问)类型的内存。
假设运行的4个进程在每个套接字上,并且所有进程都在P2的RAM中分配了一些共享内存区域,表示为SHM。这意味着该区域的任何加载/存储都会导致查找P2的目录,对吗?如果是这样,那么...当查找发生时,这是否等同于在延迟方面访问RAM?这个目录在哪里物理存在? (见下文)
有一个更具体的例子: 假设P2在SHM上执行LOAD,并且该数据带有标签'(O)wner'进入P2的L3缓存。此外,说P4在同一个SHM上执行LOAD。这将导致P4查找P2的目录,并且由于数据被标记为P2拥有,我的问题是:
P4从P2的RAM中获取SHM还是始终从P2的L3缓存中获取数据?
如果它始终从L3缓存中获取数据,那么直接从P2的RAM获取数据会不会更快?既然已经要在P2的目录中查找了吗?我的理解是该目录实际上位于RAM的顶部。
很抱歉,如果我非常误解这里发生的事情,但我希望有人可以帮助澄清这一点。
此外,是否有关于这样的目录查找速度有多快的数据?在数据检索方面是否有关于此类查找的平均延迟的文档? L3读取命中,读取未命中,目录查找的周期数是多少?等
答案 0 :(得分:2)
这取决于Opteron处理器是否实现了HT Assist机制。
如果没有,则没有目录。在您的示例中,当P4发出加载时,内存请求将到达P2内存控制器。 P2将使用缓存行回复,并且还将探测消息发送到其他两个核心。最后,这两个其他两个内核将回复P4并发出一条ACK,说明他们没有缓存行的副本。
如果启用了HT Assist(通常用于6核和更高版本的套接字),则每个L3缓存都包含一个监听过滤器(目录),用于记下哪些核心保持一条线路。因此,在您的示例中,P4不会将探测消息发送到其他两个核心,因为它查找HT Assist目录以发现没有其他人拥有该行的副本(这是一个简化,因为状态为line将是Exclusive而不是Owned,并且不需要进行目录查找。)