PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

固态硬盘傻傻问系列(第8期:缓存是什么和有什么作用?)

  [复制链接]
跳转到指定楼层
1#
James007ss 发表于 2012-3-25 00:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:23506|回复数:19
本帖最后由 James007ss 于 2012-4-13 21:19 编辑

傻傻问来到第8期,这期开始跟大家聊缓存这话题。那么第一个问题肯定是缓存究竟是什么,它又有什么作用?

其实在PC系统中,大家都知道的内存就是最常见的缓存硬件,而聊CPU和开核时经常会提到L1、L2多大,开不开L3等等,这些L1、2、3就是CPU内置的几级高速缓存,不管是高速缓存、内存还是硬盘上配带的缓存,它们全都是PC系统的缓存之一。

那为什么要有这些缓存呢?我相信大家肯定都知道,在PC上,硬盘是用来储存数据的,而CPU是用来处理数据的。那么很明显,CPU要处理的数据,肯定来自硬盘。看过前面几期傻傻问,大家对硬盘的数据传输速度应该都有个谱了,那么单靠硬盘是不是能够满足CPU处理数据时,对数据传输速度的要求呢?先看看下面这张图。

这上面Memory是内存L1、2、3 Cache则是CPU内置的3级高速缓存,很多喜欢玩超频的朋友都应该挺熟悉这种图。上面这图里,内存是距离CPU运算核心最远的,而L1是最接近的。以读取速度为例,L1即一级高速缓存的速度高达12万MB/s以上,别说硬盘,连内存都望尘莫及,这个速度可以代表这款CPU在工作时,获得它所需数据的速度。那么大家应该想像得到了,假如没了这些高速缓存和内存,CPU需要直接从硬盘中取得数据,那我们全都得等疯了。

可以简单的算一下,假如CPU本来从一级缓存取得数据要花1秒,那么直接从硬盘取得同样的数据,就要起码花600秒(假设硬盘是SSD,而且是持续读取数据,速度至少200MB/s),1秒变成10分钟,我们什么都别指望干,净干等了。

当然上面我只是做了个比喻来方便大家理解。但由此可见,CPU处理速度和硬盘传输速度存在巨大的鸿沟,如果只靠硬盘,CPU即使是再厉害的绝顶高手,也是个永远几乎没饭吃的人,任他武功再高,也只能当东方必败而不是东方不败。

为了解决这问题,电脑系统上才会出现了缓存这种东西。缓存,从字面理解就是缓冲存储。怎么个缓冲法呢?其实不难想像得到,既然硬盘慢,而CPU快,那我们就把CPU会需要的数据,先找个传输速度足够快的东西放起来,CPU需要时,不必从硬盘拿,直接从这个当缓冲的东西里拿,因为它足够快,CPU就不用浪费时间等了。不过前面看到,CPU和硬盘的差距实在太大,单只有1个缓存还是不够,因为越快的缓存,容量越难以造得大,而且成本会很高。那怎么办?就是加多几个慢点的,一级一级来呗,每多一级,缓存速度慢一些,但容量也大一些,那么就可以既有足够大的容量来存放数据,又不会对速度有太大的影响了。

缓存只是在电脑工作时,用来临时存放数据,说白了,这货就是个临时工,你关机了,就不用它干活了。所以现在所有的缓存装置,都使用无法在断电时保存数据的元件,因为这样最符合成本效益。

现在大家应该都知道什么是缓存,还有它大概是用来干些什么的了。这期先聊到这,下期我们再聊聊缓存在存储系统上有些什么作用,存储系统的缓存又有哪几种等等这些问题。


固态硬盘傻傻问系列(第7期:用SSD的PC死机该怎么做)

固态硬盘傻傻问系列(第9期:系统缓存设置对性能的影响)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
2#
donnyng 发表于 2012-3-25 00:38 | 只看该作者
cache buffer两个啥区别?
3#
mlpas 发表于 2012-3-25 00:44 | 只看该作者
本帖最后由 mlpas 于 2012-3-26 13:32 编辑

先顶再看,是美德`



好的,好好学习,天天向上,期期进步~!

点评

希望你能编辑补充些意见,技术区一般不允许这么水的回复。  发表于 2012-3-25 10:32
4#
James007ss  楼主| 发表于 2012-3-25 00:58 | 只看该作者
donnyng 发表于 2012-3-25 00:38
cache buffer两个啥区别?

真考倒我了,E文不好,这2个单词,技术上有什么分别,一时我也搞不清楚。

努力翻下在线词典,可能cache多数指某个具体的事物,而buffer则指一些特定作用的范围?
5#
石头 发表于 2012-3-25 03:22 | 只看该作者
James007ss 发表于 2012-3-25 00:58
真考倒我了,E文不好,这2个单词,技术上有什么分别,一时我也搞不清楚。

努力翻下在线词典,可能cache ...

网上搜的:

Buffer和Cache的区别
  buffer与cache操作的对象就不一样。
  buffer(缓冲)是为了提高内存和硬盘(或其他I/0设备)之间的数据交换的速度而设计的。
  cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计,也就是平常见到的一级缓存、二级缓存、三级缓存。
  cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存之间增加了cache,它的速度比内存快,但是造价高,又由于在cpu内不能集成太多集成电路,所以一般cache比较小,以后intel等公司为了进一步提高速度,又增加了二级cache,甚至三级cache,它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的。
  缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。
  修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。--两者都是RAM中的数据。
  简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
  buffer是由各种进程分配的,被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。
  cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提高系统性能。
6#
我叫Jonn.yR 发表于 2012-3-25 04:59 | 只看该作者
期待下一期的傻傻问,想知道缓存工作原理和流程。
7#
neeyuese 发表于 2012-3-25 09:35 | 只看该作者
缓冲你可以理解为把一些难以处理的数据进行“打包”之类后处理,进而提高效率。
缓存你可以理解为把一些经常处理的数据进行“预备”之类的处理,进而提高效率。
8#
我叫Jonn.yR 发表于 2012-3-25 10:53 | 只看该作者
外部设备的存储速度受什么影响呢?就像内存和缓存,缓存那么快的速度,内存能不能也那么快?是总线限制么?
9#
James007ss  楼主| 发表于 2012-3-25 11:28 | 只看该作者
本帖最后由 James007ss 于 2012-3-25 11:30 编辑
我叫Jonn.yR 发表于 2012-3-25 10:53
外部设备的存储速度受什么影响呢?就像内存和缓存,缓存那么快的速度,内存能不能也那么快?是总线限制么? ...


http://bbs.pceva.com.cn/thread-28211-1-1.html

关于外部存储设备如硬盘等,速度通常会受接口、存储介质本身性能等等因素影响,你可以参考下我以前关于异步颗粒强开同步的文章,可能会有所帮助。而至于内存有没有可能达到高速缓存那么快,至少目前我们用的电脑上还是不可能的,我前面有说,容量越大,速度就越低,速度越高,容量通常也越小,速度和容量,某方面来说是个不可调和的矛盾。至少短时间内还无法造出速度够高而容量又够大而且符合成本效益的产品来。以后能不能做到,我不是内行,这就说不清了。

我们现在常用的内存是DDR3 SDRAM,相关技术特性,你可以参考下WIKI,中文的资料应该还是可以看看的,地址:
http://zh.wikipedia.org/wiki/DDR3_SDRAM

而高速缓存,基本上就是SRAM,WIKI地址:
http://zh.wikipedia.org/wiki/%E9 ... 8%E5%82%A8%E5%99%A8
10#
mvp3 发表于 2012-3-25 12:05 | 只看该作者
期待下一篇解惑
小白路过

点评

谢谢支持,但也请注意下我在3楼的点评和版规。  发表于 2012-3-25 12:07
11#
donnyng 发表于 2012-3-25 19:33 | 只看该作者
石头 发表于 2012-3-25 03:22
网上搜的:

Buffer和Cache的区别

啊……说起linux的卸载,我装起ubuntu11,1一段日子,不知道为什么u盘插入时,一定要把u盘卸载,才能改写u盘上的东西,是和buffer设置的有关吗?
12#
as0607891266 发表于 2012-3-25 21:21 | 只看该作者
很好的文章 简单明了地说出了 缓存这东西的作用
13#
yanleiberg 发表于 2012-3-29 22:52 | 只看该作者
本帖最后由 yanleiberg 于 2012-3-29 10:35 编辑

Buffer是为了解决速度不同的两种I/O设备之间一次性数据传输时同步问题的。
Cache则是为了解决高速设备多次读取同一个数据时的命中率和延时问题的。


比如说你从大汽油桶(高速设备)里往矿泉水瓶子(低速设备)里面倒油,就这么直接倒很费力,因为你要尽量使汽油桶出油的速度和矿泉水瓶进油的速度保持一致。如果倒快了,油撒了,也就是低速设备(矿泉水瓶)的速度跟不上,数据丢失;如果倒慢了,那又浪费时间。

Buffer就是一个在矿泉水瓶上的漏斗,汽油桶先把漏斗灌满,然后就不用管漏斗了,漏斗往矿泉水瓶漏油是会和矿泉水瓶子完全同步,既不会浪费矿泉水瓶(低速设备)的速度也不会漏到外面,只要在漏斗里的油全漏光之前汽油桶再来把漏斗倒满就好了。

至于Cache,那就是一楼James所说的了。
当然cpu 里面的L1,L2,L3这些只是Cache的一种应用,还有其他地方需要Cache,比如网吧无盘工作站,比如BT上传。
Buffer则是在绝大多数外部存储设备上都有的,比如各种硬盘光驱打印机等等,软驱有没有我不记得了,如果没有那在实际使用时也会分配一块内存来做buffer。

个人理解,有不当请指正。

评分

参与人数 1活跃度 +10 收起 理由
James007ss + 10 比喻得很好

查看全部评分

14#
ELT 发表于 2012-3-30 11:09 | 只看该作者
算法和设备性能对缓存需求量也是有影响的吧
当缓存达到一定量之后,再加大缓存对性能影响就会越来越小了吧(假定缓存带宽不变)
15#
James007ss  楼主| 发表于 2012-3-30 11:14 | 只看该作者
ELT 发表于 2012-3-30 11:09
算法和设备性能对缓存需求量也是有影响的吧
当缓存达到一定量之后,再加大缓存对性能影响就会越来越小了吧 ...

你这里还必须定下缓存算法不变的条件,若算法改变,那就说不定了。
16#
EnergyStar 发表于 2012-4-6 13:08 | 只看该作者
yanleiberg 发表于 2012-3-29 22:52
Buffer是为了解决速度不同的两种I/O设备之间一次性数据传输时同步问题的。
Cache则是为了解决高速设备多次 ...

第一段对buffer的解释是整个帖子里最靠谱的。另外硬buffer通常是在接口处而不是设备本身实现的。
除此之外软buffer的应用非常多,不一定是针对某个具体设备,例如大多数编程语言的I/O标准库主要的输入和输出函数在实现时都是带buffer的。

至于cache,CPU上除了的L1、L2等各级高速缓存,在大多数体系结构中针对操作系统内页表机制的TLB也是由CPU控制的。
17#
YDestinyD98 发表于 2012-8-6 21:13 | 只看该作者
基本能看懂........
18#
l8427608 发表于 2012-8-7 11:45 | 只看该作者
技术贴~~~~~~   
19#
hf8313 发表于 2012-8-24 20:42 | 只看该作者
技术贴~~~~~~     
20#
kiQ 发表于 2012-12-31 10:43 | 只看该作者
CPU会需要的数据,cpu怎么知道我会要什么数据?^_^
L3 8m-20m,就算是20m也才一点点,难道是文件头?^_^
内存快比L1 L2 L3重要,硬盘和内存做交换,内存再和L1-L3做交换。

另超频后,机器会一卡一卡,像死机但有不死机的样子,是为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部