缓存一致性
2016-12-18 20:55
183 查看
Cache的不一致:内存数据拿到CPU Cache 之后,在后面的操作过程中,CPU Cache 里的值和内存中可能是不一样的。
两种方法解决不一致问题:write-through和write-back (write-back的特点是不立即写内存,而是等到替换cache line的时候将含dirty数据的line写进内存)。
note:这两种解决方案都是针对一个核上的cache 。
-----------------------------------------------------------------------------------------------------------------------------------------------------
note:如今CPU不再按字节访问内存,而是按缓存行(64字节为单位)
-----------------------------------------------------------------------------------------------------------------------------------------------------
Cache 一致性问题:在多核系统中,各个核的cache存储相同变量的副本,当一个处理器更新cache中该变量的副本时,其他处理器应该知道该变量已更新,即其他处理器中cache的副本也应该更新。
一致性问题是针对多个处理器的。每个处理器上的Cache之间可能会发生不一致。(核之间)
有两种主要的方法来保证cache的一致性:监听cache一致性( Snooping Cache Coherence )和基于目录的擦车一致性(Directory Based Cache Coherence).
监听cache一致性:当一个核更新它cache中某个变量,如x,其他核会知道自己cache里的x已经是invalid了。(invalidation标识的是各个core自己cache中的line)note:广播会通知其他核包含该变量的整个cache行的更新,而不是只有x更新。
每更新一个变量就需要一次广播。
基于目录的cache一致性:通过使用一个叫做目录(Directory)的数据结构来解决广播应用于大型系统时导致的性能的下降。目录存储每个内存行的状态。(invalidation标识的是内存中的line)一般地,这个数据结构是分布式的。比如,每个核/内存对负责存储一部分的目录。这部分目录标识局部内存对应高速缓存行的状态。因此,当一个高速缓存行被读入时,如核0的Cache,与这个高速缓存行相对应的目录项就会更新,表示核0有这个行的副本。当一个变量需要更新时,就会查询目录,并将所有包含该变量高速缓存行置为非法。
显然目录需要大量额外的存储空间,但是,当一个Cache变量更新时,只需要与存储这个变量的核交涉(对应的部分目录在这个核上)。
两种方法解决不一致问题:write-through和write-back (write-back的特点是不立即写内存,而是等到替换cache line的时候将含dirty数据的line写进内存)。
note:这两种解决方案都是针对一个核上的cache 。
-----------------------------------------------------------------------------------------------------------------------------------------------------
note:如今CPU不再按字节访问内存,而是按缓存行(64字节为单位)
-----------------------------------------------------------------------------------------------------------------------------------------------------
Cache 一致性问题:在多核系统中,各个核的cache存储相同变量的副本,当一个处理器更新cache中该变量的副本时,其他处理器应该知道该变量已更新,即其他处理器中cache的副本也应该更新。
一致性问题是针对多个处理器的。每个处理器上的Cache之间可能会发生不一致。(核之间)
有两种主要的方法来保证cache的一致性:监听cache一致性( Snooping Cache Coherence )和基于目录的擦车一致性(Directory Based Cache Coherence).
监听cache一致性:当一个核更新它cache中某个变量,如x,其他核会知道自己cache里的x已经是invalid了。(invalidation标识的是各个core自己cache中的line)note:广播会通知其他核包含该变量的整个cache行的更新,而不是只有x更新。
每更新一个变量就需要一次广播。
基于目录的cache一致性:通过使用一个叫做目录(Directory)的数据结构来解决广播应用于大型系统时导致的性能的下降。目录存储每个内存行的状态。(invalidation标识的是内存中的line)一般地,这个数据结构是分布式的。比如,每个核/内存对负责存储一部分的目录。这部分目录标识局部内存对应高速缓存行的状态。因此,当一个高速缓存行被读入时,如核0的Cache,与这个高速缓存行相对应的目录项就会更新,表示核0有这个行的副本。当一个变量需要更新时,就会查询目录,并将所有包含该变量高速缓存行置为非法。
显然目录需要大量额外的存储空间,但是,当一个Cache变量更新时,只需要与存储这个变量的核交涉(对应的部分目录在这个核上)。
相关文章推荐
- 我们都掉进了一个大坑——高并发程序设计
- web性能优化之:no-cache与must-revalidate深入探究
- 页面缓存:内存和文件之间的那些事
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#中缓存的基本用法总结
- mysql缓冲和缓存设置详解
- Android实现图片异步加载并缓存到本地
- wap开发中如何有效的利用缓存减少消息的传送量
- PHP基于文件存储实现缓存的方法
- smarty缓存用法分析
- 在ASP.NET 2.0中操作数据之五十九:使用SQL缓存依赖项SqlCacheDependency
- 在ASP.NET 2.0中操作数据之五十八:在程序启动阶段缓存数据
- 在ASP.NET 2.0中操作数据之五十七:在分层架构中缓存数据
- 引用全局程序集缓存内的程序集的方法
- asp Response.flush 实时显示进度
- C#实现清除IE浏览器缓存的方法
- ASP.NET缓存管理的几种方法