打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
缓存一致性协议之MESI

转自:https://blog.csdn.net/muxiqingyang/article/details/6615199
处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。
单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器中,多个核会共享一些数据,MESI协议就包含了描述共享的状态。
在MESI协议中,每个Cache line有4个状态,可用2个bit表示,它们分别是:

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

M(Modified)和E(Exclusive)状态的Cache line,数据是独有的,不同点在于M状态的数据是dirty的(和内存的不一致),E状态的数据是clean的(和内存的一致)。
(Shared)状态的Cache line,数据和其他Core的Cache共享。只有clean的数据才能被多个Cache共享。
I(Invalid)表示这个Cache line无效。
E状态示例如下:

E状态
只有Core 0访问变量x,它的Cache line状态为E(Exclusive)。
S状态示例如下:
S状态
3个Core都访问变量x,它们对应的Cache line为S(Shared)状态。
M状态和I状态示例如下:
M状态和I状态
Core 0修改了x的值之后,这个Cache line变成了M(Modified)状态,其他Core对应的Cache line变成了I(Invalid)状态。
在MESI协议中,每个Cache的Cache控制器不仅知道自己的读写操作,而且也监听(snoop)其它Cache的读写操作。每个Cache line所处的状态根据本核和其它核的读写操作在4个状态间进行迁移。
MESI协议状态迁移图如下:
MESI协议状态迁移图
在上图中,Local Read表示本内核读本Cache中的值,Local Write表示本内核写本Cache中的值,Remote Read表示其它内核读其它Cache中的值,Remote Write表示其它内核写其它Cache中的值,箭头表示本Cache line状态的迁移,环形箭头表示状态不变。
当内核需要访问的数据不在本Cache中,而其它Cache有这份数据的备份时,本Cache既可以从内存中导入数据,也可以从其它Cache中导入数据,不同的处理器会有不同的选择。MESI协议为了使自己更加通用,没有定义这些细节,只定义了状态之间的迁移,下面的描述假设本Cache从内存中导入数据。
MESI状态之间的迁移过程如下:
当前状态事件行为下一个状态
I(Invalid)Local Read如果其它Cache没有这份数据,本Cache从内存中取数据,Cache line状态变成E;
如果其它Cache有这份数据,且状态为M,则将数据更新到内存,本Cache再从内存中取数据,2个Cache 的Cache line状态都变成S;
如果其它Cache有这份数据,且状态为S或者E,本Cache从内存中取数据,这些Cache 的Cache line状态都变成S
E/S
I(Invalid)Local Write从内存中取数据,在Cache中修改,状态变成M;
如果其它Cache有这份数据,且状态为M,则要先将数据更新到内存;
如果其它Cache有这份数据,则其它Cache的Cache line状态变成I
M
I(Invalid)Remote Read既然是Invalid,别的核的操作与它无关I
I(Invalid)Remote Write既然是Invalid,别的核的操作与它无关I
E(Exclusive)Local Read从Cache中取数据,状态不变E
E(Exclusive)Local Write修改Cache中的数据,状态变成MM
E(Exclusive)Remote Read数据和其它核共用,状态变成了SS
E(Exclusive)Remote Write数据被修改,本Cache line不能再使用,状态变成II
S(Shared)Local Read从Cache中取数据,状态不变S
S(Shared)Local Write修改Cache中的数据,状态变成M,其它核共享的Cache line状态变成IM
S(Shared)Remote Read状态不变S
S(Shared)Remote Write数据被修改,本Cache line不能再使用,状态变成II
M(Modified)Local Read从Cache中取数据,状态不变M
M(Modified)Local Write修改Cache中的数据,状态不变M
M(Modified)Remote Read这行数据被写到内存中,使其它核能使用到最新的数据,状态变成SS
M(Modified)Remote Write这行数据被写到内存中,使其它核能使用到最新的数据,由于其它核会修改这行数据,状态变成II
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
高效利用CPU缓存一致性:优化技巧与策略分析
4个你未必知道的内存小知识
浅谈Intel QPI的MESIF协议和Home,Source Snoop : 弯曲评论
探索CPU的缓存架构,及引申到缓存系统的设计(二)
CPU缓存一致性协议
MESI&MOESI协议
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服