Cache和命中率

Cache的工作原理

Cache的工作原理是基于程序访问的局部性

对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然地具有时间上集中分布的倾向。

数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性

根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据主存调入这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器 (Cache)。

系统正是依据此原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。

CPU对存储器进行数据请求时,通常先访问Cache。由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率。即CPU在任一时刻从Cache中可靠获取数据的几率。

命中率越高,正确获取数据的可靠性就越大。一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地增长。

只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache的命中率还是相当高的。

一般规定Cache与内存的空间比为4:1000,即128kB Cache可映射32MB内存;256kB Cache可映射64MB内存。在这种情况下,命中率都在90%以上。至于没有命中的数据,CPU只好直接从内存获取。获取的同时,也把它拷进 Cache,以备下次访问

(1)“Cache”是什么

Cache(即高速缓冲存储器(Cache Memory),是我们最常听到的一个词了。

(2)为什么要设计Cache

我 们知道,电脑的内存是以系统总线的时钟频率工作的,这个频率通常也就是CPU的外频(对于雷鸟、毒龙系列的处理器,由于在设计采用了DDR技术,CPU工 作的外频为系统总线频率的两倍)。但是,CPU的工作频率(主频)是外频与倍频因子的乘积。这样一来,内存的工作频率就远低于CPU的工作频率了。这样造 成的直接结果是:CPU在执行完一条指令后,常常需要“等待”一些时间才能再次访问内存,极大降了CPU工作效率。在这样一种情况下, Cache就应运 而生了!

(3)Cache是什么

Cache是一种特殊的存储器,它由Cache 存储部件和Cache控制部件组成。Cache 存储部件一般采用与CPU同类型的半导体存储器件,存取 速度比内存快几倍甚至十几倍。而Cache控制器部件包括主存地址寄存器、Cache 地址寄存器,主存—Cache地址变换部件及替换控制部件等。至于 它们各自又是怎样工作的、有何作用等等,就没有必要做进一步的研究,知道一般 Cache分为L1 Cache(其中又分为数据Cache、代码Cache)、L2 Cache就行。

(4)Cache是怎样工作的

我 们知道,CPU运行程序是一条指令一条指令地执行的,而且指令地址往往是连续的,意思就是说CPU在访问内存时,在较短的一段时间内往往集中于某个局部, 这时候可能会碰到一些需要反复调用的子程序。电脑在工作时,把这些活跃的子程序存入比内存快得多的Cache 中。CPU在访问内存时,首先判断所要访问 的内容是否在Cache中,如果在,就称为“命中”,此时CPU直接从Cache中调用该内容;否则,就称为 “不命中”,CPU只好去内存中调用所需的子程序或指令了。CPU不但可以直接从Cache中读出内容,也可以直接往其中写入内容。由于Cache的存取速率相当快,使得CPU的利用率大大提高,进而使整个系统的性能得以提升。

(5)Cache的应用

早 在486时代,主板上就设计了Cache插槽,用户可以根据需要自己配置Cache;586级的CPU芯片中已集成了部分Cache,同时还保留了 Cache插槽供用户扩充,而到了Pentium Ⅱ时代后,Cache已全部集成到了CPU芯片中,主板上再也没有Cache插槽。现在比较流行的 CPU芯片中一般集成了至少16KB的代码Cache 和16KB的数据Cache(作为L1 Cache),以及至少64KB的L2 Cache。

有的朋友可能会问,既然Cache的作用如此重要,那为么不把电脑的全部内存都变为Cache,那样不是更好吗?其实对于这个问题,撇开价格因素,单就其实用性而言也是没有必要的,毕竟,电脑在执任务时,那种使用频率非常高的子程序或指令不是很多的,因此那些使用频率不太高的内容只须保存在速度相对较低的内存中就可以了!

在实际应用中,Cache,尤其是L2Cache对系统的性能,特别是对浮点运算能力有较大的影响。而我们知道,大部分游戏的流畅运行需要频繁的浮点运算。因此,CPU运行游戏的性能的好坏L2Cache的容量与速度有很大关系。

CACHE中文名称是高速缓冲存储器,是法文一个单词,具体什么意思我忘了,大概是隐蔽的意思吧

它是一个相对于内存来说容量很小,速度贼快,用静态存储器实现的存储系统,解决内存跟不上CPU运算速度的问题

工作原理是把CPU最近可能用到的少量信息,可能是数据,也可能是指令,从内存复制到CACHE中,是CPU能够更高速的访问这些数据,提高工作效率

评 价CACHE性能关键的指标是CACHE的命中率。因为CACHE的容量远远小于内存,它只可能存放内存的一部分数据。CPU自然是先访问CACHE,再 访问主存,如果数据在CACHE中为命中,在不在内存中为不命中,这就有个比例问题,这个比例就是命中率,影响命中率的因素有一下几个

1. CACHE 的容量,大一些好

2. CACHE 与主存储器每次交换信息的单位量(Cache Line Size)适中

3. CACHE 不同的组织方式,多路组相联更好

4. CACHE 的多级组织可提高命中率

5. CACHE 装满后的换字算法

再解释一下多级CACHE的问题,简单说一级CACHE是对内存的映像,能够提高CPU速度,那么再加一级CACHE对上一级CACHE映像就能够再次提高效率。目前CPU通常是2级CACHE,就是L1 和L2

Cache 就是 高速缓存的 意思

计算机中很多设备都有Cache

比如CPU,硬盘,光驱等等

下 面我们就来说说Cache的用途 CPU处理数据的时候是先从 L1Cache 中 寻找 如果L1 Cache中没有所需要的数据CPU就从 L2 Cache 中寻找!如果L2 Cache中也没有所需要的数据那么CPU就会从内存中直接调用!但是内存的速度比Cache的速度低很多!如果让CPU频繁的从内存中直接调用数据,势 必会造成处理速度极其缓慢!即使 CPU的运行速度再快也是没有用的!如果我们把CPU中的Cache增加一倍那么CPU就很有可能从多出的那一倍 Cache中寻找到所需要的数据,这就是您所指的命中率!

知道了什么叫命中率我们就不难发现 如果是相同内核的CPU Cache的容量越大 CPU的运算性能就会越好!

时间: 2024-10-09 21:28:50

Cache和命中率的相关文章

L1 Cache, L2 Cache读取命中率与时钟周期计算

CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存.从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%.也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取.由于不能准确预测将要执行的数据,读取L2的命中率也在80%左右(从L2读到有用的数据占总数据的16%).那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了. 假如CPU从L1,L

使用valgrind检查cache命中率

Valgrind为一个debugging 和 profiling的工具包,检查内存问题只是其最知名的一个用途.今天介绍一下,valgrind工具包中的cachegrind.关于cachegrind的具体介绍,请参见valgrind的在线文档http://www.valgrind.org/docs/manual/cg-manual.html 下面使用一个古老的cache示例: #include <stdio.h> #include <stdlib.h> #define SIZE 10

oracle命中率模型计算

命中率模型是在owi之前比较常用的一种诊断性能问题的方法,通过命中率的计算,发现系统中的一些设置是否合理,当命中率不高的时候,通过调整一些参数和设置,提高命中率,有效的提高系统的性能和吞吐量.但当系统的命中率很高的时候,系统的性能问题和瓶颈就无法使用命中率模型来有效的定位,因为命中率说到底是一种平均值,而均值会隐藏系统的问题,这里暂且讨论oracle系统上几个相关的命中率的计算.另外会再讨论owi模型. 在awi的报告中,首先是oracle实例和snapshot信息,然后就是report sum

关于CPU Cache:程序猿需要知道的那些

天下没有免费的午餐,本文转载于:http://cenalulu.github.io/linux/all-about-cpu-cache/ 先来看一张本文所有概念的一个思维导图: 为什么要有CPU Cache 随着工艺的提升最近几十年CPU的频率不断提升,而受制于制造工艺和成本限制,目前计算机的内存主要是DRAM并且在访问速度上没有质的突破.因 此,CPU的处理速度和内存的访问速度差距越来越大,甚至可以达到上万倍.这种情况下传统的CPU通过FSB直连内存的方式显然就会因为内存访问的等待, 导致计算

查看library_cache 库缓冲区的命中率

关于library cache的命中率:    SQL> desc V$librarycache    NAMESPACE                                        VARCHAR2(64)    GETS                                                NUMBER    GETHITS                                             NUMBER    GETHITRAT

【Oracle 优化】Oracle数据库提高命中率及相关优化

本文是关于Oracle数据库调试与优化方面的文章,主要介绍Oracle数据库中命中率相关的问题,包括不同的算法之间性能的比对. 关于Oracle中各个命中率的计算以及相关的调优 1)Library Cache的命中率: .计算公式:Library Cache Hit Ratio = sum(pinhits) / sum(pins) SQL>SELECT SUM(pinhits)/sum(pins) FROM V$LIBRARYCACHE; 通常在98%以上,否则,需要要考虑加大共享池,绑定变量,

合理计划 dictionary cache 大小

[数据字典缓冲区(Data Dictionary Cache)  ] 用于存放Oracle系统管理自身所需要的所有信息,包括登录的用户名.用户对象.权限等. 查看 data dictionary cache 的命中率    SQL> desc  v$rowcache;Name                                      Null?    Type ----------------------------------------- -------- ---------

[z]计算机架构中Cache的原理、设计及实现

前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构.指令结构.信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是与CPU/内存之间的存取速度有关. 若CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力. 如500MHz的PⅢ,一次指令执行时间为2ns,与其相配的内存(SDRAM)存取时间为10ns,比前者慢5倍,CPU和PC的性能怎么发挥出来? 如何减少CPU与内存之间的速度差异?有4种办法:

[转载]Buffer cache的调整与优化

Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的free buffer waits事件.下面将具体描述Buffer Cache的作用.调整与优化. 一.SGA的所有组件 从动态视图v$sga_dynamic_components获取SGA的相关信息 SELECT component, current_size, min_size FROM v$sga_dynamic_components; COM