多核cache一致性

原创 2013年12月05日 17:31:53

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。

参考文献



【并发编程】CPU cache结构和缓存一致性(MESI协议)

CPU cache结构和MESI(缓存一致性),MESI协议中cache line数据状态有4种,引起数据状态转换的CPU cache操作也有4种,因此要理解MESI协议,就要将这16种状态转换的情况...
  • reliveIT
  • reliveIT
  • 2016年01月03日 06:29
  • 3055

多核cache一致性

1 多核cache标志位 多核cache主要有两种一致性协议,一种所基于监听的,另外一种是基于目录,在这里我们主要考察基于监听的。 标志位有: valid: 是否有效 dirty: 脏位 exclus...
  • pkufergus
  • pkufergus
  • 2013年12月05日 17:31
  • 1928

多核平台下Cache的False Sharing问题

多核平台下,现有的单线程应用程序将逐步被多线程应用程序所取代,而有效的使用cache是构建高性能多线程应用程序的关键之一。然而,在多线程的程序中对于cache的不正确使用将严重影响系统性能。cache...
  • Duofeng
  • Duofeng
  • 2007年03月10日 15:59
  • 6037

多核程序设计——缓存一致性协议MESI

MESI协议    在MP系统中,每个CPU都有自己独立的cache,缓存之间的一致性很很容易受到破坏的,所以缓存一致性协议就应运而生了。MESI是一种使用非常广泛的缓存一致性协议。    MESI存...
  • cqu20093154
  • cqu20093154
  • 2015年07月16日 12:30
  • 1183

多处理机Cache一致性问题及解决办法

1. 造成Cache一致性问题的原因出现不一致的原因有三个:共享可写的数据、进程迁移和I/O传输。2. 解决办法解决多处理机Cache一致性问题提出了两种解决办法:侦听一致性协议和基于目录的一致性协议...
  • chun0801
  • chun0801
  • 2016年07月17日 15:25
  • 1735

C6000系列的C64x+ Cache优化--配置,Cache miss和Cache一致性

本文主要介绍TI C6000系列的C64x+的DSP Cache配置,常见的Cache miss模式以及如何在多核或者多外设DMA系统下维护Cache一致性,当然还有Cache优化的专题,针对指令L1...
  • lcydhr
  • lcydhr
  • 2014年11月17日 08:29
  • 640

【转载】C6000系列的C64x+ Cache优化--配置,Cache miss和Cache一致性

本文主要介绍TI C6000系列的C64x+的DSP Cache配置,常见的Cache miss模式以及如何在多核或者多外设DMA系统下维护Cache一致性,当然还有Cache优化的专题,针对指令L1...
  • nature_XD
  • nature_XD
  • 2014年05月16日 18:02
  • 1482

DMA及cache一致性

分类: LINUX         cache的作用:         CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CP...
  • wzw88486969
  • wzw88486969
  • 2014年09月11日 15:21
  • 1650

DMA导致的CACHE一致性问题解决方案

转载时请标明作者 waterhawk,  原文地址: 先简单说一下DMA的CACHE一致性是个啥问题。复制: CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit...
  • waterhawk
  • waterhawk
  • 2016年02月23日 18:04
  • 2622

缓存一致性(Cache Coherency)入门

本文是RAD Game Tools程序员Fabian “ryg” Giesen在其博客上发表的《Cache coherency primer》一文的翻译,经作者许可分享至InfoQ中文站。该系列共有两...
  • robert19840729
  • robert19840729
  • 2015年04月22日 22:34
  • 434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多核cache一致性
举报原因:
原因补充:

(最多只允许输入30个字)