菜鸟笔记
提升您的技术认知

CPU多级缓存-多核并发缓存架构解析

CPU多级缓存

主内存(RAM):也就是所谓的内存条,一般当数据写入电脑磁盘的时候需要先写入主内存,然后再写入磁盘。

系统主线:连接系统cpu和主内存的系统主线,就比如台式电脑连接主板上连接cpu和内存条的主线。

如下图所示最简单的高速缓存的配置,数据的读取和存储都经过高速缓存,CPU核心与高速缓存有一条特殊的快速通道;主存和高速缓存都连在系统总线上,这条总线还用于其他组件的通信。

高速缓存出现不久,系统变得越来越复杂,高速缓存与主存之间的速度差异被拉大,直到加入了另一级缓存,新加入的这级缓存比第一缓存更大,而且更慢,而且经济上不合适,所以有了二级缓存,甚至是三级缓存。

一、为什么需要CPU多级缓存

再计算机最开始的时候,cpu直接于主内存交换数据,不知道读者对摩尔定律有没有印象:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍,由于cpu性能日新月异的增长,远高于主内存读写,而需要等待主内存,这样发挥不了多核cpu高性能的优势,于是便增加了cpu多级缓存,在现在电脑的任务管理器也是看的到的:

二、CPU缓存的意义:

1)时间局部性:如果某个数据被访问,那么在不久的将来它很有可能会被再次访问。

2)空间局部性:如果某个数据被访问,那么与它相邻的数据很快也能被访问。

缓存一致性(MESI)协议

为了保证多核cpu各个缓存的数据的一致性。

CPU中每个缓存行使用四种状态进行标记。

M:Modified 修改:指的是该缓存行只被缓存在该CPU缓存中,并且是被修改过的,因此他与主存的数据是不一致的,该缓存行中的数据需要在未来的某个时间点(允许其他CPU读取主存相应的内容之前)写回主存,然后状态变成E(独享)。

E :Exclusive 独享:缓存行只被缓存在该CPU的缓存中,是未被修改过的,与主存的数据是一致的,可以在任何时刻当有其他CPU读取该内存时,变成S(共享)状态,当CPU修改缓存行的内容时,变成M(修改)的状态。

S :Share 共享:意味着该缓存行可能被多个CPU进行缓存,并且该缓存中的数据与主存数据是一致的,当有一个CPU修改该缓存行时,其他CPU是可以被作废的,变成I(无效的)。

I :Invalid 无效的:代表这个缓存是无效的,可能是有其他CPU修改了该缓存行。

对应的四个操作
local read:读本地缓存
local write:写本地缓存
remote read:将内存中的数据读取过来
remote write:将数据写回主存

注意:
对于M和E状态而言总是精确的,他们在和该缓存行的真正状态是一致的,而S状态可能是非一致的。如果一个缓存将处于S状态的缓存行作废了,而另一个缓存实际上可能已经独享了该缓存行,但是该缓存却不会将该缓存行升迁为E状态,这是因为其它缓存不会广播他们作废掉该缓存行的通知,同样由于缓存并没有保存该缓存行的copy的数量,因此(即使有这种通知)也没有办法确定自己是否已经独享了该缓存行。

从上面的意义看来E状态是一种投机性的优化:如果一个CPU想修改一个处于S状态的缓存行,总线事务需要将所有该缓存行的copy变成invalid状态,而修改E状态的缓存不需要使用总线事务。