linux page buffer cache深入理解
发布时间:2012-11-14 10:02:43 作者:佚名 我要评论
Page cache和buffer cache一直以来是两个比较容易混淆的概念,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手
Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手。
Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
补充一点,在文件系统层每个设备都会分配一个def_blk_ops的文件操作方法,这是设备的操作方法,在每个设备的inode下面会存在一个radix tree,这个radix tree下面将会放置缓存数据的page页。这个page的数量将会在top程序的buffer一栏中显示。如果设备做了文件系统,那么会生成一个inode,这个inode会分配ext3_ops之类的操作方法,这些方法是文件系统的方法,在这个inode下面同样存在一个radix tree,这里会缓存文件的page页,缓存页的数量在top程序的cache一栏进行统计。从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache,仅此而已。
buffer 与cache 的区别
A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use.
更详细的解释参考:Difference Between Buffer and Cache
对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣,请参考:What is Shared Memory?
cache 和 buffer的区别:
Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache.
Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
Free中的buffer和cache:(它们都是占用内存):
buffer :作为buffer cache的内存,是块设备的读写缓冲区
cache:作为page cache的内存, 文件系统的cache
如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小。
相关文章
deepin20怎么使用画板打开图片?deepin20系统想要打开图片,该怎么使用画板打开图片呢?下面我们就来看看deepin画板打开图片的两种方法,需要的朋友可以参考下2020-10-03
deepin20默认浏览器怎么设置?eepin20系统想要设置默认浏览器,该怎么设置呢?下面我们就来看看deepin添加默认浏览器的技巧,需要的朋友可以参考下2020-10-03
deepin系统怎么设置屏幕分辨率?deepin系统不是很清晰,想要设置分辨率,该怎么设置分辨率呢?下面我们就来看看deepin分辨率的设置方法,需要的朋友可以参考下2020-09-29
deepin20系统字体怎么设置?deepin20系统字体太小,想要设置大一些,该怎么调整字体的大小呢?下面我们就来看看deepin终端字体大小的设置方法,需要的朋友可以参考下2020-09-27
鼠标怎么设置为左手?deepin20系统中,默认鼠标是右手模式,但是用习惯了左手,想要设置为左手模式,该怎么操作呢?下面我们就来看看deepin20左手鼠标设置方法,需要的朋友2020-09-25
cpu主频怎么看?想要查看cpu主频,在windows系统下很方便查看,那么deepin20系统该怎么操作呢?我们今天就来介绍两种deepin20查看CPU主频的技巧,需要的朋友可以参考下2020-09-24
deepin20网关地址怎么设置?deepin20系统想要设置网关地址,该怎么设置呢?下面我们就来看看deepin网关地址的修改方法,需要的朋友可以参考下2020-09-23
deepin20怎么设置图标的排列方式?deepin20中想要设置图标的显示方式,有列表视图和图标视图,该怎么设置为图标视图呢?下面我们就来看看deepin图标视图设置方法,需要的朋2020-09-23
deepin20窗口最小化魔灯效果怎么设置?deepin20系统窗口最小化是有一些特效的,想要添加魔灯效果,该怎么实现呢?下面我们就来看看详细的教程,需要的朋友可以参考下2020-09-22
deepin20任务栏透明度怎么设置?电脑任务栏透明度是可以调节的,该怎么调节呢?下面我们就来看看deepin调整任务栏透明度的技巧,需要的朋友可以参考下2020-09-21
最新评论