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