linux page buffer cache深入理解
Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手。
Buffer cache是针对磁盘块(即扇区)的缓存(即buffer cache允许缓存的数据可以是来自一个磁盘上任意一个扇区的数据),也就是在没有文件系统的情况下(准确的表达是,无论有否文件系统的存在,设备驱动程序读取的数据(也即直接对磁盘进行操作的数据)都是缓存到buffer cache中的),直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
也就是说,首先我们要知道进程(0)(即设备驱动程序,或设备文件)对磁盘进行读写的基本单位是扇区(不是其他大小,如文件系统块大小),所以内存上(的是无论page cache,还是buffer cache)对磁盘进行读写的基本单位是扇区。进程(1)对Buffer cac