linux 内存中buffer 和cache 的区别

        page cahce 缓存了页面用来优化文件I/O, buffer cache 缓存了磁盘块用来优化 block I/O.在
linux kernel2.4之前,这两个缓存是不同的: 文件在page cache里, 磁盘块在buffer cache里. 这样某
些系统调用(mmap)数据需要在两层cache中都保存了一份. 许多unix系统都遵循类似的模式. 这样很容易实现, 
但是看起来很不优雅和低效, 从linux 2.4开始两种cache开始统一起来. VM子系统接管了I/O读写和页面缓存, 
如果缓存的数据是一个文件内容(大多数据都是这样)这时buffer cache指向了page cache,也就是说数据只
存在一份,buffer cache向硬盘发起读请求时数据会直接写入到 page cache中,因为指向了同一地址.  
page cache 就可以简单看做磁盘的一层缓存.

        buffer cache 也会独立存在, 因为内核有时候需要普通小的block I/O 而不是以页为单位读写,
硬盘大多数是文件内容的读写(以页为单位), 此时buffer cache复用了page cache的内存, 但是有些少量
的数据并不是文件内容例如:文件元数据(inode,dentry等)和原始块 I/O, 这种情况下的磁盘缓存则通过
buffer cache 实现.

关于上面的一段历史可以参照 : 
https://www.usenix.org/legacy/event/usenix2000/freenix/full_papers/silvers/silvers_html/

简单说来page cache缓存了文件内容而buffer cache 缓存了一些文件系统需要用的元数据包括磁盘中的
inode目录等信息. Linux 内核情景分析中,有些章节有说明这个问题,如下:


参考资料:

http://www.quora.com/Linux-Kernel/What-is-the-major-difference-between-the-buffer-cache-and-the-page-cache


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值