File system buffer

buffer cache, page cache, page buffer.

这篇文章介绍了buffer早期的演进。

http://bulma.net/impresion.phtml?nIdNoticia=1154

缺失的图可以在这里找

http://blog.sina.com.cn/s/blog_43653df6010003t6.html

 

buffer cache接口物理设备,被VM和IO子系统共享。

早期,page cache建立在buffer cache之上,用于VM子系统,它和buffer cache是分离的。因此OS需要处理两者的同步。

然后,linux把文件数据只保存在page cache中(或者是page cache和buffer cache共享同样的内存)来避免double copy。

然后linus决定统一使用page cache作为缓存,他提到

it will be one less thing that uses the buffer cache as a ''cache'' (I want people to think of, and use, the buffer cache as an _IO_ entity, not a cache).

 

released 2.4.10, which finally unified the page and buffer cache。

buffer cache包含在page buffer中,page buffer属于page cache。

什么时候使用buffer cache,什么时候使用page cache呢?

可以这样理解,buffer cache要求的是物理上的连续(一个磁盘块),page cache要求的是逻辑上的连续(文件)。

在2.4 ext2中,对小文件使用4k的page buffer,这也可能是ext文件系统在小文件上低效的原因之一(猜测),不知道ReiserFS是否有不同的缓存策略。

 

Kernel function

System call

Cache

I/O operation

bread( )

None

Buffer

Read an Ext2 superblock

bread( )

None

Buffer

Read an Ext2 inode

generic_file_read( )

getdents( )

Page

Read an Ext2 directory

generic_file_read( )

read( )

Page

Read an Ext2 regular file

generic_file_write( )

write( )

Page

Write an Ext2 regular file

generic_file_read( )

read( )

Page

Read a block device file

generic_file_write( )

write( )

Page

Write a block device file

filemap_nopage( )

None

Page

Access a memory-mapped file

brw_page( )

None

Page

Access to swapped-out page

 另外有看到(最开始的链接),buffer cache只能映射到内核空间,因此page buffer用途更广。

 

Starting from stable version 2.4.10, the buffer cache does not really exist anymore. In fact, for reasons of efficiency, block buffers are no longer allocated individually; instead, they are stored in dedicated pages called "buffer pages ," which are kept in the page cache.

Formally, a buffer page is a page of data associated with additional descriptors called "buffer heads ," whose main purpose is to quickly locate the disk address of each individual block in the page.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值