linux 的page cache 和buffer cache的比较容易混淆,其实二者均是块设备内容内存的缓存,区别是page cache是缓存文件系统的数据,而buffer cache是缓存设备的数据。
举个比较常见的例子来讲,当手机使用mass storage时, 如果mount到linux系统上,pc和手机的均会为在内存缓存手机分区的块设备的内容。但在pc上主要使用page cache.但
手机上是使用buffer cache. 因为分区是mount在pc,分区的文件系统信息在pc上是可见的。分区没有mount的手机上,文件系统信息没有mount到手机上。故使用buffer cache。
对于文件系统来讲,文件本身内容是使用page cache, 因为page cache是缓存文件的。 但文件系统的基础数据缓存是使用buffer cache. 这些数据被称为meta data. 如ext4的 superblock 和 inode 数据,这是文件系统的的基础。
总的来说 page cache是缓存文件系统的数据(mount),而buffer cache是缓存设备的数据(不mount)。