gpt4 book ai didi

linux - 结构 buffer_head 效率低下

转载 作者:太空狗 更新时间:2023-10-29 11:30:28 25 4
gpt4 key购买 nike

谁能说出在 Linux 内核 2.4 之前使用的 struct buffer_head 结构效率低下的原因,以及在内核 2.5.1 中新重新设计的 block 层中使用的 struct bio 结构中实现了什么?

最佳答案

在 2.5 之前的内核中,buffer_head 曾经是 IO 的单元。但是,根据 buffer_head 执行 IO 可能效率低下。例如,跨越多个 block 的单个写入将导致创建多个 buffer_head 对象,从而浪费空间和时间。因此,buffer_head 结构最适合用于提供 block 到物理内存的映射,这正是它从 2.5 开始所做的(也是唯一它所做的)内核开始。


另一方面,struct bio 被设计为以后内核版本中的 IO 单元。 **它表示当前在 active 中的 IO kernel.** 注意block-to-memory的映射还是在buffer_head中维护的。但是,buffer_head 现在不会因包含有关当前事件 IO 的信息的字段而过载。因此,当更高级别的代码(例如文件系统)发出 IO 时,请求将添加到 request_queue。该请求又包含一个指向 bio 结构的指针。控制发出 IO 的设备的设备驱动程序接收请求并提供服务。

struct bio 结构也用于分割 IO,例如,RAID 磁盘设备驱动程序。查看 struct bio 定义,您会发现它维护了一个 io_vectors 数组(它们只是内存页的偏移量)。此外,bi_idx 用于索引这些 io_vec。通过对不同的磁盘使用不同的 bi_idx 值,每个磁盘将选择一组不同的 io_vec 来写入(或读取),因此 IO 将以真正的并行方式完成。

关于linux - 结构 buffer_head 效率低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com