2009年第7期福建电脑基于总线监听的Cache一致性协议分析汤伟,李俊峰(安阳师范学院河南安阳455000)【摘要】:片内多处理器系统是当前计算机体系结构研究的热点问题之一。
与传统的多处理机系统一样,Cache一致性问题也是片内多处理器系统必须首先解决的问题。
本文首先介绍了片内多处理器系统中的Cache一致性问题及其解决方法,然后着重讨论了两种基于总线监听的Cache一致性协议:MSI协议和MESI协议,并对它们进行了分析比较。
【关键词】:片内多处理器;Cache一致性;监听协议;MSI协议;MESI协议0、引言随着体系结构的不断进步和生产工艺的快速发展,存储器的访问速度与处理器的运算速度之间的差距越来越显著,使得访存速度成为提高处理器性能的瓶颈。
因此,现代计算机都在处理器和主存之间增加了高速缓冲存储器Cache,以弥补处理器与主存之间速度的差异。
由此也带来了一个新的问题--Cache 一致性问题。
另一方面,受集成电路制造工艺、体系结构等的影响,单处理器的性能难以进一步提升。
因此,片内多处理器得到了快速的发展。
片内多处理器的发展也使得Cache一致性问题更为突出。
1、Cache一致性问题及其解决方法单处理器系统中,Cache一致性问题是指Cache与主存之间数据的一致性问题,而在片内多处理器系统中,每个处理器都有自己私有的Cache,所有处理器共享主存,Cache一致性问题也就变成了多个Cache之间以及Cache与主存之间的数据一致性问题。
单处理器系统中,Cache一致性问题只存在于Cache与主存之间,可通过写贯穿、写回等写策略较好地加以解决,而在片内多处理器系统中,Cache一致性问题存在于多个Cache之间以及Cache与主存之间,解决Cache一致性问题也就需要从两个方面入手,一方面涉及处理器所采用的写策略,另一方面涉及处理器所采用的Cache一致性协议。
常用的写策略有写贯穿、写回等。
常用的Cache一致性协议可分为两大类:目录协议和监听协议。
由于监听协议能使用己经存在的物理连线(通往存储器的总线)来查询Cache的状态,所以在设计中比较常用。
监听协议又可分为两类:写更新协议和写无效协议。
写更新协议是,某处理器要更新它的Cache中某个共享块时,要在总线上广播具体的修改字及地址,含有该数据块副本的各个Cache同时予以更新;写无效协议是,某处理器要更新它的Cache中某个共享块时,无需广播具体的修改字,只需给出修改字的地址和其它必要的指示信息,使其它Cache中该数据块的副本无效,然后再更新该Cache块。
由于在基于总线的片内多处理器系统中总线是最紧张的资源,写无效协议不会给总线带来太大的压力,所以写无效协议几乎已经成为所有实现机制中选择的协议。
2、基于总线监听的Cache一致性协议基于总线的片内多处理器系统中,常用MSI协议、MESI协议等协议来维护多个Cache中数据的一致性。
2.1MSI协议MSI协议是一种写无效协议,它利用三个状态来区别Cache 块的状态,分别为:(1)M:已修改状态,也称为脏状态。
该状态表明,该Cache块已被处理器修改过,其中的数据是系统中唯一正确的数据,主存中的相应数据是过时的,其它Cache中该数据块的副本也都是无效的。
(2)S:共享状态。
该状态表明,该Cache块未被处理器修改,主存中的相应数据是最新的,其它Cache中也可能有该数据块的有效副本。
(3)I:无效状态。
该状态表明,该Cache块中的数据无效。
Cache块的MSI状态除了受本地处理器存储器读写操作的影响之外,还受共享总线上其它处理器存储器读写操作的影响。
(1)本地处理器存储器读写操作对Cache块MSI状态的影响读命中时,Cache块的状态只可能是已修改状态或共享状态,此时不必访问主存,由Cache提供数据,Cache块的状态不变。
读未命中时,可能是因为要访问的数据不在Cache中,也可能是因为要访问的数据在Cache中,但处于无效状态,此时需要访问主存,取得数据,同时将数据所在主存块调入Cache,Cache 块的状态变为共享状态。
写命中时,若命中的是处于已修改状态的Cache块,则直接更新该Cache块,Cache块的状态不变;若命中的是处于共享状态的Cache块,则在更新该Cache块之前,本地处理器先发出一个写无效信号,使其它Cache中该数据块的副本无效,然后再更新该Cache块,Cache块的状态变为已修改状态。
写未命中时,可能是因为要访问的数据不在Cache中,也可能是因为要访问的数据在Cache中,但处于无效状态,此时需要访问主存,取得数据,同时将数据所在主存块调入Cache,再更新Cache块,Cache块的状态变为已修改状态。
本地处理器在访问主存的同时,还会发出一个"读是用于写"信号,供其它处理器监听。
(2)共享总线上其它处理器存储器读写操作对Cache块MSI状态的影响共享总线上其它处理器读未命中时,需要访问主存取得数据;写命中处于共享状态的Cache块时,会广播一个写无效信号;写未命中时,也需要访问主存,取得数据,同时还会发出一个"读是用于写"信号,所有这些操作本地处理器都可以监听到。
本地处理器若监听到其它处理器正在读本处理器的Cache 中处于已修改状态的Cache块,则抢先将该Cache块写回主存,以确保其它处理器从主存中获得的数据是最新的数据,然后再将该Cache块的状态转换为共享状态。
本地处理器若监听到其它处理器正在读本处理器的Cache 中处于共享状态的Cache块,则不改变该Cache块的状态。
本地处理器若监听到其它处理器正在写本处理器的Cache 中处于共享状态的Cache块,则将该Cache块的状态转换为无效状态。
本地处理器若监听到其它处理器正在写本处理器的Cache 中处于已修改状态的Cache块,也抢先将该Cache块写回主存,然后再将该Cache块的状态转换为无效状态。
MSI协议各个状态之间的转换如图1所示:MSI协议中共享状态包含了两种情况:其一是仅一个Cache 中有某个数据块的副本;其二是有两个或两个以上的Cache中有同一数据块的副本。
不管是那种情况,写命中处于共享状态的Cache块时,都需要在更新该Cache块之前,发出一个写无效信号。
对于第二种情况,发出一个写无效信号是必要的,而对于第582009年第7期福建电脑(上接第43页)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!集团数据整合、资源信息共享等需求。
现在,集团客户可以通过购买软件本身解决数据库的存放问题,然后将越来越多的异地分支机构通过租赁客户端的方式来降低管理成本。
中国ERP在线服务业务,会走出怎样的一条道路,还要看市场和用户的认可了。
国产ERP软件在ERP租用方面的探索还是值得称赞的参考文献:1.闪四清.ERP系统原理和实施[M].清华大学,20062.寸晓非.我国中小企业实施ERP之策略分析.[J].黄冈职业技术学院学报,2008一种情况,其它Cache中并无该数据块的副本,广播一个写无效信号显然是一种不必要的浪费。
为了解决这一问题提出了MESI 协议。
图1MSI协议状态转换图2.2MESI协议MESI协议也是一种写无效协议,它利用四个状态来区别Cache块的状态,分别为:(1)M:已修改状态。
该状态的定义同MSI协议。
(2)E:独占状态。
该状态表明,该Cache块未被处理器修改,主存中的相应数据是最新的,且只有本处理器的Cache中有该数据块的副本。
(3)S:共享状态。
该状态表明,该Cache块未被处理器修改,主存中的相应数据是最新的,其它Cache中也有该数据块的有效副本。
(4)I:无效状态。
该状态的定义同MSI协议。
可以看出,MESI协议将MSI协议中的共享状态分成了两个状态:独占状态(仅一个Cache中有某个数据块的副本)和共享状态(有两个或两个以上的Cache中有同一数据块的副本),从而减少了在总线上传输的信息,降低了总线的负担。
Cache块的MESI状态除了受本地处理器存储器读写操作的影响之外,同样受共享总线上其它处理器存储器读写操作的影响。
(1)本地处理器存储器读写操作对Cache块MESI状态的影响读命中时,Cache块的状态可能是已修改状态、独占状态或共享状态,此时不必访问主存,由Cache提供数据,Cache块的状态不变。
读未命中时,需要访问主存,取得数据,同时将数据所在主存块调入Cache,若本地处理器未收到其它处理器的监听命中读操作的指示,则将Cache块的状态转换为独占状态,否则将Cache块的状态转换为共享状态。
写命中时,若命中的是处于独占或已修改状态的Cache块,则直接更新该Cache块,Cache块的状态变为已修改状态;若命中的是处于共享状态的Cache块,则在更新该Cache块之前,本地处理器先发出一个写无效信号,使其它Cache中该数据块的副本无效,然后再更新该Cache块,Cache块的状态变为已修改状态。
写未命中时,需要访问主存,取得数据,同时将数据所在主存块调入Cache,再更新Cache块,Cache块的状态变为已修改状态。
本地处理器在访问主存的同时,还会发出一个"读是用于写"信号,供其它处理器监听。
(2)共享总线上其它处理器存储器读写操作对Cache块MESI状态的影响本地处理器若监听到其它处理器正在读本处理器的Cache 中处于独占、共享或已修改状态的Cache块,都将该Cache块的状态转换为共享状态,同时发出一个监听命中读操作的指示,此外,处于已修改状态的Cache块还要抢先写回主存。
本地处理器若监听到其它处理器正在写本处理器的Cache 中处于独占、共享或已修改状态的Cache块,都将该Cache块的状态转换为无效状态,处于已修改状态的Cache块也要抢先写回主存。
MESI协议各个状态之间的转换如图2所示:图2MESI协议状态转换图MESI协议中,本地处理器若监听到其它处理器正在读、写本处理器的Cache中处于已修改状态的Cache块,都需要抢先将该Cache块写回主存,其它处理器再从主存读取数据,若其它处理器能直接使用本地处理器中处于已修改状态的Cache块,协议的性能将进一步提高。
3、结束语本文对基于总线的片内多处理器系统中,两种维护Cache 一致性的协议--MSI协议和MESI协议进行了分析比较。
MSI协议存在仅一个Cache中有某个数据块的副本也在总线上广播写无效信号的问题。
MESI协议解决了这一问题,但它是以增加Cache的复杂度为代价的,MESI协议同样还存在问题,如其它处理器不能直接使用本地处理器中处于已修改状态的Cache块。