回过头再看 计算机体系结构2----缓存cache
来源:互联网 发布:数控机床数据采集 编辑:程序博客网 时间:2024/05/13 06:57
什么是缓存(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 nsL2 Cache~10-20 cycles~3-7 nsL3 Cache~40-45 cycles~15 ns跨槽传输 ~20 ns内存~120-240 cycles~60-120ns就像数据库cache一样, 获取数据时首先会在最快的cache中找数据, 如果没有命中(Cache miss) 则往下一级找, 直到三层Cache都找不到,那只要向内存要数据了. 一次次地未命中,代表取数据消耗的时间越长.
0 0
- 回过头再看 计算机体系结构2----缓存cache
- 回过头再看 计算机体系结构1----CPU上下文切换
- 回过头再看 计算机体系结构3----内存屏蔽和内存栅栏
- 回过头再看 计算机体系结构4----中断和性能
- 回过头再看 计算机体系结构5----并发和并行
- 回过头再看 计算机体系结构6----编译器指令重排序--导致并发执行出现问题
- 计算机体系结构--Cache
- 回过头雨天过后
- HTTP头 Pragma:no-cache 缓存来源
- 使用header头设置缓存控制头Cache-control
- 计算机体系结构4_分级缓存
- 计算机体系结构6_缓存结构
- HTTP消息头中的“Cache-control”控制网页的缓存
- 回过头,在看asp完成购物车??
- 缓存cache
- 缓存 Cache
- 缓存 Cache
- 缓存--cache
- 各种协议
- perl学习笔记-----------------------(6)
- 微信6.0之后,分享接口使用
- 循环结构中break、continue、return的区别
- Android 之在View以及ViewGroup中Touch事件传递
- 回过头再看 计算机体系结构2----缓存cache
- js入门小练习:网页计算器
- 用css3实现各种图标效果
- 游戏服务器压力测试总结
- enum应用示例
- android开发笔记之解析XML
- Java中如何将int 类型转换为 Long类型
- Flume单机安装并且测试
- RecycleView 实现复杂首页布局三种方式