Buffer和Cache是现代操作系统中两个相似但截然不同的两个概念和机制,不过最近这两个机制有合并的趋势,比如在之前Ubuntu中输入free -h可以看到buffercache是分开的,但是在较新的Ubuntu中,buffer和cache已经合并显示buff/cache[至少在22.04是这样]。但是我们还是应该并且了解Buffer和Cache的异同。

Buffer

首先,看一下这两个词的意义,Buffer的意思是缓冲,它其中一个[英文释义]是,(https://www.merriam-webster.com/dictionary/buffer)

Buffer: any of various devices or pieces of material for reducing shock or damage due to contact

那这里缓冲什么? reduce schock or damage from where? 缓冲的是write操作对disk的冲击,想像一下,1000次write到disk,但是每次只写入一点点内容,但是disk要为每次write操作做大量的工作包括但不限于,磁盘寻址,写入磁盘,等等。所以buffer就是用来缓冲这种大量写入操作对于disk的影响的。

操作系统会在内存中开辟一部分区域作为buffer,然后将多个要写入磁盘的内容先写入到buffer中,因为内存速度快性能强,所以可以高效处理多次write操作,当buffer中写入的内容到达一定量,再一次性将这些内容一次性写入disk,这样可以有效降低系统的I/O负担。

Cache

Cache的本意是贮藏所,它一种的英文释义

Cache: a hiding place especially for concealing and preserving provisions or implements

在计算机领域,Cache翻译称缓存或者快取,这里可能快取的意思更直观一些。就是将一些数据临时存起来,以备后续使用。操作系统会用一块区域来保存被认为会很快或者多次使用的数据。

因为Cache是为了read操作,为了保证读取速度,Cache通常会使用CPU与主内存间的一种容量较小但速度很高的存储器[现在一般集成在CPU中],所以在Cache的数据一般会比在Buffer的数据拥有更快的访问速度。

Buffer vs Cache

对比Buffer和Cache我们可以总结

  1. Buffer是为了缓冲或者合并多次write操作,来降低系统的I/O负担。Cache是为了更快的read一些hot数据,来增强系统性能。所以,Buffer是为了write,Cache是为了read

  2. Buffer和Cache都是使用不同于disk的高速存储硬件,但是Cache使用一块专门的介于CPU和主内存的存储器,而Buffer一般是作用于主内存中。