1.简单概括Linux内核源码高速缓存原理(例解析)
简单概括Linux内核源码高速缓存原理(例解析)
高速缓存(cache)概念和原理涉及在处理器附近增加一个小容量快速存储器(cache),码注基于SRAM,码注由硬件自动管理。码注其基本思想为将频繁访问的码注数据块存储在cache中,CPU首先在cache中查找想访问的码注数据,而不是码注明雷源码安装直接访问主存,以期数据存放在cache中。码注
Cache的码注基本概念包括块(block),CPU从内存中读取数据到Cache的码注时候是以块(CPU Line)为单位进行的,这一块块的码注数据被称为CPU Line,是码注CPU从内存读取数据到Cache的单位。
在访问某个不在cache中的码注block b时,从内存中取出block b并将block b放置在cache中。码注怎么查看jdk的源码放置策略决定block b将被放置在哪里,码注而替换策略则决定哪个block将被替换。码注
Cache层次结构中,Intel Core i7提供一个例子。cache包含dCache(数据缓存)和iCache(指令缓存),解决关键问题包括判断数据在cache中的flash中国地图源码位置,数据查找(Data Identification),地址映射(Address Mapping),替换策略(Placement Policy),以及保证cache与memory一致性的问题,即写入策略(Write Policy)。
主存与Cache的android launcher2 源码地址映射通过某种方法或规则将主存块定位到cache。映射方法包括直接(mapped)、全相联(fully-associated)、一对多映射等。直接映射优点是地址变换速度快,一对一映射,替换算法简单,查看jar源码的工具但缺点是容易冲突,cache利用率低,命中率低。全相联映射的优点是提高命中率,缺点是硬件开销增加,相应替换算法复杂。组相联映射是一种特例,优点是提高cache利用率,缺点是替换算法复杂。
cache的容量决定了映射方式的选取。小容量cache采用组相联或全相联映射,大容量cache采用直接映射方式,查找速度快,但命中率相对较低。cache的访问速度取决于映射方式,要求高的场合采用直接映射,要求低的场合采用组相联或全相联映射。
Cache伪共享问题发生在多核心CPU中,两个不同线程同时访问和修改同一cache line中的不同变量时,会导致cache失效。解决伪共享的方法是避免数据正好位于同一cache line,或者使用特定宏定义如__cacheline_aligned_in_smp。Java并发框架Disruptor通过字节填充+继承的方式,避免伪共享,RingBuffer类中的RingBufferPad类和RingBufferFields类设计确保了cache line的连续性和稳定性,从而避免了伪共享问题。