浅谈并行系统中cache一致性问题和解决方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈并行系统中cache一致性问题和解决方法
班级:0920 姓名:储俊学号:09419022
摘要:高速缓冲存储器一致性问题是指高速缓冲存储器中的数据必须与内存中的数据保持同步(一致) 这个问题常发生在CPU内核与另一个设备异步访问内存时。
关键词:cache一致性,监听CACHE协议,基于CACHE目录的协议
1.Cache一致性问题的发现
本项目的目标板为:处理器采用ARM芯片S3C44B0X,存储器采用2片Flash 和1片SDRAM,在调试的时候输入采用键盘,输出采用显示器,用RS232串口实现通信。
在项目的开发过程中,经软件仿真调试成功的程序,烧入目标板后,程序却发生异常中止。通过读存储器的内容发现,程序不能正常运行在目标板上,是因为存储器中写入的数据与程序编译生成的数据不一致,总是出现一些错误字节。
经过一段时间的调试发现,只要在程序中禁止Cache的使用,存储器中写入的数据将不再发生错误,程序可以正常运行,但速度明显减慢。经过分析,认为问题是由于Cache数据与主存数据的不一致性造成的。
Cache数据与主存数据不一致是指:在采用Cache的系统中,同样一个数据可能既存在于Cache中,也存在于主存中,两者数据相同则具有一致性,数据不相同就叫做不一致性。如果不能保证数据的一致性,那么,后续程序的运行就要出现问题
2.分析Cache的一致性问题
要解释Cache的一致性问题,首先要了解Cache的工作模式。Cache的工作模式有两种:写直达模式(write-through)和写回模式(copyback)。写直达模式是,每当CPU把数据写到Cache中时,Cache控制器会立即把数据写入主存对应位置。所以,主存随时跟踪Cache的最新版本,从而也就不会有主存将新数据丢失这样的问题。此方法的优点是简单,缺点是每次Cache内容有更新,就要对主存进行写入操作,这样会造成总线活动频繁。S3C44B0X 中的Cache就是采用的写直达模式(write-through)。在写直达模式下,数据输出时,系统会把数据同时写入高速缓冲存储器Cache和主存中,这样就保证了输出时高速缓冲存储器的一致性。但该模式下,却无法保证输入时的高速缓冲存储器的一致性。
2.1、产生高速缓存( Cache )不一致的三个原因
(1)共享可写数据引起(Sharing of writable data)的不一致
如果处理机 P1将一个新的数据 X`写入高速缓冲器中时,如果采用写通过策略立即将此复本写回共享存储器。在这种情况下,两个高速缓存中的两份复本 X与 X`就不一致了;如果采用写回策略,也会产生不一致性。只用当高速缓存器中修改的数据被替换或变成无效时,主存储器内容才被更新。(2)进程迁移引起的不一致
如果采用写回策略,包含共享变量 X的进程从处理机 P1迁移到处理机 P2时,将会出现不一致性;如果采用写通过策略时,进程从处理机 P2
迁移到处理机 P1时,也会出现不一致性。
(3)绕过高速缓存的 I/O操作引起的不一致性
当 I/O处理机将一个新的数据 X`写入主存储器时,绕过采用写通过策略的高速缓存,则在共享缓存 C1和共享存储器之间产生了不一致性。当绕过高速缓存直接从共享存储器中输出数据时,采用写回策略的高速缓存也会产生不一致性。例如以 DMA方式传送数据,DMA控制器直接对主存进行操作(读或写),但此时各个高速缓冲中可能有相应数据的复本,就会造成内存与高速缓存之间的不一致。
解决 I/O引起的不一致性问题的一种方法是将 I/O处理机分别接到私有高速缓存上。采用这种方法后,I/O处理机就和 CPU共享高速缓存,如果通过总线能够保持高速缓存与高速缓存之间的一致性,那么就可以保持 I/O 的一致性。但这种方法的一个明显的缺点是可能增加高速缓存的混乱,并且使 I/O数据的本地性变差,会降低高速缓存的命中率。
3.解决高速缓存一致性的两种协议
目前,在并行系统的产品中大多数都采用基于总线的存储器结构。总线是保证高速缓存一致性的最方便的设备,它允许系统中各个处理机能够监测对存储器进行的所有操作,如果这些操作破坏了本地高速缓存中数据的一致性状态,高速缓存控制器就可以采取相应的动作维护高速缓存的一致性。采用这种机制维护高速缓存一致性的协议的系统中,每个高速缓存都在监听其它高速缓存的操作,所以称为监听总线协议。而对于可扩展多处理机系统,常常采用互连网络实现多处理机互连,其网络带宽随着处理机数目的增加而增大,但是这些网络没有方便的监听机制,也难于进行有效的广播,所以常常采用基于目录的协议。下面分别对这两类协议进行介绍。
3.1 监听CACHE协议
监听CACHE协议,即各处理机的每次写操作都是公开发布,为所有的处理机知道,那么各处理机就根据监听的信息对自身的数据采取保持一致的措施,采用监听CACHE协议,当某个CACHE中的内容被改写后,可以有两个办法避免出现远程CACHE内容不一致,第一种办法是使所有远程CACHE中相同数据块“作废”,使全部CACHE中该数据块只有一个有效,简称写作废策略。另一种办法是当改写时,凡存有该数据块的远程CACHE也进行同样的改写,使它们的内容同时“更新”,结果在全部CACHE中可能有多个有效的数据块,简称写更新策略,如果采用写更新方式,每当某个CACHE中的内容被改写后,就必须将改写的内容送到所有的远程CACHE中.在总线方式组织的系统中,将会大大地增加总线的负担.所以一般的应用系统很少使用写更新策略.在采用写作废策略的系统中,为了表示CACHE中每个数据块当前的状态,必须安排一些标志位说明该数据是有效或无效.有时可能需要两个标志位,除说明本地的数据块状态外,还需要表明与系统中对应数据块之间的某种关系.3.2 基于CACHE目录的协议
基于CACHE目录的协议,就是当某个处理机的写操作无法为其他的处理机知道时,通过修改目录间接地向其他处理机报告,以便其他处理机采取措施.目录协议的思想是非常简单的,即将所有使用某一数据块的处理机登记在册,每次变动前都要查目录,变动后则修改目录.根据目录存储方法的不同可以将基于CACHE目录的协议分为集中式目录协议和分布式目录协议.
3.2.1 集中式目录协议