X86 在多节点设置中是否向所有核心发送窥探请求?

X86 在多节点设置中是否向所有核心发送窥探请求?,x86,intel,cpu-architecture,cpu-cache,X86,Intel,Cpu Architecture,Cpu Cache,我知道intel在QPI中使用家庭监听一致性协议,在UPI中可能使用更复杂/动态(特定于工作负载)的协议。但是,如果缓存线一开始就处于I(无效)状态,而其他核的L1/L2中没有缓存线,那么一旦从归属代理请求缓存线,加载请求是否也会广播到其他本地核?我相信是的。但是,负载请求是否也会广播到不同节点上的核心 另一种可能的解释是:如果在L2中找不到,则会向L3内存控制器请求它。LLC控制器将知道哪个DIMM/core具有请求的物理数据(使用目录),并通过QPI/UPI将请求路由到相应的core。接下来

我知道intel在QPI中使用家庭监听一致性协议,在UPI中可能使用更复杂/动态(特定于工作负载)的协议。但是,如果缓存线一开始就处于I(无效)状态,而其他核的L1/L2中没有缓存线,那么一旦从归属代理请求缓存线,加载请求是否也会广播到其他本地核?我相信是的。但是,负载请求是否也会广播到不同节点上的核心

另一种可能的解释是:如果在L2中找不到,则会向L3内存控制器请求它。LLC控制器将知道哪个DIMM/core具有请求的物理数据(使用目录),并通过QPI/UPI将请求路由到相应的core。接下来,该请求仅由目标节点的L3控制器在核心之间广播。最后,L2控制器将被告知节点间通信,这样L2就不会广播到其他本地核心。这意味着请求永远不会广播到节点之外

我知道这类信息可能不会公开提供,但任何想法都会受到欢迎

但是如果缓存线以I(无效)状态开始,而没有 一旦缓存线被删除,其他核中的大多数都会将其放在L1/L2中 从归属代理请求的加载请求也将广播到 其他本地核心

这是一个实现细节,不是QPI规范的一部分。在以Nehalem开始的所有Intel处理器上,无论三级缓存是包含的还是非包含的,片上互连上的每个缓存代理都有一个包含目录,用于跟踪其拥有的缓存线(即,其物理地址映射到该缓存线)。因此,除非目录指示需要对所有本地内核进行监听,否则不会将监听广播到所有本地内核。在三级缓存中发生未命中时,请求将发送到目标缓存线的归属代理

加载请求是否会广播到不同节点上的核心 还有

这也是一个实现细节。这取决于相干模式。如果处理器支持内存级一致性目录,并且该目录已启用,则无需对每个请求进行广播。一些处理器支持机会广播(OSB)。如果启用OSB,则如果bandwdith可用,则归属代理可能会推测性地广播窥探。这与目录查找操作并行完成。如果目录查找结果表明不需要窥探其他NUMA节点,则归属代理在不等待窥探响应的情况下发回请求的数据,从而减少延迟