Page Cache and Buffer Cache
在 Linux 的实现中,文件 Cache 分为两个层面,一是 Page Cache,另一个 Buffer Cache,每一个 Page Cache 包含若干 Buffer Cache。
内存管理系统和 VFS 只与 Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收,同时在使用 memory map 方式访问时负责建立映射;
具体文件系统则一般只与 Buffer Cache 交互,它们负责在外围存储设备和 Buffer Cache 之间交换数据。
page cache和buffer cache最大的差别在于:page cache是对文件数据的缓存;buffer cache是对设备数据的缓存。两者在实现上差别不是很大,都是采用radix树进行管理。
Buffers是内存中块I/O的缓冲区。相对来说,它们是比较短暂的。在Linux内核2.4版本之前,page cache跟buffer cache是分开的。从2.4开始,page cache跟buffer cache统一了。Buffers就只缓存 raw disk block 了,这一部分不在page cache—也就是非文件数据。Buffers这个指标也就不那么重要了。大部分系统中,Buffers经常也就几十M。