Intel和AMD使用哪个高速缓存一致性协议?

问题描述 投票:10回答:2

对于我的学士论文,我必须分析错误共享在多核系统上的效果。因此,在寻找我在Wikipedia上遇到的不同的缓存一致性协议类型时,英特尔已经开发了MESIF缓存一致性协议,但是没有信息表明英特尔也使用了该协议。

查看手册Intel® 64 and IA-32 Architectures Developer's Manual: Vol. 3A,但除了MESI协议之外,我找不到关于MESIF的任何东西。所以问题是,英特尔不使用自己的缓存一致性协议。还是我在错误的文档中搜索它。

multithreading caching multicore state-machine false-sharing
2个回答
9
投票

Intel在QuickPath中使用MESIF协议(http://www.realworldtech.com/common-system-interface/5/https://en.wikipedia.org/wiki/MESIF_protocol),而AMD在HyperTransport中使用带或不带有探针过滤器的MOESI协议(https://en.wikipedia.org/wiki/MOESI_protocolhttp://www.m5sim.org/MOESI_hammer)。但是这些协议是用于芯片间通信的(AMD推土机插槽的MCM中有2个芯片)。据我所知,在两个处理器中,芯片内一致性都是在L3缓存中实现的。

可用于检查NUMA性能问题的工具为numagrind:http://dx.doi.org/10.1109/IPDPS.2011.100


0
投票

[此答案适用于具有内置L3缓存和Sandy Bridge样式环形总线(即不是Nehalem / Westmere EX的Intel处理器)的Intel CPU,它是Sandy Bridge之后直到Skylake服务器的所有服务器CPU。

[众所周知,英特尔使用MESIF,但AFAICT的核心是F状态。他们的线路将处于MESI状态。

内核将IDI数据包发送到L3缓存片。当核心请求不属于该核心的线路时,DRd数据包将由核心发送,如果其他核心中存在该DRd数据包,则以S状态接收该数据;如果其他核心中不存在该数据,则接收为E。 L3缓存切片使用该行的探听过滤器来决定是返回E状态(在其他任何内核中,但不在L3中/不在L3中)还是S状态(在L3中并且存在于另一个内核中);将降级发送给该核心E-> S)。如果行的第一个请求不属于其他内核,而不是S状态,则将其默认设置为E状态是一种优化,因为该内核无需执行RFO,这在L3缓存切片具有将降级发送到核心(与执行RFO的实际延迟相比,这只是后台的额外流量)。

[RFO数据包在不属于该线路的情况下发送,并且即使其他内核包含S状态也被请求排他,这使它们无效,因为内核将对其执行写操作。

ItoM是在S状态下拥有该行的位置,它正在准备写入该行。这导致将S状态更改为E,并使其他内核无效。

如果行不在L3高速缓存中(假定使用HS模式,则使用目录+ OSB + HitME高速缓存),那么请求高速缓存行的高速缓存代理将不会广播侦听。相反,它将请求转发到本地节点中的HA,然后将探听发送到可能拥有该行的其他缓存代理。 Haswell-EP还包括目录缓存(HitMe),以加速目录查找。但是,每个HA只有14 KiB,因此这些缓存非常小。因此,只有频繁在节点之间传输的缓存行才存储在HitMe缓存中。目录高速缓存存储8位向量,该向量指示8个节点中的哪一个具有高速缓存行的副本。当请求到达本地节点时,将检查目录缓存。如果它包含所请求行的条目,则按照目录缓存的指示发送监听。如果请求在目录高速缓存中未命中,则HA从内存中的地址获取并读取目录位,并在某些套接字中对其进行修改后相应地发送监听(HA支持一个附加的2位“目录”,该目录随每个存储DRAM ECC位中的高速缓存行。目录用于过滤对远程套接字或节点控制器的侦听;侦听成功后,它将在目录高速缓存中分配一个条目;首先侦听目录高速缓存,然后侦听目录(如果目录不可用)。然后必须广播,否则缓存一致性会被破坏,因为对L1缓存的写入应该是全局可见的。该目录编码3种状态:在任何节点中均不存在,在1个节点中进行修改,在多个节点中共享)或直接发送数据如果不需要监听且不分配条目,则从内存中获取它。

F状态仅适用于L3缓存(缓存代理),在其他缓存代理与本地节点中的本地代理之间进行多套接字侦听的情况下。在没有目录的源侦听模式下,只有一个座席具有F状态才会对广播侦听做出响应,而不是导致多个响应。在具有目录的本地侦听模式下,目录位意味着在可能的情况下无论如何仅将发送一个请求,但是当未缓存该请求并发送广播时,F状态会有所帮助。因为缓存可能会单方面丢弃(或无效)处于S或F状态的行,所以即使存在S状态的副本,也可能没有缓存具有F状态的副本。在这种情况下,来自主内存的行请求得到了满足(效率较低,但仍然正确)(因为当它们处于S状态时,没有缓存代理会响应)。

我认为'归属节点归属代理'是SAD解码的DRAM地址与之交织的归属代理(即拥有该地址的归属代理)。

© www.soinside.com 2019 - 2024. All rights reserved.