经常会看到 buffer 与cache 这两个词语,这两个词语有什么区别呢?

1、字面区别
buffer 中文翻译为 缓冲,而cache则翻译为 缓存。

2、内涵区别
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,目前还出现了 L3 Cache。软件的话,指存储在内存的数据,应用程序通过直接这部分内存的数据,避免通过磁盘IO从数据库、es等获取数据,从而提升性能,具体又分为本地缓存和分布式缓存,本地缓存是把数据保存在应用程序所在内存中,分布式缓存指redis,memcached等,为了提升性能,多数系统内部都采用了缓存设计,比如mysql,操作系统等。

buffer 指一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,读/写都可以运用缓冲区技术,例如速度快的设备从速度慢的设备读入数据时,数据先存放到buffer,等达到一定数量再一次性读取。再比如,每次有更新的时候,数据并不会立刻落盘,而是先将数据放到缓冲区,等待一段时间,再集中写入磁盘。

下面这句话,概括了缓冲和缓存的区别

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.

Free中的buffer和cache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。

参考文档
Linux中内存buffer和cache有什么区别
https://www.yisu.com/zixun/423010.html

磁盘I/O理解
https://zhuanlan.zhihu.com/p/476264860