异构多核Cache一致性问题和解决方法(一)

最近看了不少说明Cache一致性问题的解决方法的文章,讲是讲到了,但是讲得都不是很深入,没有结合目前主流大厂的解决方案说明。笔者最近整理了当前(2021年)主流大厂的Cache Coherence解决方案,觉得有必要写个专栏记录下,最终给出异构多核(CPU+MCU/DSP/GPU)等异构多核的Cache一致性处理方法。

首先申明,本文章默认你已经了解Cache一致性的原理和概念,也大概知道多核的Cache一致性的解决方法。如果还不知道的,请阅读下面的链接,网上很多文章抄来抄去,写得好的只要看这几篇就够了。

Cache的基本原理 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/102293437?utm_source=qq多核Cache一致性 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/115114220cache之多核一致性(一) - 总线上没有秘密 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/94811032深挖NUMA - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/33621500一、Intel Cache一致性解决方法

异构多核Cache一致性问题和解决方法(一)_第1张图片

上图是Intel 14nm Haswll微处理器架构,左边图中集成了12个核,右边图中集成了18个核。其采用环形互联结构将所有L2和L3 Cache连接了起来,环形结构是双向的,整个芯片内部由两个环形互联结构构成,每个环形互联结构组成一个芯片簇。两个环形互联结构之间通过两个双向Queue队列通信。默认配置情况下,所有core共享L3资源,也可以通过BIOS刷新L3资源配置。

异构多核Cache一致性问题和解决方法(一)_第2张图片具体结构和参数如上图所示,Intel维护Cache一致性使用的是MESIF协议,在MESI的基础上又增加了一个forward,允许有shared cache line的CPU进行cache和cache之间的数据传输。forward指定shared中的一个cache line响应数据请求,cache line有多个shared,但是有一个forward。MESIF主要通过snoop协议完成,但也添加了directory协议的支持,用于调高带宽和效率。

Intel使用cache line的2bits ECC校验位来存储directory协议的状态编码,有三种编码状态:remote-invalidsnoop-allsharedremote-invalid指示其他NUMA节点不使用cache机制;snoop-all指示其他节点存在潜在的modified copy;shared指示多个共享copy的数据。这些状态指示可以有效减少监听信息的发送。

异构多核Cache一致性问题和解决方法(一)_第3张图片

Intel实现MESIF协议的硬件为CA(Caching Agents),每个内核中都有一个与之对应的CA,同时在每个Memory Controller中实现一个HA(Home Agents)。如果内核需要的读数据不在本地L1和L2中,内核会首先发送请求给CA,CA会在本地L3或者其他L1/L2 Cache中寻找数据。如果发生Cache Miss,CA会将内核读请求发个HA,HA在memory中找到对应地址数据并返回。

Intel使用两种监听模式:source snoopinghome snooping

source snooping模式,监听信息由CA发送。如果L3 Miss发生,CA会广播监听请求到其他CA和HA。如果其他CA的状态为modifiedexclusive或forward,那么会将CA对应的cache line数据返回。HA会搜集所有监听响应,解析冲突,必要时提供memory中的数据。该模式有更低的延时更高的效率,但它的带宽消耗非常高。

home snooping模式,监听信息由HA发送。该模式下,CA接收到内核请求后不会广播寻找,而是将所有请求全部转给HA,HA再发送监听信息给合适的CA(拥有相同cache line的CA)。由于HA存有directory,因此HA可以精准请求CA得到最新的数据。该模式延时要高一点,但带宽会有效降低,同时Cache性能提升明显。

异构多核Cache一致性问题和解决方法(一)_第4张图片异构多核Cache一致性问题和解决方法(一)_第5张图片

Intel对自己的结构进行了测试,结果如上图所示,访问L1/L2/L3的时间分别是1.6ns,4.8ns和21.2ns(0.4ns per cycle)。访问其他L1/L2/L3的延时根据模式和cache line状态不同,最多分别是113ns. 109ns, 104ns,访问memory最多146ns。

如果需要更多测试结果,可留言邮箱,看到必回复。

你可能感兴趣的:(Cache一致性,intel,cpu,分布式一致性协议)