Cache Coherence on AMD HyperTransport
来源:互联网 发布:朴智妍网络剧重生 编辑:程序博客网 时间:2024/05/16 00:51
Cache Coherence on AMD HyperTransport
( 很多东西是我的推测,请带着的怀疑的眼光看这篇文章 )
这两天研究了一下AMD在hypertransport上实现cache coherence的方法,总结如下:
(1)
Memory 1 = Processor 1 -------- Processor 2 = Memory 2
| |
| |
这两天研究了一下AMD在hypertransport上实现cache coherence的方法,总结如下:
(1)
Memory 1 = Processor 1 -------- Processor 2 = Memory 2
| |
| |
| |
| |
Memory 3 = Processor 3 -------- Processor 4 = Memory 4
AMD 的hypertransport是一种基于package-switch的interconnection,不同于传统的bus,他是peer-2- peer的。每个socket有自己的local memory,如果要访问remote memory,要通过hypertransport。这种系统就叫NUMA,每个processor和属于它的memory叫做一个node。不过, AMD实现的这个NUMA,local memory和remote memory latency差距不大,和SMP很像。下文中HyperTransport简称为HT,cache coherence简称为cc。
(2) 一般在bus的系统上,cc是通过broadcast/snooping完成的;在interconnection的NUMA系统上,是通过 directory来实现的。但是,AMD的ccHT实现介于两者之间,它是interconnection/NUMA,但是没有使用 directory,而是使用broadcast来实现cc。这是因为AMD主要针对2,4,8个node的低端市场(实际上是需求最大的市场), scalability不是他们的目标,用broadcast可以简化实现。
(3)多个processor对同一个memory block(cache line)的操作需要serialization(比如两个几乎同时发生的write的操作,要保证所有的node上看到相同的更新顺序)。在bus上,所有的操作都会被bus自动的serialize。但是peer-2-peer上message的传递是没有这种全局同步的。如果想达到这种 serilization,就需要依赖一个共享资源。在AMD的ccHT中,所以的transaction都是先发送到相应memory block(cache line)的home node,然后由这个home node发出广播message,从而做到了对同一个memory block (cache line)操作的serilization。
(4)ccHT使用的不是经典的MESI协议,而是MOESI的协议,多了一个owner的状态。对于某个处于modified状态的cache line A,如果有其他的node发生了对它的数据的read miss,A可以把数据发送给发生read miss的node(假设写到cache line B上)。B的状态被设为shared,这个A的状态则被修改为owner。如果A自己发生了write hit,会通过home node来broadcast invalidate的message,这是owner状态和modified状态不同的地方:如果是modified状态,自己的write hit不产生任何message。传统MESI,对于处于modified状态的cache line,如果被其他processor读取,必须把它写回memory,并把自己改到shared状态。这个写回memory的操作有开销,而且即使这个modified cache line可以通过bus把值直接传给需要它的processor,也是很慢的,可能比从内存读值更慢。ccHT的MOESI则解决了这个问题。
(5) 如果有一个node(requesting node)发生了cache read miss,他会通过这个cache line的物理地址找到它的home node,然后向home node发送一个request。当home node收到这个request后,会将一个read request广播给系统里所有的node,包括他自己,然后home node自己会发出memory access的命令。所有的node在收到home node的broadcast之后,会给requesting node发送response:如果某个node有这个cache line的copy,response就包含该cache line的结果(如果该cache line的状态是exclusive则变为shared,modified则变为owner,如果是shared或是owner则不变),如果没有相应的 copy, response就标明没有。requesting node会收集好所有的response,如果其他的node传来了cache line的值,则写入cache(状态为shared),abort home node的memory access的请求;否则就等待memory access的结果(写入cache后,cache line的状态是exclusive)。最后requesting node向home node发送一个message,表明本次transaction结束。
| |
Memory 3 = Processor 3 -------- Processor 4 = Memory 4
AMD 的hypertransport是一种基于package-switch的interconnection,不同于传统的bus,他是peer-2- peer的。每个socket有自己的local memory,如果要访问remote memory,要通过hypertransport。这种系统就叫NUMA,每个processor和属于它的memory叫做一个node。不过, AMD实现的这个NUMA,local memory和remote memory latency差距不大,和SMP很像。下文中HyperTransport简称为HT,cache coherence简称为cc。
(2) 一般在bus的系统上,cc是通过broadcast/snooping完成的;在interconnection的NUMA系统上,是通过 directory来实现的。但是,AMD的ccHT实现介于两者之间,它是interconnection/NUMA,但是没有使用 directory,而是使用broadcast来实现cc。这是因为AMD主要针对2,4,8个node的低端市场(实际上是需求最大的市场), scalability不是他们的目标,用broadcast可以简化实现。
(3)多个processor对同一个memory block(cache line)的操作需要serialization(比如两个几乎同时发生的write的操作,要保证所有的node上看到相同的更新顺序)。在bus上,所有的操作都会被bus自动的serialize。但是peer-2-peer上message的传递是没有这种全局同步的。如果想达到这种 serilization,就需要依赖一个共享资源。在AMD的ccHT中,所以的transaction都是先发送到相应memory block(cache line)的home node,然后由这个home node发出广播message,从而做到了对同一个memory block (cache line)操作的serilization。
(4)ccHT使用的不是经典的MESI协议,而是MOESI的协议,多了一个owner的状态。对于某个处于modified状态的cache line A,如果有其他的node发生了对它的数据的read miss,A可以把数据发送给发生read miss的node(假设写到cache line B上)。B的状态被设为shared,这个A的状态则被修改为owner。如果A自己发生了write hit,会通过home node来broadcast invalidate的message,这是owner状态和modified状态不同的地方:如果是modified状态,自己的write hit不产生任何message。传统MESI,对于处于modified状态的cache line,如果被其他processor读取,必须把它写回memory,并把自己改到shared状态。这个写回memory的操作有开销,而且即使这个modified cache line可以通过bus把值直接传给需要它的processor,也是很慢的,可能比从内存读值更慢。ccHT的MOESI则解决了这个问题。
(5) 如果有一个node(requesting node)发生了cache read miss,他会通过这个cache line的物理地址找到它的home node,然后向home node发送一个request。当home node收到这个request后,会将一个read request广播给系统里所有的node,包括他自己,然后home node自己会发出memory access的命令。所有的node在收到home node的broadcast之后,会给requesting node发送response:如果某个node有这个cache line的copy,response就包含该cache line的结果(如果该cache line的状态是exclusive则变为shared,modified则变为owner,如果是shared或是owner则不变),如果没有相应的 copy, response就标明没有。requesting node会收集好所有的response,如果其他的node传来了cache line的值,则写入cache(状态为shared),abort home node的memory access的请求;否则就等待memory access的结果(写入cache后,cache line的状态是exclusive)。最后requesting node向home node发送一个message,表明本次transaction结束。
(6) 如果有一个node(requesting node)发生了cache write miss,他会通过这个cache line的物理地址找到它的home node,然后向home node发送一个request。当home node收到这个request后,会将一个read/invalidate request广播给系统里所有的node,包括他自己,然后home node自己会发出memory access的命令。所有的node在收到home node的broadcast之后,会给requesting node发送response:如果某个node有这个cache line的copy,response就包含该cache line的结果并将其invalidate掉。如果没有相应的copy,response就标明没有。requesting node会收集好所有的response,如果其他的node传来了cache line的值,则和需要write的值一起写入cache(状态为modified),abort home node的memory access的请求;否则就等待memory access的结果。最后requesting node向homenode发送一个message,表明本次transaction结束。
(7) 如果有一个node发生了cache read hit,那么什么都不做。
(8) 如果有一个node发生了cache write hit,如果cache line本身是modified/exclusive,那么什么都不做,直接修改cache,如果cache本身是exclusive的,则改为 modified。如果cache line是shared或是owner,则与(6)做相同的处理。
(9)每个node在收到home node的broadcast之后,会通过crossbar发送给自己所有的core,然后把所有core的结果拼成一个response返回给requesting node.
(7) 如果有一个node发生了cache read hit,那么什么都不做。
(8) 如果有一个node发生了cache write hit,如果cache line本身是modified/exclusive,那么什么都不做,直接修改cache,如果cache本身是exclusive的,则改为 modified。如果cache line是shared或是owner,则与(6)做相同的处理。
(9)每个node在收到home node的broadcast之后,会通过crossbar发送给自己所有的core,然后把所有core的结果拼成一个response返回给requesting node.
原文地址:http://yuanbor.blog.163.com/blog/static/56674620200811993532387/
- Cache Coherence on AMD HyperTransport
- cache coherence
- cache coherence & memory barrier
- cache coherence 概念
- CPU学习 (Cache Coherence)
- CPU学习 (Cache Coherence)
- CPU, Memory Barrier, Cache Coherence
- CPU, Memory Barrier, Cache Coherence
- CPU, Memory Barrier, Cache Coherence
- CPU, Memory Barrier, Cache Coherence
- Cache lines & Cache coherence & False sharing
- barrier(wmb,mb,rmb)和cache coherence
- Parallel Architecture\Multi-Core Cache Coherence
- 产生cache coherence 问题的原因
- Coherence
- About Cache Coherence, Atomic Operation, Memory Ordering, Memory Barrier, Volatile
- Coherence EP中调用其他CACHE问题deadlock告警问题
- HyperTransport System Architecture
- java 定时器的使用(Timer)
- 当析构函数遇到多线程──C++ 中线程安全的对象回调
- Fatal error: Class 'ZipArchive' not found的解决办法
- 给公司的同学们写的Gmail的账户和导入功能使用说明
- Ogre 材质
- Cache Coherence on AMD HyperTransport
- Blueprint Framemaker介绍
- Ogre材质脚本属性
- Vmware里Linux在x windows与虚拟终端之间切换方法
- ERP系统切换七模式实施计划和目标研究
- 隐式(自动)类型提升
- ogre中的材质脚本
- 张孝详javascript讲座笔记
- ddddd