一,AMD64缓存一致性协议
通过缓存一致性协议保证各个缓存之间,缓存与主存之间,多处理器之间的数据一致性。AMD64的缓存一致性协议为MOESI(modified, owned,
exclusive,shared,invalid)协议。
当cache line没有保存有效的数据时,被称作invalid,有效的数据可以来自主存或者其他处理器的缓存。
、
当cache line保存的数据为最近,最新的,被拷贝的数据在主存中也为最近,最新的数据,同时其他处理器没有持有此数据的拷贝,
称作exclusive。
当cache line保存的数据为最近,最新的,其他处理器持有此数据的拷贝,称作shared。当其他处理器以owned模式持有此数据,则当前数
据在主存中也为最近最新的。
当cache line保存的数据为最近,最新的,在主存中的数据为过时的,没有其他处理器持有此数据的拷贝,称作modified。
当cache line保存的数据为最近,最新的,称作owned。owned与shared相似之处在于,其他处理器可以持有此数据最近,最新的拷贝,
与shared不同在于,主存中此数据可能为过时的。一份数据只可以有一个处理器持有其owned状态,其他处理器对此数据持有shared状态。
二,AMD64缓存一致性状态图
下图为软件观点的,多种访存操作驱动的MOESI状态图:
为了保证内存的一致性,其他具有内部缓存的处理器在缓存数据时,需要获取最新的数据拷贝,此拷贝可以在主存中或者在其他
处理器的内部缓存中。当一个设备访存miss时,探测其他设备的是否持有此数据最新的拷贝,此操作称作probe。如果其他设备、
中持有此数据最新的拷贝,它将其提供给请求设备,否则主存提供最新的数据。
主要有两类设备probe方式:
read probe,指示其他设备请求数据出于读意图。
write probe,指示其他设备请求数据出于修改意图。
图7-2指出,由probe导致的状态转移包含probe的发起设备和接收设备。一些read probe由那些打算缓存此数据的设备发起,另外一些
发起的read probe并不是为了缓存此数据,如I/O设备。
读命中不会导致MOESI状态转移,写命中通常导致MOESI状态转移到modified状态。如果cache line已经为modified状态,写命中不会改变
它的状态。
参考:
AMD64 Architecture Programmer’s Manual Volume 2: System Programming