Linux内存中的 buffer 和 cache 到底是个什么东东?
Linux 中的 free 命令,会输出:
total 总量
used 已使用
free 空闲
shared 共享内存
buffers
cached
前面四项都比较好理解,一看我也就知道啥意思了。但是buffer 和 cached 我就一直不很理解,终于看到某篇文章写的很详细,于是记下来;
·A buffer is something that has yet to be "written" to disk. ---buffer 写缓存,数据存储时,先保存到磁盘缓冲区,然后再写入到永久空间
·A cache is something that has been "reed" from the disk adn stored for later use. --cache 读缓存,数据从磁盘读出后,暂留在缓冲区,预备程序接下来的使用,
英文好点的,应该已经看出了端倪,
buffer 用于存放要输出到磁盘的数据,而cache是从磁盘读出存放到内存中待今后使用的数据。它们的引入均是为了提供IO的性能。
内存:从用户和操作系统的角度来看,其大小空间是有区别的。像buffer/cached的内存,由于这块内存从操作系统的角度确实被使用,但如果用户要使用,这块内存是可以很快被回收而被用户空间程序使用,因此从用户角度而言这块内存应被划为空闲状态。
为什么Linux 会有这种机制呢?
其实这是一种非常优秀的设计,目的就是为了提升磁盘IO的性能,从低速的块设备上读取的数据会暂时保存在内存中,即使数据在当时已经不再需要了,但在应用程序下一次访问该数据时,它可以从内存中直接读取,从而绕开低速的块设备,从而提高系统的整体性能。