buff cache 过高和buff的区别

wuzhongjie 的BLOG
用户名:wuzhongjie
文章数:132
评论数:149
访问量:227217
注册日期:
阅读量:5863
阅读量:12276
阅读量:346093
阅读量:1046115
51CTO推荐博文
&Page cache和buffer cache到底有什么区别呢?很多时候我们不知道系统在做IO操作的时候到底是走了page cache还是buffer cache?其实,buffer cache和page &cache是Linux中两个比较简单的概念,在此对其总结说明。
Page cache是vfs文件系统层的cache,例如 对于一个ext3文件系统而言,每个文件都会有一棵radix树管理文件的缓存页,这些被管理的缓存页被称之为page cache。所以,page cache是针对文件系统而言的。例如,ext3文件系统的页缓存就是page cache。Buffer cache是针对设备的,每个设备都会有一棵radix树管理数据缓存块,这些缓存块被称之为buffer cache。通常对于ext3文件系统而言,page cache的大小为4KB,所以ext3每次操作的数据块大小都是4KB的整数倍。Buffer cache的缓存块大小通常由块设备的大小来决定,取值范围在512B~4KB之间,取块设备大小的最大公约数。具体关于buffer cache的块大小问题可以参见我的另一篇博文《》。
这里我们可以通过一个小实验来观察一下buffer cache和page cache的差别。运行top命令,我们可以看到实验机器当前内存使用情况:
可以看出内存总容量为16GB左右,page cache用了将近10GB(3796K),buffer cache用了300MB(303796K),其余6GB(6255076K)空闲剩余。在这种情况下,如果对设备dm0进行裸盘写操作,即运行如下命令:
dd if=/dev/zero of=/dev/dm0 count=4096
那么,我么可以通过top命令发现,buffer cache的容量越来越大,空闲内存越来越少,相当一部分内存被buffer cache占用,并且在IO操作的过程中发现bdi(flush-254:176)线程在繁忙的进行数据回刷操作。
经过一段时间以后,大约6GB(6401432KB)的内存被buffer cache占用,89MB(89312KB)内存空闲,其余大约10GB(KB - 6401432KB)的内存还是被page cache占用。通过这个实验,可以说明对于裸盘的读写操作会占用buffer cache,并且当读写操作完成之后,这些buffer cache会归还给系统。为了验证page cache的占用情况,我做了文件系统级的读写操作,运行如下命令进行文件系统写操作:
cp /dev/zero ./test_file
这是一次文件拷贝操作,因此会采用page cache对文件数据进行缓存。通过top工具我们可以看出在数据拷贝的过程中,page cache的容量越来越大,空闲内存数量急剧下降,而buffer cache保持不变。
拷贝一定时间之后,空闲内存将为1.9GB(1959468KB),文件系统page cache增长为将近14.5GB(KB & 235108KB),buffer cache维持在235MB左右(235108KB)。
由此我们可以得出,page cache和buffer cache最大的差别在于:page cache是对文件数据的缓存;buffer cache是对设备数据的缓存。两者在实现上差别不是很大,都是采用radix树进行管理。
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
15:16:28 07:40:36 22:29:37 09:23:52linux free命令中buffer与cache的区别
linux free命令中buffer与cache的区别
& & & & & & & & & & total & & & & & & used & & & & & free & & shared & buffers & & cached
Mem: & & & 1025204 & & 981636 & & &43568 & & & & &0 & & &38244 & & 387808
-/+ buffers/cache: & & & 555584 & & &469620
Swap: & & &1931256 & &162948 & & &1768308 & &
也可以通过$watch free看到动态信息
以上为free命令的输出内容,从中可以得到当前系统内存使用情况.
系统的可用内存应该看第二行数据,
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached
因为第一行的used包含了系统使用的buffer及cache,而free则没包含buffer及cache,
这部分也是可以使用的部分.
如上所示555584为真正的系统使用内存情况,而469620为系统真正的可用内存情况.
下面介绍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.
buffer: & &
& &缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据
的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据
时,速度快的设备的操作进程不发生间断。
& & & &高速缓存,是位于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。
& & & &当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,
这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会
自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。
其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有
内存可用。如果你希望手动去释放Cache Memory也是有办法的。
如何释放Cache Memory(缓存内存), 用下面的命令可以释放Cache Memory:
To free pagecache
& & &$ echo 1&/proc/sys/vm/drop_caches
To free dentries and inodes: & &
& & &$ echo 2&/proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
& & &$ echo 3&/proc/sys/vm/drop_caches
注意,释放前最好sync一下,防止丢失数据。
free命令中的buffer和cache:(它们都是占用内存):
& & & &buffer : 作为buffer cache的内存,是块设备的读写缓冲区
& & & &cache: 作为page cache的内存, 文件系统的cache
作者 yef.zhu
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'swap,buff,cache三个概念的区别 - 职业游民的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
swap,buff,cache三个概念的区别
& 11:10:56
/ 个人分类:
swap是交换空间,通过将数据临时交换出主内存来提高资源利用率buff和cache的主要区别是在控制和速度上,buff的控制相对简单,是对数据流缓冲,将需要的数据流临时缓冲在buff里,以降低低速设备对整体的影响。一般都是对大量的数据交换进行缓冲
cache是对高速交换进行缓冲,需要一些额外的算法来提高效率,比如读取命中之类的,一般相对较小,速度很快,大多是对指令的临时存储

我要回帖

更多关于 buff cache 的文章

 

随机推荐