Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346170
  • 博文数量: 105
  • 博客积分: 2730
  • 博客等级: 少校
  • 技术积分: 1110
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-20 12:09
文章分类

全部博文(105)

文章存档

2013年(3)

2012年(2)

2011年(36)

2010年(34)

2009年(6)

2008年(20)

2007年(4)

分类: IT业界

2011-05-15 01:44:16

原创文章,有部分摘选.

cache协议中各种大写字母分别表示一个cache-line的当前状态,多个CPU上对应相同总线地址的line构成一个集合,集合之间的状态组合有限定,比如不能同时处于Modified状态. 各组之间的状态是互不要求的, 而加载新的line导致cache替换导致其他组的状态变化就会因一组的状态变化而触发另一组的状态变化,但是这种影响互相是独立的一个更新过程.



MSI (朴素唯物主义)
Modified, 自己独占且修改了内容,将来需要写回.
Share, 表示处于非独占状态, 自己没写, 别人也没写,但不确定是别人是否真的share了,自己独有一份share的也是可以的.
Invalid, 无效, "我完全不知道你说的是毛玩意儿".

MESI(也叫 Illinois protocol,伊利诺伊真牛B啊 )
把S状态一分为二:S或E
S'::被至少2个CPU读共享
E:独占,未脏.
加入了E状态的目的是如果是在独占时自己进行写,可以不用总线通知撤销其他cache的占有, 而从E转化到S也比较平滑, 把S->M的开销分摊给E->S. (统计学在作怪)

MOSI (水晶棺材万万岁)
在MSI基础上增加了Own状态.
**wiki上对MOSI的描述太少了, 这段内容是我猜测的, 如有不对请无视.
Own是一种"大哥"状态, 当多个CPU共享一个Cache时,
  有一个新的CPU请求这个line时,不必从内存加载,而是从状态为Own的cache接收一份拷贝,
  Own在总线监  听到请求后就会发送这个line.
  某个line被第一个独占的读时, 那个CPU把这个line标记为Own,
  然后其他的读者就陆续从Own处继承了line,然后自己标记为share属性.
  用于核数>=3的情况, 只有2个核的时候S和O是等价的,就不用O状态了.
  协议具有Own状态对于>=3个核之间的互拷贝应该是一个必要状态.

MOESI(万能的大哥出现了)
是前两者(MESI/MOSI)的合体, 既有分摊开销, 又支持>=3个核之间的互拷贝, 很深刻,不解释.
状态迁移的过程可以很容易从前面的内容组合出来.

MERSI (新人胜旧人)
(freescale.com:MPC7410) 中有实现.比较偏?
我的理解就是"最佳新人奖", 比如闫凤娇称为最佳新人后,冠希哥的阿娇就不是最佳新人了. 新人胜旧人啊.
来看一下鄙人对手册的翻译:
MPC7410/MPC7400 RISC Microprocessor Reference Manual :: P-190

When configured for MPX bus mode, the MPC7410 supports an additional five-state cache coherency protocol, referred to as the MERSI protocol.
The additional state in this protocol is the recent state.
增加的R状态表示Recent(最近).
 This state is used for shared data intervention.
用来对共享数据进行干预.
It indicates that a cache block is shared and is the most recently read version of the data.
A cache block is placed in the R state when it is loaded after a shared snoop response was detected.
这个状态表示这个cache块是共享的(S)并且是这个CPU(core)最后读了它, 最近加入共享集合的那个CPU会获得这个装态.
The cache block is downgraded to the S state when another snoop read access for this line is performed.
之前处于R状态的core会被新加入的成员顶替R状态(老新人自己变成S状态,退居二线).
The cache block in the recent state is the one used to supply intervention data.
This ensures that only one processor supplies data for intervention.
这个状态的cache提供cache间复制的数据, 看到这里发现其实就是O状态的另一种形式, Own状态是"大哥永远是大哥,大哥10^8岁",比如水晶棺材里那个万岁, 大哥天天躺在那个实在是太累了. 所以现在流行新人胜旧人的玩法, 比如各种阿娇, 谁都不会常年很累, 谁都不能一直做一姐.
The MERSI coherency protocol together with the MPX bus protocol allows for data-only intervention between caches.
目的自然就是实现cache间的互拷贝.

MESIF
增加的F和O/R一样.
wiki给出的参考的资料中说了选举规则:
When a cache line in the F state is copied, the F state migrates to the newer copy, while the older one drops back to S.
也就是说和R完全一致,Recent 等价于 Forward
选最新的作为转发者,一是适应程序局部性特点, 它年轻更不容易死(被其它新人替换), 二是分散带宽.

另外还介绍了几种, , , and 看上去比较偏学术
其中
Dragon protocol 被用来在 multiprocessor workstation, 比较早了, 其他的就查不到了,不查了.

wiki给的推荐阅读材料::Handy, Jim. The Cache Memory Book. Academic Press, Inc., 1998.
阅读(2250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~