首页 > 代码库 > Linux下的buffer与cache

Linux下的buffer与cache

最近在做监控项目的时候,有同事跟我说“你看Linux性能也不好嘛,内存使用率总是达到80%,我在windows下也没这种状况”,我跟他解释,因为Linux系统,是尽可能的使用内存,内存不是拿来看的,是需要拿来用的,而对于windows,无论你的windows内存是多少,它还是会用硬盘交换文件来读(即使内存空间还有很多空余),而对于Linux,在查看内存使用率的时候,只要没有用到swap空间,我们就认为内存暂时不会紧缺。

那Linux下的buffer与cache到底是什么?又有什么区别了,下面我们简单做下介绍。

[root@kvm02 postfix]# free -m

              total        used        free      shared  buff/cache   available

Mem:           3774         375        2592           9         807        3106

Swap:          3967           0        3967

可以内存=free+buffers+cached

buffer:缓冲将数据缓冲下来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。

A buffer is something that has yet to be "written" to disk.

cache:缓存实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。

A cache is something that has been "read" from the disk and stored for later use.


小结:

a、buffer是用于存放将要输出到disk(块设备)的数据,而cache是存放从disk上读出的数据。二者都是为提高IO性能而设计的。

b、从本质上讲,Buffer是“缓冲”,而Cache是“缓存”,即Buffer中的数据是一定要在短时间内被处理的,而Cache则可以作为一个数据的长期的容器而其中的数据不一定非要被立刻处理


参考资料:https://www.zhihu.com/question/26190832


本文出自 “冰冻vs西瓜” 博客,请务必保留此出处http://molewan.blog.51cto.com/287340/1924404

Linux下的buffer与cache