回过头再看 计算机体系结构2----缓存cache

原创 2016年09月28日 09:52:48
什么是缓存(cache)?
     CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便。
 

为什么有缓存?
     众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责读写数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢一点儿. 由于内存的发展都到技术及成本的限制, 现在获取内存中的一条数据大概需要200多个CPU周期(CPU cycles), 而CPU寄存器一般情况下1个CPU周期就够了.所以我们需要缓存技术。也就是在内存和CPU之间加入多层缓存   

缓存是为了解决CPU速度和内存速度的速度差异问题那么把数据放至离CPU更近的缓存, 会给程序带来很大的速度提升所以内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,缓存的读取速度要比内存快很多。
      例如, 做一个循环计数, 把计数变量放到缓存里,就不用每次循环都往内存存取数据了.这样就性能很好,
由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。
     内存与CPU的速度相差太远, 于是CPU设计者们就给CPU加上了缓存(CPU Cache),同样网页浏览器为了加快速度,会在本机存缓存以前浏览过的数据; 传统数据库或NoSQL数据库为了加速查询, 常在内存设置一个缓存, 减少对磁盘(慢)的IO. 

但是缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
     这里要特别指出的是:
     1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,相当于浪费了去缓存找的时间,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
     2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的。也就是每次都要复制新的




[引申]
CPU缓存
下面是CPU Cache的简单示意图

随着多核的发展, CPU Cache分成了三个级别: L1, L2, L3. 级别越小越接近CPU, 所以速度也更快, 同时也代表着容量越小. L1是最接近CPU的, 它容量最小, 例如32K, 速度最快,每个核上都有一个L1 Cache(准确地说每个核上有两个L1 Cache, 一个存数据 L1d Cache, 一个存指令 L1i Cache). L2 Cache 更大一些,例如256K, 速度要慢一些, 一般情况下每个核上都有一个独立的L2 Cache; L3 Cache是三级缓存中最大的一级,例如12MB,同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个L3 Cache.

从CPU到 大约需要的CPU周期 大约需要的时间(单位ns)
寄存器 1 cycle  
L1 Cache ~3-4 cycles ~0.5-1 ns
L2 Cache ~10-20 cycles ~3-7 ns
L3 Cache ~40-45 cycles ~15 ns
跨槽传输   ~20 ns
内存 ~120-240 cycles ~60-120ns
就像数据库cache一样, 获取数据时首先会在最快的cache中找数据, 如果没有命中(Cache miss) 则往下一级找, 直到三层Cache都找不到,那只要向内存要数据了. 一次次地未命中,代表取数据消耗的时间越长.

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Vincent_ceso/article/details/52687948

cache结构与工作原理

在经历N次的阅读之后,终于明白了cache的结构和工作原理。 首先,要想理解cache,先理解内存。内存的简单表示如下图,内存里面的内容的查找是根据地址来进行的,也就是说内存包含两点①内存的地址②内存...
  • baidu_35679960
  • baidu_35679960
  • 2017-11-23 14:44:55
  • 1091

深入理解计算机系统 1.5 缓存很重要

我们从这个简单的例子中看到的很重要的一点是,系统花了大量时间来把信息从一个地方移动到另一个地方。hello程序里的机器指令最初保存在硬盘上。当程序被加载的时候,它们被复制进内存中。当处理器运行程序的时...
  • l294265421
  • l294265421
  • 2015-09-05 15:04:18
  • 433

计算机的存储器层次结构以及一二三级缓存的区别

hibernate一级缓存和二级缓存的区别: 主要的不同是它们的作用范围不同。 一级缓存是session级别的。 也就是只有在同一个session里缓存才起作用,当这个session关闭...
  • hujutaoseu
  • hujutaoseu
  • 2017-02-24 15:37:34
  • 816

浅谈CPU三级缓存和缓存命中率

浅谈CPU三级缓存和缓存命中率
  • Li_Ning_
  • Li_Ning_
  • 2016-06-24 22:45:32
  • 3106

计算机体系结构——存储体系

本章重点是页式虚拟存储器映象及地址变换过程;LRU,FIFO的替换算法;LRU的堆栈分析过程;Cache组相联地址映象和LRU块替换;虚存,Cache的性能分析,要求达到综合应用的水平。本章是重点章。...
  • iwainfo
  • iwainfo
  • 2004-12-14 17:29:00
  • 10644

计算机体系结构--Cache

cache cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储...
  • jankin6
  • jankin6
  • 2017-09-12 19:32:37
  • 194

cache为什么分为i-cache和d-cache以及Cache的层次设计

从两个方面来回答:  一方面是cache的行为。Icache大多都是顺序取指,碰到分支指令也会跳转,而Dcache访问的模式变化比较大.也就是前者所说的pattern的问题.指令只有读和refill没...
  • bytxl
  • bytxl
  • 2015-12-12 15:53:08
  • 8445

多核DSP C6678下CCS5.2 环境下分析L1P,L1D,L2 cache的方法

1.ccs5.2---Tools下的Prolife工具中,提供了L2,L1D的分析 2.对于L1 P \ccsv5\tools\compiler\c6000\doc下面的spru18...
  • feixiaku
  • feixiaku
  • 2013-03-01 22:16:55
  • 2947

计算机体系结构6_缓存结构

一,缓存结构         下图为一个n-way set-associative cache 结构图:                                                ...
  • u012259202
  • u012259202
  • 2013-11-07 21:16:35
  • 3109

cache机制

cache机制 转载地址:http://www.cnblogs.com/liloke/archive/2011/11/20/2255737.html 在阅读文章前,您应该具备基本的...
  • orange_os
  • orange_os
  • 2012-08-10 22:27:08
  • 8606
收藏助手
不良信息举报
您举报文章:回过头再看 计算机体系结构2----缓存cache
举报原因:
原因补充:

(最多只允许输入30个字)