精华内容
下载资源
问答
  • cache一致性MESI协议

    2012-07-08 00:43:00
    保证多点cache一致性协议,cache中每个数据项,需要一个2bit的状态位,表示4种不同缓存状态。 这个协议能够实现的前提是:cache直接有监听机制,一个cache发生任何事件,其它cache能够同一时间获知,并修改自己...


    保证多点cache一致性的协议,cache中每个数据项,需要一个2bit的状态位,表示4种不同缓存状态。


    这个协议能够实现的前提是:cache直接有监听机制,一个cache发生任何事件,其它cache能够同一时间获知,并修改自己cache中对应item的状态。


    状态

    描述

    M(Modified)

    这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。

    E(Exclusive)

    这行数据有效,数据和内存中的数据一致,数据只存在于本Cache中。

    S(Shared)

    这行数据有效,数据和内存中的数据一致,数据存在于很多Cache中。

    I(Invalid)

    这行数据无效。


    状态转移图:


    展开全文
  • 高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。该文件对Cache的结构组成、工作模式、应用场合进行了系统 的解构,并对其做了详细分析,超有用,超详细。
  • 比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很其他的处理器都是使用它的变种。 单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系...

     Cache一致性协议之MESI

              处理器上有一套完整的协议,来保证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)

    这行数据无效。

    MESI状态

               M(Modified)和E(Exclusive)状态的Cache line,数据是独有的,不同点在于M状态的数据是dirty的(和内存的不一致),E状态的数据是clean的(和内存的一致)。

              S(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

    Local Write

    从内存中取数据,在Cache中修改,状态变成M;

    如果其它Cache有这份数据,且状态为M,则要先将数据更新到内存;

    如果其它Cache有这份数据,则其它Cache的Cache line状态变成I

    M

    Remote Read

    既然是Invalid,别的核的操作与它无关

    I

    Remote Write

    既然是Invalid,别的核的操作与它无关

    I

    E(Exclusive)

    Local Read

    从Cache中取数据,状态不变

    E

    Local Write

    修改Cache中的数据,状态变成M

    M

    Remote Read

    数据和其它核共用,状态变成了S

    S

    Remote Write

    数据被修改,本Cache line不能再使用,状态变成I

    I

    S(Shared)

    Local Read

    从Cache中取数据,状态不变

    S

    Local Write

    修改Cache中的数据,状态变成M,

    其它核共享的Cache line状态变成I

    M

    Remote Read

    状态不变

    S

    Remote Write

    数据被修改,本Cache line不能再使用,状态变成I

    I

    M(Modified)

    Local Read

    从Cache中取数据,状态不变

    M

    Local Write

    修改Cache中的数据,状态不变

    M

    Remote Read

    这行数据被写到内存中,使其它核能使用到最新的数据,状态变成S

    S

    Remote Write

    这行数据被写到内存中,使其它核能使用到最新的数据,由于其它核会修改这行数据,

    状态变成I

    I

    MESI状态迁移

               AMD的Opteron处理器使用从MESI中演化出的MOESI协议,O(Owned)是MESI中S和M的一个合体,表示本Cache line被修改,和内存中的数据不一致,不过其它的核可以有这份数据的拷贝,状态为S。

             Intel的core i7处理器使用从MESI中演化出的MESIF协议,F(Forward)从Share中演化而来,一个Cache line如果是Forward状态,它可以把数据直接传给其它内核的Cache,而Share则不能。

    原文:http://blog.csdn.net/muxiqingyang/article/details/6615199 。

    展开全文
  • 支持监听一致性协议的2级Cache 研究及实践
  • Cache一致性协议之MESI

    2016-11-07 15:20:06
    比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很其他的处理器都是使用它的变种。 单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系...

     Cache一致性协议之MESI

              处理器上有一套完整的协议,来保证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)

    这行数据无效。

    MESI状态

               M(Modified)和E(Exclusive)状态的Cache line,数据是独有的,不同点在于M状态的数据是dirty的(和内存的不一致),E状态的数据是clean的(和内存的一致)。

              S(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

    Local Write

    从内存中取数据,在Cache中修改,状态变成M;

    如果其它Cache有这份数据,且状态为M,则要先将数据更新到内存;

    如果其它Cache有这份数据,则其它Cache的Cache line状态变成I

    M

    Remote Read

    既然是Invalid,别的核的操作与它无关

    I

    Remote Write

    既然是Invalid,别的核的操作与它无关

    I

    E(Exclusive)

    Local Read

    从Cache中取数据,状态不变

    E

    Local Write

    修改Cache中的数据,状态变成M

    M

    Remote Read

    数据和其它核共用,状态变成了S

    S

    Remote Write

    数据被修改,本Cache line不能再使用,状态变成I

    I

    S(Shared)

    Local Read

    从Cache中取数据,状态不变

    S

    Local Write

    修改Cache中的数据,状态变成M,

    其它核共享的Cache line状态变成I

    M

    Remote Read

    状态不变

    S

    Remote Write

    数据被修改,本Cache line不能再使用,状态变成I

    I

    M(Modified)

    Local Read

    从Cache中取数据,状态不变

    M

    Local Write

    修改Cache中的数据,状态不变

    M

    Remote Read

    这行数据被写到内存中,使其它核能使用到最新的数据,状态变成S

    S

    Remote Write

    这行数据被写到内存中,使其它核能使用到最新的数据,由于其它核会修改这行数据,

    状态变成I

    I

    MESI状态迁移

               AMD的Opteron处理器使用从MESI中演化出的MOESI协议,O(Owned)是MESI中S和M的一个合体,表示本Cache line被修改,和内存中的数据不一致,不过其它的核可以有这份数据的拷贝,状态为S。

             Intel的core i7处理器使用从MESI中演化出的MESIF协议,F(Forward)从Share中演化而来,一个Cache line如果是Forward状态,它可以把数据直接传给其它内核的Cache,而Share则不能。


    from: http://blog.csdn.net/muxiqingyang/article/details/6615199

    展开全文
  • MSI cache一致性协议

    千次阅读 2017-12-19 10:16:44
    文章转自:MSI cache一致性协议 按照高速缓存的写策略的不同,有写直达和写回WB两种高速缓存: 写直达高速缓存:一旦高速缓存中的一个字被修改,则在主存中要立即修改 写回高速缓存: 并不是立即写回,而是当...

    文章转自:MSI cache一致性协议



    按照高速缓存的写策略的不同,有写直达和写回WB两种高速缓存:

    1. 写直达高速缓存:一旦高速缓存中的一个字被修改,则在主存中要立即修改
    2. 写回高速缓存: 并不是立即写回,而是当被修改的字从高速缓存中被替换或清除时,才真正修改主存

    在侦听协议的设计中,主要有两种设计选择:一是写直达高速缓存还是写回高速缓存,二是写无效WI,还是写更新WU协议


    MSI协议


    三态写回无效MSI(modified,shared,invalid)

    状态:

    1. 无效 I 状态:
    2. 共享 S 状态:它意味着该块在高速缓存中未被修改过,主存中是最新的,在其他高速缓存中可能有也可能没有该块的拷贝
    3. 修改 M 状态:它意味着只有该高速缓存中有该块的最新拷贝,主存中的拷贝是过时的,在其他高速缓存中没有该块的有效拷贝。


    事件:

    高速缓存一致性协议中,每个高速缓存控制器接收两方面的输入:

    1. 处理器发出的请求:处理器读PrRd处理器写PrWr
    2. 总线上侦听到的事务:总线读BusRd总线互斥读BusRdx总线写回BusWB
      • 总线读BusRd:高速缓存控制器将地址放到总线上,请求一个数据块,由主存或者Cache提供数据。
      • 总线互斥读:请求数据块,该目的是要修改该数据块,并且自己独占,其他cache都无效。
      • 总线写回BusWB:cache将数据块写入内存

    为了支持上面的事件,高速缓存控制器又提供了一种新事件:FLUSH,目的是为了响应出现在总线上的事务,并能把该事务所请求的块从缓存中cache直接放到总线上,而不是通过内存再传进数据。


    这里写图片描述


    上图中A/B表示高速缓存控制器观察到事件A发生了,或者说由于事件A导致了该转换的发生,除了发生状态转换外,还要产生一个动作B;“-”表示空动作,Flush动作表示由高速缓存来请求块到总线上。


    无效状态:

    1. 当有处理器读PrRd事件时,就会发生cache miss这样就会装入新数据,但此时其他的cache可能有也可能没有,所以进入S状态,当然需要总线读事件的支持,所以触发总线读事件BusRd
    2. 当有处理器写PrWr事件时,会导致cache miss,调用总线互斥读BusRdX事件(目的是告诉其他cache我要修改这个cache,你们先都无效掉),把要写入的数据装入cache(这是由于采用写直达且不分配策略),然后再修改,这时就会进入M状态

    共享状态:

    1. 当有处理器读PrRd事件时,因为数据就在本cache内且是最新的所以直接命中,还是S状态。
    2. 当有处理器写PrWr事件时,调用总线互斥读BusRdX事件(目的是告诉其他cache我要修改这个cache,你们先都无效掉),当更新数据后,需要进入M状态,告知这是最新的数据,主存中的数据也是过时的。
    3. 当接收到总线上有读BusRd的事件时,当在共享态接受到别人的总线读信息时,与我无关,所以还是S状态。
    4. 当接收到总线上有互斥读BusRdX的事件时,我知道你要当老大了,所以我也只能听从你的安排,把自己无效掉。进入I状态

    修改过状态:

    1. 当有处理器读PrRd事件时,因为为读事件,且M代表当前cache的数据是要比其他的新,所以直接命中,不影响其他cache。所以进入M状态
    2. 当有处理器写PrWr事件时,同样也是因为当前cache是最新的,所以直接更新写,对其他cache不产生影响,所以还是进入M状态。
    3. 当接收到总线上有读BusRd的事件时,因为现在我在M状态,我的数据是最新的,所以当然由我提供数据,所以产生FLUSH事件,最后进入S状态。
    4. 当接收到总线上有互斥读BusRdX的事件时,因为你告诉我只能你当老大,没办法我只能让出,但是让出前我需要把玉玺交出来,所以先FLUSH,然后进入了无效I状态让你当老大。


    以胡伟武老师著的《计算机体系结构(第二版)》第12章习题第6题为例,题目如下:

    假设在一个双CPU多处理器系统中,两个CPU用单总线连接,并且采用监听一致性协议(MSI),cache的初始状态均为无效,然后两个CPU对内存中统一数据块进行如下操作:CPU A读、CPU A写、CPU B写、CPU A读,写出每次访问后两个CPU各自的cache的状态变化。

    事件A状态B状态
    初始状态II
    CPU A读SI
    CPU A写MI
    CPU B写IM
    CPU A读SS


    接下来分析CPU A/B中各自cache的状态变化:

    1. 初始状态时,cache均为无效,即为I;
    2. CPU A读:
      • 当CPU A的cache处于无效状态时,有处理器读PrRd事件发生,就会发生cache miss这样就会装入新数据,但此时其他的cache可能有也可能没有,所以进入S状态,当然需要总线读事件的支持,所以触发总线读事件BusRd。此时CPU A的cache状态为S状态。
      • 此时CPU B的cache依旧处于无效状态。
    3. CPU A写:
      • 当CPU A的cache处于共享状态(S)时,有处理器写PrWr事件发生,调用总线互斥读BusRdX事件(目的是告诉其他cache我要修改这个cache,你们先都无效掉),当更新数据后,需要进入M状态,告知这是最新的数据,主存中的数据也是过时的。此时CPU A的cache状态为M状态。
      • 此时CPU B的cache依旧处于无效状态。
    4. CPU B写:
      • 当CPU B的cache处于无效状态(I)时,有处理器写PrWr事件发生,会导致cache miss,调用总线互斥读BusRdX事件(目的是告诉其他cache我要修改这个cache,你们先都无效掉),把要写入的数据装入cache(这是由于采用写直达且不分配策略),然后再修改,这时就会进入M状态。
      • 此时处于M状态的CPU A cache,通过总线侦听到有总线互斥读BusRdX事件发生,则把自己的cache状态给无效掉了,此时,CPU A的cache状态为I状态。
    5. CPU A读:
      • 当CPU A的cache处于无效状态时,有处理器读PrRd事件发生,就会发生cache miss这样就会装入新数据,但此时其他的cache可能有也可能没有,所以进入S状态,当然需要总线读事件的支持,所以触发总线读事件BusRd。此时CPU A的cache状态为S状态。
      • 此时处于M状态的CPU B cache,通过总线侦听到有读BusRd的事件时,因为现在我在M状态,我的数据是最新的,所以当然由我提供数据,所以产生FLUSH事件,最后进入S状态。
    展开全文
  • cache监听协议模拟器

    2015-01-07 20:21:54
    简单的cache监听协议模拟器,基于java语言的,有简单的gui界面
  • 原文链接:《大话处理器》Cache一致性协议之MESI  Cache一致性协议之MESI  ... 处理器上有一套完整的协议,来保证...比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很其他...
  • Cache 一致性

    千次阅读 2019-06-16 16:13:16
    比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很其他的处理器都是使用它的变种。 单核处理器Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据...
  • volatile和Cache一致性协议之MESI

    万次阅读 热门讨论 2017-08-14 17:46:06
    volatile这个关键字可能很朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字...
  • 《大话处理器》Cache一致性协议之MESI

    万次阅读 多人点赞 2011-07-18 21:05:36
    Cache一致性协议之MESI  处理器上有一套完整的协议,来保证...比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很其他的处理器都是使用它的变种。 单核Cache中每个Cache line有2个标志:dirty和val
  • 一致性要求是指若cache中某个字被修改,那么在主存(以及更高层次)上,该字的副本必须立即或最后加以修改,并确保它者引用主存上 该字内容的正确性。 当代处理器系统中,每个处理器大都有自己的cache。同一主存块...
  • cache监听一致性主要是获得cache的总线访问权,比如core1和core2同时写入相同的地址,会交由总线进行仲裁,确定哪个核先写入,在获得写入权限后,会通过总线广播使地址失效。一般的smp架构cpu cache结构如下图: ...
  • PCI设备对可Cache的存储器空间进行DMA读写的操作的过程较为复杂,有关Cache一致性的话题可以独立成书。而不同的处理器系统使用的Cache Memory的层次结构和访问机制有较大的差异,这部分内容也是现代处理器系统设计的...
  • 摘要:在带有一级Cache的...本文借鉴Token的思想,对目录表法加以改动提出了一种基于4*4Torus结构的Cache一致性协议。 1.引言 在共享内存的处理器系统中,Cache结构可以将共享存储空间的数据缓存在本地,加
  • 多核处理器cache一致性

    千次阅读 2019-04-12 14:05:40
    多核处理器cache一致性实现 对于多核处理器,每个核都...cache一致性协议主要有两大类别,一类是监听协议(Snooping Protocol),每个cache都要被监听或者其它cache的总线活动;另外一类是目录协议(Directory Protoco...
  • 处理机的Cache一致性问题及其解决方案处理机的Cache一致性问题及其解决方案1 处理机体系结构2 Cache一致性问题3 监听一致性协议3.1 写作废方式3.1.1 具体流程3.1.2 状态转换图3.2 写更新方式4 目录一致性协议 ...
  • 多核cache一致性

    千次阅读 2013-12-05 17:31:53
    多核cache主要有两种一致性协议,一种所基于监听的,另外一种是基于目录,在这里我们主要考察基于监听的。 标志位有: valid: 是否有效 dirty: 脏位 exclusive: 独享、共享、标志 状态有: 表示: 2 多核cache操作
  • cache一致性协议 神马是MESI协议? MESI的操作 MESI状态图 演示:初始化状态为I的cache line 当本地CPU的缓存行状态为I时,发起读操作 当本地CPU的缓存行状态为I时,收到一个总线读的信号 当初始化状态为I时,...
  • cache一致性问题

    千次阅读 2014-11-02 14:19:45
    使当某片被cache的内存被其他请求操作时,会被立刻回写,确保cache与内存的一致性。但这种监听技术会带来性能上的损耗,所以arm是由 软件 来确保这个一致性的:一些时候,比如进程切换,必须通过flush整个cache获得...
  • 【并发编程】CPU cache结构和缓存一致性(MESI协议

    万次阅读 多人点赞 2016-01-03 06:29:21
    一、cache cpu cache已经发展到了三级缓存结构,基本上现在买的个人电脑都是L3结构。 1. cache的意义 为什么需要CPU cache?因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待...
  • 关于Cache一致性

    千次阅读 2011-01-10 15:41:00
    总算是把Hennessy&Patterson的处理器和线程级并行拿下了,由于处理器领域的问题多多,很也没有一个统一的解决标准,所以关于这一领域两位大师主要是把研究集中在了Cache一致性上,也就是如何保证多核间...
  • 3.3.1 Cache一致性的基本概念

    千次阅读 2013-07-22 16:27:29
    PCI设备对可Cache的存储器空间进行DMA读写的操作的过程较为复杂,有关Cache一致性的话题可以独立成书。而不同的处理器系统使用的Cache Memory的层次结构和访问机制有较大的差异,这部分内容也是现代处理器系统设计的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,972
精华内容 12,788
关键字:

多cache一致性监听协议