高并发基础一

2019-11-27  本文已影响0人  宋雨轩同学
image.png

最简单的高速缓存的配置,数据的读取和存储都经过高速缓存,CPU核心与高速缓存有一条特殊的快速通道;主存和高速缓存都连在系统总线上,这条总线还用于其他组件的通信。
高速缓存出现不久,系统变得越来越复杂,高速缓存与主存之间的速度差异被拉大,直到加入了另一级缓存,新加入的这级缓存比第一缓存更大,而且更慢,而且经济上不合适,所以有了二级缓存,甚至是三级缓存。

一、为什么需要CPU cache?

CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源,所 以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu->cache->memort)

二、CPU cache有什么意义?

1、时间局部性:如果某个数据被访问,那么在不久的将来他很可能被再次访问
2、空间局部性:如果某个数据被访问,那么与他相邻的数据很快也可能被访问

三、缓存一致性(MESI)

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

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

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

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

I :Invalid 无效的

对应的四个操作

local read:读本地缓存
local write:写本地缓存
remote read:将内存中的数据读取过来
remote write:将数据写回主存

缓存一致性

为了达到数据访问的一致,需要各个处理器在访问缓存时遵循一些协议,在读写时根据协议来操作,常见的协议有MSI,MESI,MOSI等。我们介绍其中最经典的MESI协议。

在MESI协议中,每个cache line有4个状态,可用2个bit表示,它们分别是
状态 描述

M(Modified) 这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。
E(Exclusive)    这行数据有效,数据和内存中的数据一致,数据只存在于本Cache中。
S(Shared)   这行数据有效,数据和内存中的数据一致,数据存在于很多Cache中。
I(Invalid)  这行数据无效
E、状态
image.png

只有Core 0访问变量x,它的Cache line状态为E(Exclusive)

S、状态
image.png

3个Core都访问变量x,它们对应的Cache line为S(Shared)状态

M状态和I状态
image.png

Core 0修改了x的值之后,这个Cache line变成了M(Modified)状态,其他Core对应的Cache line变成了I(Invalid)状态

上一篇 下一篇

猜你喜欢

热点阅读