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,然后交给更底层的驱动。

原文链接: https://blog.csdn.net/dog250/article/details/6070091

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    buffer_head和bio

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/409544

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午11:28
下一篇 2023年4月26日 上午11:28

相关推荐