如果我可以从一个例子开始。
假设我们有一个由4个插槽组成的系统,其中每个插槽有4个内核,并且每个插槽都有2 2GB内存ccNUMA (高速缓存一致性非一致内存访问)类型的内存。
假设运行的4个进程都在每个套接字上,并且都在P2的RAM中分配了一些共享内存区,表示为SHM。这意味着对该区域的任何加载/存储都会引起对P2目录的查找,对吗?如果是这样,那么.当这种查找发生时,就延迟而言,这等同于访问RAM吗?这个目录的物理位置是什么?(见下文)
举一个更具体的例子:假设P2在SHM上执行加载,数据被带到P2的L3缓存中,标记为'(O)wner‘。此外,假设P4在同一SHM上执行加载。这将导致P4查找P2的目录,由于数据被标记为P2所有,因此我的问题是:
P4是从P2的内存中获取SHM,还是总是从P2的L3缓存中获取数据?
如果它总是从L3缓存中获取数据,那么直接从P2的内存中获取数据不是更快吗?因为它已经在P2目录中进行了查找?我的理解是,目录实际上位于RAM的顶部。
如果我严重误解了这里发生的事情,我很抱歉,但我希望有人能帮助澄清这一点。
另外,有没有关于这样的目录查找有多快的数据?在数据检索方面,是否有关于此类查找的平均延迟的文档?L3读取命中、读取未命中、目录查找的周期是多少?等。
发布于 2014-12-06 21:33:55
这取决于Opteron处理器是否实现了HT辅助机制。
如果没有,那么就没有目录。在您的示例中,当P4发出加载时,内存请求将到达P2内存控制器。P2将使用缓存线进行应答,还将向其他两个核心发送探测消息。最后,这另外两个核心将用确认应答P4,表示它们没有高速缓存线的副本。
如果启用了HT辅助(通常用于6核和更高的插槽),则每个L3缓存都包含一个监听过滤器(目录),用于记录哪些内核保持一行。因此,在您的示例中,P4不会向其他两个核心发送探测消息,因为它会查找HT辅助目录,以发现没有其他人拥有该行的副本(这是一种简化,因为该行的状态将是独占的,而不是拥有的,并且不需要查找目录)。
https://stackoverflow.com/questions/6845267
复制相似问题