buffer_head和bio

buffer_head完全按照设备块来进行io,块大小取决于设备但是普遍比页面小,bh的元数据比率开销过大,bio则按照页面大小进行io,然而一个bio中可以包含多个页面,因此聚集的基于page的io吞吐量更大些,这就好比用桶提水比用汤勺舀水效率高一样。因此2.6内核普遍使用bio代替了bh,然而传统的bh并没有消失,只是它完全用bio来实现了,在读取小数据的时候,基于设备块来读取还是很可取的,因此内核干脆设计出一个 bh_lru缓存结构体来缓存8个最近使用并且猜测还将被使用的bh,这可能是一些块设备的元数据。在2.6内核中,bh退化成了一个接口层,虽然2.6内核完全使用了基于page的块io,但是却并没有丧失基于块映射io的高效性,只是这个工作交给了更底层的块设备驱动程序来做了,最终驱动程序还是成块成块地来读写数据的...早先对于bh来说,每一个块都要有一个bh结构体来描述,如果写一个很大的数据,就需要很多的bh链接成一个链,然后一个循环将它们全部写入设备,如果是bio的,使用mpage机制可以尽可能多地搜集很多的page,然后交给更底层的驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值