精华内容
下载资源
问答
  • 一般来说我们买CPU时都会重视L2的大小,而没有几个在L1上做文章L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM...
    
    

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

      缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。

    
    
    总体来说,现在CPU的L1缓存的大小差别不大,主要差的就是L2,而L2的增加会使性能大幅度的提升,但是相对来说成本增加的更大。一般来说我们买CPU时都会重视L2的大小,而没有几个在L1上做文章

    L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32—4096KB。

    L2 CACHE=二级缓存
    它是处理器内部的一些缓冲存储器,其作用跟内存一样。 它是怎么出现的呢? 要上溯到上个世纪80年代,由于处理器的运行速度越来越快,慢慢地,处理器需要从内存中读取数据的速度需求就越来越高了。然而内存的速度提升速度却很缓慢,而能高速读写数据的内存价格又非常高昂,不能大量采用。从性能价格比的角度出发,英特尔等处理器设计生产公司想到一个办法,就是用少量的高速内存和大量的低速内存结合使用,共同为处理器提供数据。这样就兼顾了性能和使用成本的最优。而那些高速的内存因为是处于CPU和内存之间的位置,又是临时存放数据的地方,所以就叫做缓冲存储器了,简称“缓存”。它的作用就像仓库中临时堆放货物的地方一样,货物从运输车辆上放下时临时堆放在缓存区中,然后再搬到内部存储区中长时间存放。货物在这段区域中存放的时间很短,就是一个临时货场。 最初缓存只有一级,后来处理器速度又提升了,一级缓存不够用了,于是就添加了二级缓存。二级缓存是比一级缓存速度更慢,容量更大的内存,主要就是做一级缓存和内存之间数据临时交换的地方用。现在,为了适应速度更快的处理器P4EE,已经出现了三级缓存了,它的容量更大,速度相对二级缓存也要慢一些,但是比内存可快多了。 缓存的出现使得CPU处理器的运行效率得到了大幅度的提升,这个区域中存放的都是CPU频繁要使用的数据,所以缓存越大处理器效率就越高,同时由于缓存的物理结构比内存复杂很多,所以其成本也很高。
    大量使用二级缓存带来的结果是处理器运行效率的提升和成本价格的大幅度不等比提升。举个例子,服务器上用的至强处理器和普通的P4处理器其内核基本上是一样的,就是二级缓存不同。至强的二级缓存是2MB~16MB,P4的二级缓存是512KB,于是最便宜的至强也比最贵的P4贵,原因就在二级缓存不同。
    展开全文
  • L1 Cache(一级缓存)

    万次阅读 2015-05-10 11:48:11
    CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度...

    CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。

    简介  缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是从CPU芯片面积和成本的因素来考虑,缓存都很小。

    概念

    L1 Cache(一级缓存)

      L1

      

    CPU缓存

    Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。一般服务器CPU的L1缓存的容量通常在32—256KB。

    L2 Cache(二级缓存)

      L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2高速缓存容量也会影响CPU的性能,原则是越大越好,现在家庭用CPU容量最大的是4MB,而服务器和工作站上用CPU的L2高速缓存更高达2MB—4MB,有的高达8MB或者19MB。

    L3 Cache(三级缓存)

      L3 C

      

    CPU缓存

    ache(三级缓存),分为两种,早期的是外置,现在的都是内置的。而它的实际作用即是,L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。

      其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium处理器。接着就是P4EE和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。

      但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。

    作用

      高

      

    CPU缓存

    速缓冲存储器Cache是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。

      在Cache中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从Cache中调用,从而加快读取速度。由此可见,在CPU中加入Cache是一种高效的解决方案,这样整个内存储器(Cache+内存)就变成了既有Cache的高速度,又有内存的大容量的存储系统了。

      Cache对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与Cache间的带宽引起的。

    高速缓存的工作原理

    1、读取顺序

      CPU要

      

    CPU缓存

    读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。

      正是这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在Cache中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后内存。

    2、缓存分类

      前面是把Cache作为一个整体来考虑的,现在要分类分析了。Intel从Pentium开始将Cache分开,通常分为一级高速缓存L1和二级高速缓存L2。在以往的观念中,L1 Cache是集成在CPU中的,被称为片内Cache。在L1中还分数据Cache(D-Cache)和指令Cache(I-Cache)。它们分别用来存放数据和执行这些数据的指令,而且两个Cache可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。

      在P4处理器中使用了一种先进的一级指令Cache——动态跟踪缓存。它直接和执行单元及动态跟踪引擎相连,通过动态跟踪引擎可以很快地找到所执行的指令,并且将指令的顺序存储在追踪缓存里,这样就减少了主执行循环的解码周期,提高了处理器的运算效率。

      以前的L2 Cache没集成在CPU中,而在主板上或与CPU集成在同一块电路板上,因此也被称为片外Cache。但从PⅢ开始,由于工艺的提高L2 Cache被集成在CPU内核中,以相同于主频的速度工作,结束了L2 Cache与CPU大差距分频的历史,使L2 Cache与L1 Cache在性能上平等,得到更高的传输速度。L2Cache只存储数据,因此不分数据Cache和指令Cache。在CPU核心不变化的情况下,增加L2 Cache的容量能使性能提升,同一核心的CPU高低端之分往往也是在L2 Cache上做手脚,可见L2 Cache的重要性。现在CPU的L1 Cache与L2 Cache惟一区别在于读取顺序。

    3、读取命中率

      CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%。也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取。由于不能准确预测将要执行的数据,读取L2的命中率也在80%左右(从L2读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。在一些高端领域的CPU(像Intel的Itanium)中,我们常听到L3 Cache,它是为读取L2 Cache后未命中的数据设计的—种Cache,在拥有L3 Cache的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

      为了保证CPU访问时有较高的命中率,Cache中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出Cache,提高Cache的利用率。 缓存技术的发展

      总之,在传输速度有较大差异的设备间都可以利用Cache作为匹配来调节差距,或者说是这些设备的传输通道。在显示系统、硬盘和光驱,以及网络通讯中,都需要使用Cache技术。但Cache均由静态RAM组成,结构复杂,成本不菲,使用现有工艺在有限的面积内不可能做得很大,不过,这也正是技术前进的源动力,有需要才有进步!

    CPU缓存

    基本简介

      CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存 内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。

    缓存的工作原理

      缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

      正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。

    缓存是采用SRAM存储器

      目前缓存基本上都是采用SRAM存储器,SRAM是英文Static RAM的缩写,它是一种具有静态存取功能的存储器,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,这也是目前不能将缓存容量做得太大的重要原因。它的特点归纳如下:优点是节能、速度快、不必配合内存刷新电路、可提高整体的工作效率,缺点是集成度低、相同的容量体积较大、而且价格较高,只能少量用于关键性系统以提高效率。

    CPU缓存的分为级

    基本简介

      按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存,二级缓存,部分高端CPU还具有三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其容量也是相对递增的。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。

    一级缓存

      一级缓存(Level 1 Cache)简称L1 Cache,位于CPU内核的旁边,是与CPU结合最为紧密的CPU缓存,也是历史上最早出现的CPU缓存。由于一级缓存的技术难度和制造成本最高,提高容量所带来的技术难度增加和成本增加非常大,所带来的性能提升却不明显,性价比很低,而且现有的一级缓存的命中率已经很高,所以一级缓存是所有缓存中容量最小的,比二级缓存要小得多。

      一般来说,一级缓存可以分为一级数据缓存(Data Cache,D-Cache)和一级指令缓存(Instruction Cache,I-Cache)。

      二者分别用来存放数据以及对执行这些数据的指令进行即时解码,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。目前大多数CPU的一级数据缓存和一级指令缓存具有相同的容量,例如AMD的Athlon XP就具有64KB的一级数据缓存和64KB的一级指令缓存,其一级缓存就以64KB 64KB来表示,其余的CPU的一级缓存表示方法以此类推。

      Intel的采用NetBurst架构的CPU(最典型的就是Pentium 4)的一级缓存有点特殊,使用了新增加的一种一级追踪缓存(Execution Trace Cache,T-Cache或ETC)来替代一级指令缓存,容量为12KμOps,表示能存储12K条即12000条解码后的微指令。一级追踪缓存与一级指令缓存的运行机制是不相同的,一级指令缓存只是对指令作即时的解码而并不会储存这些指令,而一级追踪缓存同样会将一些指令作解码,这些指令称为微指令(micro-ops),而这些微指令能储存在一级追踪缓存之内,无需每一次都作出解码的程序,因此一级追踪缓存能有效地增加在高工作频率下对指令的解码能力,而μOps就是micro-ops,也就是微型操作的意思。它以很高的速度将μops提供给处理器核心。Intel NetBurst微型架构使用执行跟踪缓存,将解码器从执行循环中分离出来。这个跟踪缓存以很高的带宽将uops提供给核心,从本质上适于充分利用软件中的指令级并行机制。Intel并没有公布一级追踪缓存的实际容量,只知道一级追踪缓存能储存12000条微指令(micro-ops)。所以,我们不能简单地用微指令的数目来比较指令缓存的大小。实际上,单核心的NetBurst架构CPU使用8Kμops的缓存已经基本上够用了,多出的4kμops可以大大提高缓存命中率。而如果要使用超线程技术的话,12KμOps就会有些不够用,这就是为什么有时候Intel处理器在使用超线程技术时会导致性能下降的重要原因。

      例如Northwood核心的一级缓存为8KB 12KμOps,就表示其一级数据缓存为8KB,一级追踪缓存为12KμOps;而Prescott核心的一级缓存为16KB 12KμOps,就表示其一级数据缓存为16KB,一级追踪缓存为12KμOps。在这里12KμOps绝对不等于12KB,单位都不同,一个是μOps,一个是Byte(字节),而且二者的运行机制完全不同。所以那些把Intel的CPU一级缓存简单相加,例如把Northwood核心说成是20KB一级缓存,把Prescott核心说成是28KB一级缓存,并且据此认为Intel处理器的一级缓存容量远远低于AMD处理器128KB的一级缓存容量的看法是完全错误的,二者不具有可比性。在架构有一定区别的CPU对比中,很多缓存已经难以找到对应的东西,即使类似名称的缓存在设计思路和功能定义上也有区别了,此时不能用简单的算术加法来进行对比;而在架构极为近似的CPU对比中,分别对比各种功能缓存大小才有一定的意义。

    二级缓存

      CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存 内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。

    cpu及CPU缓存图片锦集(15张)

    CPU缓存读取数据的顺序

      缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

      正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。

      最早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。当时集成在CPU内核中的缓存已不足以满足CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。英特尔公司在推出Pentium 4处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为12KμOps,表示能存储12K条微指令。

    CPU缓存的速度与效率

      随着CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。现在再用集成在CPU内部与否来定义一、二级缓存,已不确切。而且随着二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为CPU提供更高的传输速度。

      二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。

      CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

      为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。

      CPU产品中,一级缓存的容量基本在4KB到64KB之间,二级缓存的容量则分为128KB、256KB、512KB、1MB、2MB等。一级缓存容量各产品之间相差不大,而二级缓存容量则是提高CPU性能的关键。二级缓存容量的提升是由CPU制造工艺所决定的,容量增大必然导致CPU内部晶体管数的增加,要在有限的CPU面积上集成更大的缓存,对制造工艺的要求也就越高。

      双核心CPU的二级缓存比较特殊,和以前的单核心CPU相比,最重要的就是两个内核的缓存所保存的数据要保持一致,否则就会出现错误,为了解决这个问题不同的CPU使用了不同的办法:

    Intel双核心处理器的二级缓存

      目前Intel的双核心CPU主要有Pentium D、Pentium EE、Core Duo三种,其中Pentium D、Pentium EE的二级缓存方式完全相同。Pentium D和Pentium EE的二级缓存都是CPU内部两个内核具有互相独立的二级缓存,其中,8xx系列的Smithfield核心CPU为每核心1MB,而9xx系列的Presler核心CPU为每核心2MB。这种CPU内部的两个内核之间的缓存数据同步是依靠位于主板北桥芯片上的仲裁单元通过前端总线在两个核心之间传输来实现的,所以其数据延迟问题比较严重,性能并不尽如人意。

      Core Duo使用的核心为Yonah,它的二级缓存则是两个核心共享2MB的二级缓存,共享式的二级缓存配合Intel的“Smart cache”共享缓存技术,实现了真正意义上的缓存数据同步,大幅度降低了数据延迟,减少了对前端总线的占用,性能表现不错,是目前双核心处理器上最先进的二级缓存架构。今后Intel的双核心处理器的二级缓存都会采用这种两个内核共享二级缓存的“Smart cache”共享缓存技术。

    AMD双核心处理器的二级缓存

      Athlon 64 X2 CPU的核心主要有Manchester和Toledo两种,他们的二级缓存都是CPU内部两个内核具有互相独立的二级缓存,其中,Manchester核心为每核心512KB,而Toledo核心为每核心1MB。处理器内部的两个内核之间的缓存数据同步是依靠CPU内置的System Request Interface(系统请求接口,SRI)控制,传输在CPU内部即可实现。这样一来,不但CPU资源占用很小,而且不必占用内存总线资源,数据延迟也比Intel的Smithfield核心和Presler核心大为减少,协作效率明显胜过这两种核心。不过,由于这种方式仍然是两个内核的缓存相互独立,从架构上来看也明显不如以Yonah核心为代表的Intel的共享缓存技术Smart Cache。

    一级缓存与二级缓存的比较

      L1 cache vs L2 Cache用于存储数据的缓存部分通常被称为RAM,掉电以后其中的信息就会消失。RAM又分两种,其中一种是静态RAM(SRAM);另外一种是动态RAM(DRAM)。前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。CPU的L1级缓存通常都是静态RAM,速度非常的快,但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),而且价格也相对较为昂贵(同容量的静态RAM是动态RAM的四倍)。扩大静态RAM作为缓存是一个不太合算的做法,但是为了提高系统的性能和速度又必须要扩大缓存,这就有了一个折中的方法:在不扩大原来的静态RAM缓存容量的情况下,仅仅增加一些高速动态RAM做为L2级缓存。高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,而且成本也较为适中。一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上存在差异,由此可见二级缓存对CPU的重要性。CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高端CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率,从某种意义上说,预取效率的提高,大大降低了生产成本却提供了非常接近理想状态的性能。除非某天生产技术变得非常强,否则内存仍会存在,缓存的性能递增特性也仍会保留。 CPU缓存与内存的关系既然CPU缓存能够在很大程度上提高CPU的性能,那么,有些朋友可能会问,是不是将来有可能,目前的系统内存将会被CPU取代呢?

      答案应该是否定的,首先,尽管CPU缓存的传输速率确实很高,但要完全取代内存的地位仍不可行,这主要是因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,与此同时系统的速度就慢了下来,不过CPU会把这些数据复制到缓存中去,以便下一次不用再到内存中去取。也即是说,随着缓存增大到一定程度,其对CPU性能的影响将越来越小,在性能比上来说,越来越不合算。就目前缓存容量、成本以及功耗表现来看,还远远无法与内存抗衡,另外从某种意义上来说,内存也是CPU缓存的一种表现形式,只不过在速率上慢很多,然而却在容量、功耗以及成本方面拥有巨大优势。如果内存在将来可以做到足够强的话,反而很有取代CPU缓存的可能。 缓存的读写算法同样重要即便CPU内部集成的缓存数据交换能力非常强,也仍需要对调取数据做一定的筛选。这是因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据经常是被访问最频繁的。命中率算法中较常用的“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。 高速缓存做为CPU不可分割的一部分,已经融入到性能提升的考虑因素当中,伴随生产技术的进一步发展,缓存的级数还将增加,容量也会进一步提高。作为CPU性能助推器的高速缓存,仍会在成本和功耗控制方面发挥巨大的优势,而性能方面也会取得长足的发展。

    三级缓存

      三级缓存是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。

      其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系统总线频率同步的L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的Itanium(Itanium 安腾 )处理器。接着就是P4EE(Extreme Edition)和至强MP。Intel还打算推出一款9MB L3缓存的Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。

      但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加带来更有效的性能提升。

    展开全文
  • 一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached。由于大量的缓存读取会导致L2的网络成为整个系统的瓶颈,因此L1的目标是降低对L2的读取次数。该缓存...
  • Hibernate的Cache管理 Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起到个蓄水池和缓冲的作用。Cache对于大量依赖数据读取操作的系统而言尤其重要。在大并发量的情况下,如果每次程序都需要向数据库...
     
    Hibernate的Cache管理 
    

    Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起到一个蓄水池和缓冲的作用。Cache对于大量依赖数据读取操作的系统而言尤其重要。在大并发量的情况下,如果每次程序都需要向数据库直接做查询操作,它们所带来的性能开销显而易见,频繁的网络传输、数据库磁盘的读写操作都会大大降低系统的整体性能。此时,如果能把数据在本地内存中保留一个镜像,下次访问时只需从内存中直接获取,那么显然可以带来显著的性能提升。引入Cache机制的难点是如何保证内存中数据的有效性,否则脏数据的出现将会给系统带来难以预知的严重后果。虽然一个设计得很好的应用程序不用Cache也可以表现出让人接受的性能,但毫无疑问,一些对读操作要求很高的应用程序可以通过Cache取得更高的性能。对于应用程序,Cache通过内存或磁盘保存了数据库中当前有关数据状态,它是一个存于当地的数据备份。Cache位于数据库和应用程序之间,从数据库中更新数据,并给程序提供数据。

    Hibernate实现了良好的Cache机制,可以借助Hibernate内部的Cache迅速提高系统数据读取性能。Hibernate中的Cache可分为两层:一级Cache和二级Cache。


    一级Cache

    Session实现了第一级Cache,它属于事务级数据缓冲。一旦事务结束,这个Cache也随之失效。一个Session的生命周期对应一个数据库事务或一个程序事务。

    Session-cache保证在一个Session中两次请求同一个对象时,取得的对象是同一个Java实例,有时它可以避免不必要的数据冲突。另外,它还能保证另一些重要的性能。

    在对一个对象循环引用时,不至于产生堆栈溢出。


    当数据库事务结束时,对于同一数据库行,不会产生数据冲突,因为对于数据库中的一行,至多有一个对象来表示它。


    一个事务中可能会有很多个处理单元,在一个处理单元中做的操作都会立即被另外的处理单元得知。

    不用刻意去打开Session-cache,它总是被打开并且不能被关闭。当使用save()、update()或saveOrUpdate()来保存数据更改,或通过load()、find()、list()等方法来得到对象时,对象就会被加入到Session-cache。

    如果要同步很大数量的对象,这是需要有效地管理Cache,可以用Session的evict()方法从一级Cache中移除对象。例如:

    Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction() ;
    for(int i=0; i<100000 ;i++) {
    Student stu = new Student();
    ….
    session.save(stu);
    }
    tx.commit();
    session.close();
    在保存50 000个对象时,程序可能抛出OutOfMemoryException异常,因为Hibernate在一级Cache缓存了新加入数据库的所有对象。要解决这个问题,首先设置JDBC批处理数量到一个合理的数值(一般是10~20)。在hibernate.properties配置文件中设置如下:
     hibernate.jdbc.batch_size 20
    或在hibernate.cfg.xml中设置如下:
    <property name=”hibernate.jdbc.batch_size”> 20 </property>
    然后在一定的时候提交更改并清空Session的Cache:
     Session session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction() ;
    for(int i=0; i<100000 ;i++) {
    Student stu = new Student();
    ….
    session.save(stu);
    if(i%20==0) { //每保存完20个Student对象后,进行以下操作
    session.flush(); //提交更新
    session.clear(); //清除Cache,释放内存
    }
    }
    tx.commit();
    session.close();

     

    二级Cache

    二级Cache是SessionFactory范围内的缓存,所有的Session共享同一个二级Cache。在二级Cache中保存持久性实例的散装形式的数据。二级Cache的内部是如何实现的并不重要,重要的是采用哪种正确的缓存策略,以及采用哪种Cache Providers。持久化不同的数据需要不同的Cache策略,比如说一些因素将影响到Cache策略选择:数据的读/写比例、数据表是否能被其他的应用程序所访问等。对于一些读/写比例高的数据可以打开它的缓存,允许这些数据进入二级缓存容器有利于系统性能的优化;而对于能被其他应用程序访问的数据对象,最好将此对象的二级Cache选项关闭。

    设置Hibernate的二级Cache需要分两步进行:首先确认使用什么数据并发策略,然后配置缓存过期时间和设置Cache提供器。


    有4种内置的Hibernate数据并发冲突策略,代表了数据库隔离级别,如下所示。

    transactional:仅在受管理的环境中可用。它保证可重读的实物隔离级别,可以对读/写比例高、很少更新的数据采用这种策略。


    read-write:使用timestamp机制维护读已提交事务隔离级别。可以对读/写比例高、很少更新的数据采用这策略。


    nonstrict-read-write:不保证Cache和数据库之间的数据一致性。使用此策略时,应该设置足够短的缓存过期时间,否则可能从缓存中读出脏数据。当一些数据极少改变,并且当这些数据和数据库有一部分不一致但影响不大时,可以使用此策略。


    read-only:当确保数据永不改变时,可以使用此策略。


    确定了Cache策略之后,就要挑选一个合适高效的Cache提供器,它作为插件被Hibernate调用。Hibernate允许使用下述几种缓存插件。


    EhCache:可以在JVM中作为一个简单进程范围的缓存,它可以把缓存的数据放入内存或磁盘,并支持Hibernate中可选用的查询缓存。


    OpenSymphony OSCache:和EhCache相似,并且它提供了丰富的缓存过期策略。
    SwarmCache:可作为集群范围的缓存,但不支持查询缓存。
    JBossCache:可作为集群范围的缓存,但不支持查询缓存。

    上述4种缓存插件的对比情况列于表9-3中。
    表9-3  4种缓存插件的对比情况

    支持非严格读写

    EhCache

     

    OSCache

     

    SwarmCache

     

     

    JBossCache

     

     

    它们的提供器列于表9-4中。
    表9-4  缓存策略的提供器

    提供器(Cache Providers

    Hashtable(只能测试时使用)

    org.hibernate.cache.HashtableCacheProvider

    EhCache

    org.hibernate.cache.EhCacheProvider

    OSCache

    org.hibernate.cache.OSCacheProvider

    SwarmCache

    org.hibernate.cache.SwarmCacheProvider

    JBossCache

    org.hibernate.cache.TreeCacheProvider

    在默认情况下,Hibernate使用EhCache进行JVM级别的缓存。用户可以通过设置Hibernate配置文件中的hibernate.cache.provider_class的属性,指定其他的缓存策略,该缓存策略必须实现org.hibernate.cache.CacheProvider接口。

     

    在Hibernate中使用EhCache

    EhCache是一个纯Java程序,可以在Hibernate中作为一个插件引入。它具有运行速度快、结构简单、占用内存小、很小的依赖性、支持多CPU服务器、文档齐全等特点。

    在Hibernate中使用EhCache,需要在hibernate.cfg.xml中设置如下:

    <property name=” hibernate.cache.provider_class”>
    org.hibernate.cache.EhCacheProvider
    </property>
    EhCacheProvider类位于hibernate3.jar包中,而不是位于ehcache-1.1.jar包中。EhCache有自己的配置文档,名为ehcache.xml。在Hibernate3.x中的etc目录下有ehcache.xml的示范文件,将其复制应用程序的src目录下(编译时会把ehcache.xml复制到WEB-INF/classess目录下),对其中的相关值进行更改以和自己的程序相适合。进行配置后,在ehcache.xml文件中的全部代码如下:
      <diskStore path="d://cache"/> //设置cache.data文件的存放位置
        <defaultCache
    maxElementsInMemory="10000" //缓存中允许创建的最大对象数
    eternal="false" //缓存中对象是否为永久的
    timeToIdleSeconds="120" //缓存数据钝化时间(即对象在它过期前的空闲时间)
    timeToLiveSeconds="120" //缓存数据生存时间(即对象在它过期前的生存时间)
    overflowToDisk="true"  //是否启用磁盘缓存
    />
        <cache name="Student"   //用户自定义的Cache配置
    maxElementsInMemory="10000"
    eternal="false"
    timeToIdleSeconds="300"
    timeToLiveSeconds="600"
    overflowToDisk="true"
    />
    </ehcache>

    此外,还需要在持久化类的映射文件中进行配置。例如,Group(班级)和Student(学生)是一对多的关系,它们对应的数据表分别是t_group和t_student。现在要把Student类的数据进行二级缓存,这需要在两个映射文件(Student.hbm.xml和Group.hbm.xml)中都对二级缓存进行配置。

    在Group.hbm.xml中配置二级缓存如下:

        ……
    <hibernate-mapping>
    <class name="Group" table="t_group" lazy="false">
    ……
    <set name="students" cascade="save-update"
    inverse="true"   <!--关系由Student维护-->
    lazy="true"
    >
    <cache usage="read-write"/>  //<!--集合中的数据将被缓存-->
    <key column="id"/>
    <one-to-many class="Student"/>
    </set>
    </class>
    </hibernate-mapping>
    ……
    上述文件虽然在<set>标记中设置了<cache usage="read-write"/>,但Hibernate仅把和Group相关的Student的主键id加入到缓存中,如果希望把整个Student的散装属性都加入到二级缓存中,还需要在Student.hbm.xml文件的<class>标记中加入<cache>子标记,如下所示:
    <class name="Student" table="t_student" >
    <cache usage="read-write" /> <!--cache标记需跟在class标记后-->
    ……
    </class>

    展开全文
  • Cache简介(

    千次阅读 多人点赞 2018-01-23 18:44:21
    cache是干啥的? 在以前,CPU的主频比较慢,CPU和内存DRAM之间速度差别不是很大,存储数据或者指令还OK。...位于内存和CPU之间,速度非常快,所以CPU就把数据直接写入cache,然后CPU就可以干其他的了

    cache是干啥的?
    在以前,CPU的主频比较慢,CPU和内存DRAM之间速度差别不是很大,存储数据或者指令还OK。但是CPU的飞速发展,CPU大哥速度已经飞快,而内存速度却跟不上大哥的步伐,所以大哥每次要读取或者写入内存的时候都要等一等小弟,这个时候怎么办。cache就出来了,它类似与一个第三方。位于内存和CPU之间,速度非常快,所以CPU就把数据直接写入cache,然后CPU就可以干其他的了,剩下的事情就交给cache这个跑腿的,cache在合适的时机可以慢慢的把数据写入内存,也就是相当于解了CPU的燃眉之急。

    说白了,CPU要读数据首先是在cache中读,如果cache命中,也叫cache hit,CPU就可以极快的得到该地址处的值。如果cache miss 也就是没有命中,它就会通过总线在内存中去读,并把连续的一块单元加载到cache中,下次好使用。

    cache大多是SRAM(静态RAM),而内存大多是DRAM(动态随即存储)或者DDR(双倍动态随机存储)。
    cache容量一般非常小,因为价格贵,所以cache小是有道理的。一级cache一般就几KB,cache 的单位又分成cache line ,它是从内存单元加载到cache中的最小单元,一般为几个字大小,32字节或者64字节偏多。(因为时间局部性和空间局部性所以加载一次是以一个cache单元为最小单位)

    cache有两种模式(写回模式) 和 (写通模式)
    写回?写通? 回哪儿?通哪儿?
    当然是内存啊!!!

    简单介绍,写通也就是当CPU写入cache的时候,将数据再从cache 中写到内存中,这两个过程要都结束后,CPU的写入操作才算完成,也就是时刻保持内存和缓存的同步,这显然是很耗时的。

    什么是多级cache?
    一级cache 有指令cache和数据cache之分,这使整个系统更加高效,因为1Lcache 容量小,所以有了多级cache ,比如二级cache ,他容量大,但是速度就要比1Lcache 慢些,但比内存快多了。三级cache就更一些了。

    写回也就是当CPU写入cache中的时候,数据不会马上从cache中写到内存里面,而是等待时机成熟后写入(比如 发生cache miss,其他内存要占用该cache line的时候将该单元写回到内存中,或者一定周期后写入到内存中 ,或者其它地核需要读取该内存的时候)。

    内存写入cache的时候,如果cache 满了,则用一定的算法淘汰,比如随机淘汰还有或者LRU淘汰(用的少的被淘汰 常用)来替换掉原来的cache line 单元。

    下面说CPU如何高效查询cache,介绍三种模式

    1、全相连模式。
    也就是一定大小的内存块,可以映射到cache的任何一个cache line当中。
    很好理解,CPU查询cache line 却要花很多时间。不可取不可取。

    2、直接映射
    也就是内存按照cache line 的大小按照顺序映射到cache中,比如cache大小为1kb,每个cache line 为32字节。则共有32个cache line。CPU的内存空间为4G,
    内存 cache
    0x0~0x19 ————–> cache line 0
    0x20~0x39 ————–> cache line 1
    0x40~0x59 ————–> cache line 2
    ………..
    0x400~0x419 —————> cache line 0
    0x420~0x439 —————-> cache line 1

    也就是一个内存的地址有确定的cache line 号,所以查询速度很快,但是问题又来了,多个地址竞争同一个cache line ,而且程序具有空间局部性,可能或造成很多的cache没被使用,而有几个cache line却被频繁的换入换出。也不行。

    3、N WAY cache。(N路cache)

    这个方法综合了前面两种方法,也就是cache被分为N份,如4路cache ,cache总容量被四等分,比如1kb的cache,cache line大小为32字节,每一路cache有256字节容量,也就是8个单元的cache line。
    这怎么映射的呢?

    内存也是被分为cache line 的大小为一个映射单位。但是内存0x0~0x19就存在cache line 0,(四路简单粗暴的理解为有四个cache line 0、cache line 1…cache line 7 而这四个cache line 0又被合称为一个集合也就是cache set),0x0~0x19就可以随机选择存储在四路当中的某一路,这样就不用被频繁的换入换出,又索引的很快。
    实际上可以这样理解当N等于1的时候也就是直接映射,当N恰好等于 (内存大小/缓存大小) 时就相当于全相连模式。

    展开全文
  • Cache 的基本概念与工作原理 背景知识 随着 CPU 技术的飞速发展,常用的处理器飞奔在越来越高的频率之上,虽然处理器的速度越来越快,但是与之相匹配的存储器的速度却没有获得相应的提升,这大大限制了 CPU 的处理...
  • 细说Cache

    万次阅读 多人点赞 2011-12-21 21:25:43
    个Web站点可能存在个“重量”的加载,它能够使得站点在访问的时候,拖慢整个服务器。当站点被大量用户同时访问的时候,访问速度缓慢是大部分网站共同存在的问题。为了解决这个问题,我们可以使用个更高级别...
  • CPU cache

    千次阅读 2015-11-29 11:25:06
    、CPU,内存和cache之间的关系   如今的CPU和二十几年前的相比,其精密程度和运作速度可谓天壤之别。在以前,CPU的工作频率和内存总线的频率是处于个等级的,CPU对内存的访问速度也只是比对寄存器的访问速度要...
  • 缓存(L2 CACHE

    千次阅读 2010-01-16 14:23:00
    缓存 二缓存又叫L2 CACHE,它是处理器内部的一些缓冲存储器,其作用跟内存一样。 它是怎么出现的呢? 要上溯到上个世纪80年代,由于处理器的运行速度越来越快,慢慢地,处理器需要从内存中读取数据的速度需求...
  • Guava cache

    千次阅读 2019-03-17 08:42:43
    Guava cache,个小巧的本地缓存使用详解
  • Cache地址映射

    万次阅读 多人点赞 2018-09-01 15:17:35
    理解Cache地址映射之前补充一些基础知识,Cache的地址映射和MMU(内存管理单元)和TLB Cache(转译查找缓存)中的映射是有区别的。Cache、TLB Cache、MMU在CPU中结构如图1所示,图1展现的是Cortex A9 Processor内部...
  • 深入CACHE

    千次阅读 2009-05-14 11:43:00
    Cache是我们经常关心的话题,K6-Ⅲ的推出引出了种全新的缓存... 、使用Cache的必要性 所谓Cache即高速缓冲存储器,它位于CPU与主存即DRAM(Dynamic RAM 动态存储器)之间,是通常由SRAM(Static RAM 静态存储器
  • 例说STM32F7高速缓存——Cache一致性问题(

    万次阅读 多人点赞 2017-11-01 17:01:02
    例说STM32F7高速缓存——Cache一致性问题() 例说STM32F7高速缓存——Cache一致性问题(二) 例说STM32F7高速缓存——Cache一致性问题(三) 为了说清楚这个问题,我特意翻出了压箱底的那本杜春雷老师的《ARM...
  • cache详解

    万次阅读 2014-09-05 15:08:43
    Cache是我们经常关心的话题,K6-Ⅲ的推出引出了种全新的缓存结构即Tri-level Cache设计思想。... 所谓Cache即高速缓冲存储器,它位于CPU与主存即DRAM(Dynamic RAM 动态存储器)之间,是通常由SRAM(Static
  • CPU基础知识之Cache介绍

    千次阅读 2020-07-31 17:00:07
    Cache就是CPU缓存,它是位于CPU和内存之间的临时存储器。CPU在读取数据进行计算的时候,首先是从内部的缓存中查找需要的数据,如果有,可以最短时间最快速度交付CPU。但是如果没有找到,CPU就会提出“要求”经过缓存...
  • cache机制

    万次阅读 2012-08-10 22:27:08
    cache机制 ... ...在阅读文章前,您应该具备基本的存储器层次...要详细了解cache基本原理,可以参考本书《深入理解计算机系统》中存储器体系结构章:     带着疑问来看文章,cache对于程序员是不可见的,它完全
  • CPU Cache 机制以及 Cache miss

    千次阅读 2019-06-11 11:09:16
    CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存。 CPU要访问的数据在Cache中有缓存,称为“命中” (Hit...CPU访问它的速度介于寄存器与内存之间(数量的差别)。实现Cache的花费介于寄...
  • 编程基础(四)——cache

    千次阅读 2019-05-04 22:29:59
    、概述 二、原理 2.1 局部性原理(principle of locality) 2.2 Memory Hierarchy 2.3 性能评估 三、cache的基本要素 3.1 cache的组成 3.1.1利用hash表理解cache参数和行为 3.2 cache的分类 3.3cacheline...
  • cache 和 buffer的区别

    2011-12-07 22:26:50
    Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache...Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L
  • 全栈必备 缓存cache

    千次阅读 2016-10-07 17:02:26
    缓存——cache,是种挺复杂的技术,除了应用场景之外,更进一步,还要理解命中,Cache Miss,存储成本,索引成本,失效,替代策略的诸多概念,从而了解缓存算法,真正的掌握缓存技术。
  • 利用Cache分析工具 提高Cache利用率

    千次阅读 2011-11-12 19:44:32
    Cache的相关知识 二、TI DSP上的Cache结构 三、CCS Cache分析工具 四、实例 五、总结   Cache的相关知识 1、引入Cache的必要性   随着CPU主频的提升,带动系统性能的改善,但系统...
  • TLB和Cache

    2012-09-06 14:10:15
    TLB和Cache  2012-09-04 00:45:16| 分类: RHCA_442 |字号 订阅 ...)TLB ...TLB是个内存管理单元用于改进虚拟地址到物理地址转换速度...TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访
  • TLB和CACHE

    千次阅读 2011-08-26 13:16:39
    转自http://blog.csdn.net/hangbing0203/article/details/5600759 )TLB 1)TLB的概述 TLB是个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存. TLB是位于内存中的页表的cache,如果没有TLB
  • cache性能优化总结

    万次阅读 2018-01-12 19:00:43
    cache性能优化总结
  • cpu性能探究-Linux Cache机制

    千次阅读 2014-10-28 14:16:18
    要详细了解cache基本原理,可以参考本书《深入理解计算机系统》中存储器体系结构章:     带着疑问来看文章,cache对于程序员是不可见的,它完全是由硬件控制的,为什么在linux内核中还有cache.h这个头文件,...
  • buffer cache 深度解析+

    千次阅读 2012-04-19 15:46:56
     本文首先详细介绍了oracle中buffer cache的概念以及所包含的内存结构。然后结合各个后台进程(包括DBWRn、CKPT、LGWR等)深入介绍了oracle对于buffer cache的管理机制,并详细解释了oracle为什么会采用现在的管理...
  • cache 的一点理解

    千次阅读 2016-09-22 20:13:42
     所谓Cache即高速缓冲存储器,它位于CPU与主存即DRAM(Dynamic RAM 动态存储器)之间,是通常由SRAM(Static RAM 静态存储器)构成的规模较小但存取速度很快的存储器。    目前计算机主要使用的内存为DRAM...
  • cpu cache 学习

    千次阅读 2012-05-22 10:06:36
    在2004年写的篇文章x86汇编语言学习手记(1)中,曾经涉及到gcc编译的代码默认16字节栈对齐的问题。之所以这样做,主要是性能优化方面的考虑。  大多数现代cpu都one-die了l1和l2cache。对于l1 cache,大多是write ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,176
精华内容 18,470
关键字:

一级cache位于