cache和buff和cache的区别

Buffer和cache的区别是什么?_百度知道
Buffer和cache的区别是什么?
uffer和cache是两个经常被混为一谈的概念。从直观上说,两者都具备改善系统 I/O 吞吐量的能力;而buffer往往是由用户程序知道并且与OS共享(换言之,用户程序需要分配一块内存,往往要比到需要时等待这些操作完成要节省时间;O,减少不必要的I&#47,并在主机和外设之间共享(例如网卡的DMAbuffer),或硬件,一次进行批量的操作(例如,预先读取;而cache的主要作用在于更好地利用局部性原理,并告诉OS这块内存将要用于某种操作),或由OS分配,用户程序不需要(多数情况下也没有办法)为其分配存储的机制,通常它在使用者,如用户程序看来是透明的,它属于提供cache的一方而不是其使用者,并放置于距离CPU较近的位置。buffer改善系统性能的主要原因是减少不必要的状态切换和设备I&#47,或者将写数据凑成一个整数之后再写)。最近几年引入的一些新概念,特别是Internetcache并不能用这种方法来区分。我认为最关键的区别其实在于,buffer主要作用是在于减少实际的I/O操作次数,即,将多次操作尽量合并成一次的成批操作,通常其中的数据在操作完成之后,buffer不会被继续使用。不过,这个区别主要是传统意义上的cache。由于制造工艺等个方面的原因,在使用者看来它通常不是透明的,这些内存往往属于控制内存的程序,如用户程序,或OS,而不是向其传递数据的OS,通常是很小的一部分;O,并且有效地降低状态切换导致的开销。还有一个比较显著的区别是,cache通常是硬件或OS提供。硬件实现的cache通常会只使用一小块(与主存相比)访问速度很快,但相对比较昂贵的存储部件;O吞吐量的原因也不尽相同。cache改善系统性能的主要原因是数据访问的局部性,即,通常应用程序在一段时间内操作的数据集的某个有限的部分,但是这两个概念是有区别的,其提高系统I&#47,系统中不同部件的速度往往是不一样的
采纳率:63%
网页里有。。]
1条折叠回答
为您推荐:
其他类似问题
您可能关注的内容
cache的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。posts - 268, comments - 13, trackbacks - 0, articles - 0
一、free命令[root@xen_202_12 /]# free -m&&&&&&&&&&&& total&&&&&& used&&&&&& free&&&& shared&&& buffers&&&& cachedMem:&&&&&&&&& 3072&&&&&& 2459&&&&&&& 612&&&&&&&&& 0&&&&&&& 207&&&&&& 1803-/+ buffers/cache:&&&&&&& 447&&&&&& 2624Swap:&&&&&&&& 1913&&&&&&&&& 0&&&&&& 1913
第2行:total 内存总数: 3072used 已经使用的内存数: 2459free 空闲的内存数: 612shared 当前已经废弃不用,总是0buffers: Buffer Cache内存数: 13220cached: Page Cache内存数: 2720160
关系:total = used + free
第3行:-/+ buffers/cache的意思:-buffers/cache 的内存数: 447 (等于第1行的 used - buffers - cached)+buffers/cache 的内存数: 2624 (等于第1行的 free + buffers + cached)注:此处的内存数在用上面式子计算后,在大小上有一点点出入(还不知道是什么原因)。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
第4行单独针对交换分区。
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(如read,write,getdents)的时间。
第2行(mem)的used/free与第3行(-/+ buffers/cache) used/free的区别:这两个的区别在于使用的角度.第2行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是612MB,已用内存是2059MB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.第3行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是可用的,因为buffer/cached是为了提高文件读取的性能而设,当应用程序要用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
如上例:7+1803
二、buffers与cached的区别:buffers是用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages。cached用来给文件做缓冲。即:buffers是用来存储目录里面有什么内容,权限等等,而cached用来记忆我们打开的文件.
如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man kill ,你就可以明显的感觉到第二次的开打的速度快很多。实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。#free#man kill#free#man kill#free比较一下free先后显示的buffers的大小。另一个实验:#free#ls /dev#free比较一下两个的大小,当然这个buffers随时都在增加,但有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。
因为Linux会将暂时不使用的内存作为文件和数据缓存,以提高系统性能,当应用程序需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)&&
内存交换条件及方式:
当可用内存少于额定值的时候,就会开始进行交换.如何看额定值(RHEL4.0)#cat /proc/meminfo交换将通过三个途径来减少系统中使用的物理页面的个数:1.减少缓冲与页面cache的大小;2.将系统V类型的内存页面交换出支;3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。事实上,少量地使用swap是不会影响到系统性能的。下次自动登录
现在的位置:
& 综合 & 正文
linux free命令详解: cache和buff的区别
linux系统上,常用free命令查看内存的使用情况,本文主要为你介绍free命令的输出结果:
解释一下Linux上free命令的输出。
  下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:
FO[2][1] =
FO[3][2] =
3 -/+ buffers/cache:
  free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。
  free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。
  第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:
KB(缺省时free的单位为KB)物理内存,即FO[2][1];
在这些物理内存中有KB(即FO[2][2])被使用了;
还用1401396KB(即FO[2][3])是可用的;
这里得到第一个等式:
FO[2][1] = FO[2][2] + FO[2][3]
FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。
FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS 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.
也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么FO[2][6](cached memory)比较大,而FO[2][3]比较小的原因。我们可以做一个简单的测试:
释放掉被系统cache占用的数据;
echo 3&/proc/sys/vm/drop_caches
读一个大文件,并记录时间;
关闭该文件;
重读这个大文件,并记录时间;
第二次读应该比第一次快很多。原来我做过一个BerkeleyDB的读操作,大概要读5G的文件,几千万条记录。在我的环境上,第二次读比第一次大概可以快9倍左右。
  free输出的第二行是从一个应用程序的角度看系统内存的使用情况。
对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。
这里还用两个等式:
FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]
这二者都不难理解。
  free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的所有输出值都是从/proc/meminfo中读出的。
在系统上可能有meminfo(2)这个函数,它就是为了解析/proc/meminfo的。procps这个包自己实现了meminfo()这个函数。可以下载一个procps的tar包看看具体实现,现在最新版式3.2.8。
【上篇】【下篇】linux free -h的结果中,buff/cache是什么意思?也是空闲的内存吗?-CSDN论坛
系统维护与使用区
linux free -h的结果中,buff/cache是什么意思?也是空闲的内存吗?
如下图所示,free和buff/cache有什么区别当前位置: >
linux的top下buffer与cache的区别
时间: 10:34 来源:未知 标签: 作者:谭博 阅读:次
& &缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据
的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据
时,速度快的设备的操作进程不发生间断。
& & & 当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,
这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会
自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。
其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有
内存可用。如果你希望手动去释放Cache Memory也是有办法的
我们使用的Linux和Windows可不太一样,用top命令得出来的可能不是真实使用的内存,用free命令第二行才是系统真实使用的内存
在终端中敲入:free
显 示:&total& used& free& shared& buffers& cached
Mem:&&& 332& 16936&&& 0&&&&& 85540&&& 126384
-/+ buffers/cache:2
系统的总物理内存:255268Kb(256M),但系统 当前真正可用的内存并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
我们使用total1、used1、 free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
total1:表示物理 内存总量。
used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free1:未被分配的内存。
shared1:共享内存,一般系统不会用到,这里也不讨论。
buffers1: 系统分配但未被使用的buffers 数量。
cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。
free2:未被 使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
可以整理出如下等式:
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
free2 = buffers1 + cached1 + free1
关注微信公众号
微信扫一扫,打赏我
内容不错,支持一下
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

我要回帖

更多关于 centos buff cache 的文章

 

随机推荐