Linux IO的buffer cache和page cache的区别,以及二者合并的原因

What is the major difference between the buffer cache and the page cache? Why were they separate entities in older kernels? Why were they merged later on?

原文地址:quora.com/Linux-Kernel

The page cache caches pages of files to optimize file I/O. The buffer cache caches disk blocks to optimize block I/O.

Prior to Linux kernel version 2.4, the two caches were distinct: Files were in the page cache, disk blocks were in the buffer cache. Given that most files are represented by a filesystem on a disk, data was represented twice, once in each of the caches. Many Unix systems follow a similar pattern.

This is simple to implement, but with an obvious inelegance and inefficiency. Starting with Linux kernel version 2.4, the contents of the two caches were unified. The VM subsystem now drives I/O and it does so out of the page cache. If cached data has both a file and a block representation—as most data does—the buffer cache will simply point into the page cache; thus only one instance of the data is cached in memory. The page cache is what you picture when you think of a disk cache: It caches file data from a disk to make subsequent I/O faster.

The buffer cache remains, however, as the kernel still needs to perform block I/O in terms of blocks, not pages. As most blocks represent file data, most of the buffer cache is represented by the page cache. But a small amount of block data isn’t file backed—metadata and raw block I/O for example—and thus is solely represented by the buffer cache.

See also my answer to What is the difference between Buffers and Cached columns in /proc/meminfo output?

注意这里buffer cache中的buffer指的是以前块设备层中用来缓存磁盘内容的结构,一个buffer大小就是磁盘中一个block大小。这里page cache指的是文件系统层用于缓存读写内容的cache。

这里的“合并”指的是,将两层中的结构统一,都改为page cache结构,page中包含一个一个的buffer结构,另外,在文件系统层缓存的page就无需在块设备层再缓存一份了,而是直接用(块设备中buffer)指针指向(文件系统page cache数据)的方式。当然如果只存在于块设备中的缓存还是只在块设备层缓存buffer和其数据。

原文中还有一些其他文章链接也挺有意思的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值