浅谈Intel QPI的MESIF协议和Home,Source Snoop

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




Intel的Nehalem一出,CPU江湖顿时失色。其中北桥FSB被灭,CSI/QPI兴起是一个重要因素。也正式宣告了Parallel Bus在处理器领域的王牌地位退出,和Serial Bus或者Point2Point互联的统治地位的诞生。。。:走的快(Parallel Bus)不如走的远(Serial Bus)。

QPI的互联,其中Cache的一致性是一个关键。

其协议是什么?MESIF!与经典的MESI相比,多了一个F word。当然,不是bad words。这里的F是Forwarding的意思。

在上面的两个图中,左边的是MESIF;右边的是经典的MESI。MESIF的例子中,我们可以看见,F状态的存在其实就是为了与S状态区别开来。系统中只有一个F,类比与:在一个家庭中,婆婆与老婆。如果是双重领导,事情全mess up。必须是一个领导F。找数据的时候,F给你,而非S(系统中有许多S)。读者一定要注意,F状态的引入是为了性能,而非状态机的完备性。没有F,S就可以搞定一切[如上右图]。系统中,对任何一个数据的Cacheline,有而且只有一个F。每次一个新人上台,需要数据,F就移交。F变成S。最新的数据变成F。这也是最佳利用Cache算法中的所谓Temporal Locality和Spatial Locality的考量:年轻人一定是会持续工作,时间长的。。。;年老的数据一定不是常用的;持续力不够的。。。另外,读者从上面两图中可以看出,MESI会造成QPI的链路上产生没必要的Snooping Response: 系统里多个婆婆(拥有相同数据备份的node)在非常殷勤的告诉一个申请者:阿拉有数据,and here you go。。。

在Nehalem互联中,QPI可以有Source Snoop或者Home Snoop。通常而言,小规模socket互联用Source Snoop;大规模互联用Home Snoop。

Home Snoop和Source Snoop的本质区别与Snooping时候MESFI状态机的F状态的目的是类似的:在能解决问题的同时,尽量减少互联上的Transaction。例如,Home Snoop的意思就是:老大说了算,负责协调;别人都别吭声。Soure Snoop的意思就是:各个小山头都可以掺和,立功表态。说到这里,就理解了,如果是一个大规模的Nehalem机群互联,用Home Snoop好;如果是1-8个Nehalem互联,估计Source Snoop好一些。道理很简单:如果是一个startup,问一个事,吆喝一声,知道的都回答你,挺好的;如果是一个10万人的公司,发个群发email给10万个人,问一个事情,估计骂你的人比回答你答案的人都多;你最好是问主管(Home)。。。

在上图中,哪个是Home Snoop?哪个是Source Snoop?显然,右图上Home Snoop;左图是Source Snoop。Source Snoop一定是而且只是2 Hop就能搞定数据,while Home Snoop需要在大本营到一下手,需要3 Hop。

MESIF,Intel申请了专利。其专利为:
Forward state for use in cache coherency in a multiprocessor system

该专利是2002年12月9日申请的。2005年7月26日批的。

M-blah-blah-I有许多变种。许多读者估计要么会迷糊,要么静不下心来。如果是前者,抓住一个要素:Write Invalidate。

我曾经在若干年前用大白话解释过Write Invalidate协议。学术的东西其实本质很简单。要理解须先要忘记学术,返璞归真。。。

下图是一个MESI的简单状态机。在理解Cache一致性协议状态机的时候,最容易犯迷糊的是把本CPU的动作与Snooping的动作混淆。现在简单忽悠一下这里面的M状态。从M上面围绕的动作,我们可以知道:蓝色的是自已玩自己的动作(发生在本CPU内部的);红色的是监听到友商(别的CPU,或者其他逻辑,反正就是人在江湖,不得不在一起混的那些node,station等等)的动作。M的意思是:我现在是独家拥有,而且我很牛,还独家拥有修改过的数据。我现在自己独乐乐(Local Read;Local Write);显然,没人能拿你怎么样。你多牛呀,你接着当M!……但是,突然在总线(FSB)或者互联(QPI)上监听到了不想看到的事情。。。:(1)有人发生了读行为(Remote Read)。你该如何办?还想一党独大嘛?没天理。你要把最新的数据给人民。。。而且要把数据UPDATE到DRAM里面去。数据是天下人的数据;而非某个CPU的数据!你的状态要变成S(hared)的了。。。。。。(2)有人发生了写行为(Remote Write)。要夺权!!!如何处理!?交权!皇帝轮流转!请把数据交出来,给别人写一写,玩一玩;然后人家变成了M;你自己变成了I(nvalid)了。。。你需要变成S嘛?至少目前没必要,除非你想读。。。。。。

细心的读者估计会反复琢磨这个状态机。请注意I(nvalid)状态的输入!!!严格的一致:全部来自红色的Remote Write–这就是我们说M-blah-blah-blah-I等各种变种协议都来自学术界里的所谓:Write Invalidate Protocol。用大白话就是:写失效。只要我看到别人有写一个数据备份,我就认栽!承认自己是弱势群体。。。。。。变成非法躲猫猫。

下图所示是MESFI,MOESI,MESI状态机的一些比较。Note that AMD的ccHT用的是MOESI。。。

另外,从SerDes的角度来观察QPI。可以这样去理解:QPI是一个Parallel Clock的SerDes。

这就可以理解QPI的Signal(Pin)了。QPI是单向的。信号是21个。20lane(bit)+clock。每个信号是Differential Signal(差分信号)的。因此是20×2 +1×2=42个pin(管脚)。如果一个QPI 端口(Port)【一发,一送,pair】,是84个pin。。。

Intel以前的并行总线Front-side Bus的pin有多少,600+多个!QPI是84个!比一比,吓一跳。

Parallel Clock SerDes是典型的把以前的并行总线信号汇聚成Serial Bus的做法。《控制信号+数据信号+地址信号+时钟)—》时钟+Serialized Signals。

(11个打分, 平均:5.00 / 5)

雁过留声

“浅谈Intel QPI的MESIF协议和Home,Source Snoop”有59个回复

  1. 陈怀临 于 2010-12-05 10:05 下午

    这篇弟兄们觉得写的如何?能否达到深入浅出的境界了?这基本上算计算机和体系结构里比较深的东西了。。。没有N年的实战经验,不犯迷糊的我就没看见过。。。

  2. 吴朱华 于 2010-12-05 10:06 下午

    首席出手了,果然非常有含金量啊!

  3. Panabit 于 2010-12-05 10:41 下午

    曲高和寡,首席,我先顶一下! :)

  4. 陈怀临 于 2010-12-05 10:42 下午

    这不算啥吧?:-)。我的意思是能否写的通俗易懂。。。这才是高手。其实,我估计绝大多数的博士生,和非天天在这方面混的计算机系教授,挨到这方面,基本上都歇火。。。

    我今天自己都迷糊了好一阵。。。【我可是从逻辑分析仪上,看Bus时序的战场上下来的老兵。。。】

  5. August 于 2010-12-05 10:53 下午

    以下为拙见:
    在HTML或者其它电子文档中,通过给专用名字着色可以保持阅读者的思维逻辑正确性。就像IDE代码工具一样。

  6. byapple 于 2010-12-05 11:33 下午

    Sailing Wang-”IBM和HP哪些使用Nehalem处理器的服务器专家们可以去哭了,多年以来,那些高端服务器的附加值都是在如何进一步增强Cache一致性模型。Nehalem在芯片内部解决了这个问题,这些服务器和台湾OEM厂商生产的基于Nehalem内核的服务器将没有本质差别”。QPI这么一搞这句话着实在理。btw,首席把这么复杂的东西讲的这么浅显易懂,着实是牛人啊,根据首席的讲解总算明白了intel放在hotchips论坛上的PPT。

  7. 理客 于 2010-12-06 12:50 上午

    多年前问过一个硬件工程师,个人理解为parallel像N人行,担的东西多,但因为同步协调容错串扰硬件布线等,不容易走快,serial没有这些问题,容易高速化,不知道这个理解是否正确

  8. keke 于 2010-12-06 4:45 上午

    这个。。。核心都在物理上的实现吧

  9. processor 于 2010-12-07 6:01 上午

    to byapple:
    服务器领域的差异化设计还是层出不穷的。就以采用Intel Nehalem-EX的服务器为例,虽然可以用8颗Nehalem-EX直连(glueless)而直接构成8路服务器,但是HP DL980 G7这一8路系统中采用了4颗node controller ASIC芯片,而整体性能还优于glueless的设计。这其中的关键就在于这4颗node controller ASIC,具体的原因是XXXXXXXXXXXX

    Cisco UCS Catalina ASIC和IBM eX5 MAX5 Chipset可以扩展基于Nehalem-EX服务器的内存容量,也形成了差异化的设计。

  10. 陈怀临 于 2010-12-07 8:54 下午

    从SerDes的角度来观察QPI。可以这样去理解:QPI是一个Parallel Clock的SerDes。

    这就可以理解QPI的Signal(Pin)了。QPI是单向的。信号是21个。20lan(bit)+clock。每个信号是Differential Signal(差分信号)的。因此是20×2 +1=42个pin(管脚)。如果一个QPI pair,是84个pin。。。

    Intel以前的并行总线Front-side Bus的pin有多少,600+多个!QPI是84个!比一比,吓一跳。

    Parallel Clock SerDes是典型的把以前的并行总线信号汇聚成Serial Bus的做法。《控制信号+数据信号+地址信号+时钟)—》时钟+Serialized Signals。

  11. 阿土仔 于 2010-12-07 11:09 下午

    对于芯片制作来说,并不是600个并行IO就能制作出600个serdes的IO,看上去pin是减少了,但是同样封装的芯片能出的总pin数也减少了

  12. huanghuihuang 于 2010-12-08 12:28 上午

    个人觉得模块之间通讯做的最好的应该是TCP/IP协议,通用性非常强。不管用什么方法传送数据,它必须数据类型、数据、发送方、接收方等,把这些数据打包,放到通讯管道内,就可以万事无忧了。道指令运行方式也与此相似,把进程、线程、数据编号、数据值等信息打包,放到通讯管道内,各个接受方再解码,对比、汇总、输出数据,再进入下一循环。

  13. JackBauer 于 2010-12-08 6:03 上午

    serdes跑到10Gb/s不成问题,适合做短距互连。可是引入的延时太大。
    早些年有种串行接口的内存条FB-DIMM,好象就是因为延时大,后来不了了之。
    印象中OPENSPARC-T2提供这种接口。T2追求的是吞吐量,对时延要求不高。

  14. 陈怀临 于 2010-12-08 7:38 上午

    QPI布线应该能在10-30”之间。FSB也就5-10”.
    在通信系统的SerDes方面,要求的例如背版(backplane),通常都是在3‘之间。

    这也是为什么做CPU的人与做通信的人的要求是不一样的。。。

  15. ASR2K 于 2010-12-08 11:01 下午

    报告首席,看了5分钟,那个I没看懂。不过这句话明白了:只要我看到别人有写一个数据备份,我就认栽!

    可能把MESI先讲了,再讲MESIF就更好懂些了。

  16. whsjun 于 2010-12-08 11:07 下午

    “serdes + 并行 + 协议”可提高片间互联带宽。实现方法有很多,带宽200Gbps+。可能会导致延时较大,或者延时不确定。但都可以解决的,比如对齐操作,设置参考通道,

    但是最终还是受到ASIC内部硬件时延限制。比如一组160Gbps并行数据,如果是500根线,每个信号就是320Mbps,ASIC处理起来很困难。

  17. whsjun 于 2010-12-08 11:15 下午

    个人认为,处理器性能受到芯片制程限制较大。
    至于同样逻辑规模和工艺水品下,只能针对特殊应用做特殊算法设计和优化。才能获取更高性能。
    手机cpu和平板cpu,就是这种产物。

  18. EX8216 于 2010-12-09 12:49 上午

    QPI和FSB相比主要是克服了高速率紧时序下的并行总线数据窗口过小的问题,增加了走线的长度,提高了总线带宽。从宏观看QPI采用的是Serdes技术的并行总线,类似与SPI5,SFI-S等接口。有个疑问是QPI总线的容错是如何实现的?如何防止FIFO的溢出?

  19. xie 于 2010-12-10 6:16 下午

    QPI好像是带ack的,和PCIe很有类似之处

  20. 陈怀临 于 2010-12-11 10:36 上午

    QPI很像PCIe。 在SerDes方面,有一个大区别:

    QPI是用单独的Clock Signal,与20个1-bit的data lane是分开的。这是为什么说一个单向的QPI Link(20+1)×2=42个pin。从而一个完整的QPI port是2×42=84个pin。

    PCIe,例如Gen1和Gen2,用的是Encoded Clock。时钟型号与数据和控制信号是mux在一起的。。。[8b/10b encoding]

  21. 陈怀临 于 2010-12-11 12:51 下午

    》有个疑问是QPI总线的容错是如何实现的?如何防止FIFO的溢出?

    在Linker Layer,QPI通过Credit/Debeit的方式来确保Rx端的Buffer满的时候,Tx端不会(能)再发送数据。

    类似与Back-Pressure。

  22. xie 于 2010-12-11 6:40 下午

    还是首席讲解深刻

  23. 陈怀临 于 2010-12-11 7:05 下午

    过奖了。大家互相学习。PCI-E Gen3出台,感觉对将来(x86+QPI+PCIe)的整机结构还是很吓人的。。。我觉得将来Cavium,RMI都没有好果子吃。。。Intel确实有可能把这些家伙挤压的厉害。。。

  24. sivar 于 2010-12-11 10:20 下午

    前辈们写个serdes的吧~~

  25. 怪叔叔 于 2010-12-13 8:00 下午

    能否烦劳解解它与Tilera的mesh总线之间的差异与优劣?

  26. 陈怀临 于 2010-12-13 8:06 下午

    情何以堪的问题。。。基本上是苹果vs橙子

    Q: Chip2Chip. T:Core2Core

  27. 怪叔叔 于 2010-12-14 1:20 上午

    情何以堪的问题。。。基本上是苹果vs橙子
    Q: Chip2Chip. T:Core2Core

    问题是: T的每个core都有自己的cache, 这里也需要解决一致性问题啊? 它给人感觉有点像把简化后的多个chip做到一个chip里面, chip间互联就成了core2core的问题了.~ 不知这样理解对不对呢? 而且好似T都没有出chip2chip的连接方案.~

  28. 陈怀临 于 2010-12-14 7:38 上午

    内部总线不会去折腾SerDes。QPI是一个P2P的Interconnect。 T是一个解决于CrossBar的开关结构。许多其他CPU用类似与Ring,或者内部Bus结构。总之,QPI是为了外部互联的一个SMP interconnect。

  29. 请教陈首席 于 2010-12-14 8:14 下午

    作为一个熟悉c,c++,soc,bus总线和switch router的硬件民工,最近想了解下cpu的架构这方面的,要能看懂你这篇文章需要看什么东西啊,能否大约列个清单。。多谢了

  30. 陈怀临 于 2010-12-14 8:40 下午

    我这篇文章很难嘛?:-)。这就是我的不对了。我的最高境界就是要把体系结构的东东让大傻都能看懂:-)。

    你先从这个online的入门吧。非常好:
    http://www.cs.iastate.edu/~prabhu/Tutorial/title.html

    谈谈我的心路历程。。。

    2004年,参与某款CPU设计【汉芯,例如】,感觉知识量和功力不够。每天夜读书。每3个月完成一本。坚持一年。基本上是微结构和算法方面。后来被评为:某大BU唯一懂CPU的人:-)。当然,要熟悉CPU,还是要实战。在实战的基础上,再看书,就比较好一些。

    我和Qi Wang最近会有重大宣布。。。一举解决国内民工买不起体系结构红宝书的问题,解决生理,sorry,生计,问题。

  31. 请教陈首席 于 2010-12-14 9:00 下午

    感谢首席,翘首以待红宝书。。

  32. byapple 于 2010-12-17 6:42 上午

    首席+Qi -> Redbook,哇,好期待啊

  33. 有容奶大 于 2010-12-19 5:26 下午

    首席的心胸也忒小了点。周五晚上看留言,Qi说有weaving high performace multiprocessor fabric的电子版,可以发给首席,要首席的email地址。首席马上回帖表示垂涎此书已久,欣喜万分。楼下有几个兄弟看到了,也都跟帖希望Qi能共享一下。这种要求在中国,实在是很平常吧,要这种书的人,都是体系结构爱好者,拿来也是自己学习看看。而且你不给,人家也不能咋的。可是首席不干了,快速删帖,片刻就把要书的帖子,Qi的帖子,自己的回帖,都删了干净。哈哈,首席要是鄙视这种ebook传播行为,大可以回帖拒绝Qi的赠书。而且根据首席多篇帖子中提到的大宋房产,大宋大辽股票,估计也是身价千万或上亿了。买本英文原版书还不是九牛一毛?可以首席在欣然表示希望得到此书后(毫无疑问Qi应该会共享给首席的),把其他人的请求和自己留下的痕迹抹了个干净。这等心胸,有失大师风范。

  34. 有容奶大 于 2010-12-19 5:34 下午

    在看弯曲之前,看过qi的新浪博客,似乎记得Qi曾经说过以后不想出书,而是想把一下心得免费公布出来。这下可好,上了首席的贼船,准备出红宝书了?以首席的心胸,这书肯定是本宣传书,是本讲历史,讲感情,吹弯曲的书。看上去很美,而没有什么实际技术内涵,要具体内涵,请大家看Intel的内部文档。搞不到文档?对不起,这个首席也爱莫能助了,嘿嘿。而且,首席的工作饱和度太高,技术性太强的东东,没时间整呀。

  35. 陈怀临 于 2010-12-19 5:43 下午

    奶大贤弟,这个世界上的事情最怕的就是用脑子。。。你想想,我删大家要书的动机是什么?再想想。。。不要低估自己的智商;也不要低估别人的心胸。。。唉,这个世界就怕奶子不对称,想问题阴谋论,而且还特得意:-)

  36. sti_cli 于 2010-12-19 5:45 下午

    Qi把自己博客上的文章全部删除了,说是往弯曲上转移,有些我还没来得及看,这些都是被首席忽悠的结果:-),大家要警惕首席啊!

  37. sivar 于 2010-12-19 7:42 下午

    文章不是删除 只是加密了吧?

  38. Qi 于 2010-12-19 9:55 下午

    这些不关首席的事。

  39. 过客 于 2010-12-20 12:22 上午

    估计涉及法律问题吧

  40. hermitl 于 2010-12-20 1:30 上午

    我总觉得QPI既不算并行总线,也不算串行总线,它既有并行总线的时钟同步特点,也有串行总线的点到点特点,至于说走差分信号,我觉得这个无论与串行并行并没有关系,只是一种搞干扰的手段。它结合了串行总路线的并行总线共同的优点,时钟的同步,减少了串行总线中由于需要恢复时钟而带来的额外开销,点到点的传输,避免了并行总线中的总路线争用情况,保证了带宽。
    不知道大家是怎么看的。

  41. 白云蓝天 于 2011-04-21 3:02 上午

    to JackBauer
    FB-DIMM应该是为了解决DIMM PIN脚占用过多的权宜之举。Intel 2007年的7300芯片组也提供了四组FB-DIMM通道,主要是四组FSB(DHSI)占用PIN脚过多,芯片PIN脚总数据达到了2013。

  42. 白云蓝天 于 2011-04-21 3:07 上午

    QPI布线应该能在10-30”之间。FSB也就5-10”.
    在通信系统的SerDes方面,要求的例如背版(backplane),通常都是在3‘之间。

    这也是为什么做CPU的人与做通信的人的要求是不一样的。。。


    3‘ 是指3米么?

  43. kkk 于 2011-04-25 12:21 上午

    QPI布线应该能在10-30”之间。FSB也就5-10”.
    一般都是指的inch吧

  44. 我才是缓存的专家 于 2011-04-25 12:58 上午

    我听说,华为的几百核的CPU,被缓存一致性,害苦了。

    为什么任正非不派秘书出来留住首席呢?

    现代的人,还不如满清的庄妃有胸怀?

  45. 陈怀临 于 2011-04-25 6:17 上午

    Good idea!

  46. 冬瓜头 于 2011-04-25 7:26 上午

    应该给首席配个专门的前置协议处理机秘书,首席出干货,秘书转成胶片骗领导,这样就皆大欢喜了,领导被忽悠的乐此不疲,首席接着写代码。

    首席,抻的可以了,您老还不给批:(

  47. 理克 于 2011-04-25 8:37 上午

    公司也不能脱离社会的江湖存在,有人就有江湖,有江湖就有zz,古今中外,走到哪都有,只是多少程度不同

  48. Will Chie 于 2011-04-25 11:01 下午

    @理克:山寨?还是改名了?求真相。

  49. Will Chie 于 2011-04-25 11:04 下午

    TO 44:HW的问题,是文化问题,记得很久前说HW搞不出像样的OS时就讨论过,有牛人也没用。

  50. anonymous 于 2011-04-26 4:13 下午

    文中MESI的状态机有个错误,I的local read

  51. anonymous 于 2011-04-26 6:01 下午

    文中应该是对的,楼上是个错误 :)

  52. 理客 于 2011-04-26 6:39 下午

    to Will Chie:不好意思,用手机发的,错字但同音就懒得改,目前的phone/pad,输入法还有很大发展空间。
    现在说不是用apple的终端发言的,都不好意思说是啥,虽然apple不像脑白金一样就是为了面子做的产品,但现在用不用apple,对许多人真是有面子问题

  53. wlm 于 2011-08-15 7:12 上午

    咨询一个问题啊,MESIF缓存一致性协议适用于处理器内部的多个内核之间的缓存一致性维护吗?谢谢哈

  54. Ma Ling 于 2011-08-16 7:54 上午

    sure

  55. dongbinghua 于 2011-10-04 7:35 上午

    持续力不够的。。。

  56. kkk 于 2012-08-26 10:57 下午

    作为中文第一篇MESIF,应该画个MESIF的状态迁移图的

  57. MainasuK 于 2015-10-01 8:40 上午

    写的相当好啊,刚刚某书读到有关缓存机制的介绍,顺手看了维基 MOESI,然后又看了大话 MESI,再来看你的 MESIF,虽然细节可能不太了解,但是概念了解的已经是很清楚。赞一个~

  58. wy 于 2017-04-16 8:50 上午

    应该是3mil吧,线宽?

  59. wy 于 2017-04-16 7:00 下午

    错了错了。。应该是线长 5-10” 10-30” 差分线能布的更长一点