多核cache一致性

1 多核cache标志位

多核cache主要有两种一致性协议,一种是基于监听的,另外一种是基于目录,在这里我们主要考察基于监听的MOESI协议。

标志位有:

valid: 是否有效

dirty: 脏位

exclusive: 独占标志

cacheline中的状态即如其名称所说:M、O、E、S和I。


状态 状态含义
M 该Cache行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中
O 本Cache line被修改,和内存中的数据不一致,不过其它的核可以有这份数据的拷贝
E 这行数据有效,数据和内存中的数据一致,数据只存在于本Cache中
S 这行数据有效,数据和内存中的数据一致,数据存在于很多Cache中
I 这行数据无效

使用valid、dirty、exclusive表示这五种状态:

  valid exclusive dirty
M 1 1 1
O 1 0 1
E 1 1 0
S 1 0 0
I 0 0 0

合法的状态组合:

   M   O   E   S   I 
 M  Red X Red X Red X Red X Green tick
 O  Red X Red X Red X Green tick Green tick
 E  Red X Red X Red X Red X Green tick
 S  Red X Green tick Red X Green tick Green tick
 I  Green tick Green tick Green tick Green tick Green tick


2 多核cache操作

多核Cache操作主要有Local Read、Local Write、Remote Read 和 Remote Write。
根据所要访问的数据在本地Cache、其他核Cache或者内存中,这些操作会改变本地Cache和其他核中Cache的状态。

AMD中MOESI协议转换图:
3.3.1 <wbr>Cache一致性的基本概念
MOESI模型中,“Probe Read”表示主设备从其他CPU中获取数据拷贝的目的是为了读取数据;而“Probe Write”表示主设备从其他CPU中获取数据拷贝的目的是为了写入数据;“Read Hit”和“Write Hit”表示主设备在本地Cache中获得数据副本;“Read Miss”和“Write Miss”表示主设备没有在本地Cache中获得数据副本;“Probe Read Hit”和“Probe Write Hit”表示主设备在其他CPUCache中获得数据副本。

1)Load指令
首先检查本地是否存在,如果存在,则状态就是M、O、E、S,状态不变,直接获取数据返回。
如果不存在,就会访问远程核中的Cache,如果核中存在,则状态可能为M、O、E、S,
则M改成O,E改为S,O、S不变,本地状态变成S。
如果远端核也不存在,那么只能去查询内存了,本地cache中的状态变成E。
2)Store指令
同样要先检查本地是否存在,若存在的话,不管什么状态,都变成M,不能像Load指令那样返回了,还得去告诉其他核,其他核的状态都变成I。
具体在做的时候,可以这样:
如果状态是M、E,则将数据直接写入Cache中,并将状态改为M(当然原来就是M,就不用改了);如果是O、S,则将其他核中的Cache行置为I,本地写入,改成M,返回。
如果不存在,那么就要查找其他核,如果其他核中存在,不管什么状态,都置成I,本地得到数据后,本地状态置成M。
具体做的时候,可以这样:
如果状态为M、O,则要将数据写回到内存,改为I,本地Cache数据写入,状态位M;如果是E和S,改为I,本地数据写入,状态改为M。
如果其他核中也不存在,那么就去从内存中获取数据,本地cache中的状态变成M。

参考文献



阅读更多
文章标签: cache 一致性 MOESI
个人分类: QEMU
上一篇A Parallel Full-System Emulator for Risc Architure Host
下一篇ARM的CACHE原理(转)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭