【发布时间】:2011-11-23 15:27:02
【问题描述】:
我正在编写一个模拟块设备的 linux 内核模块。
有多种调用可用于将块大小告知内核,因此它会相应地对齐和调整每个对驱动程序的请求的大小。这在“Linux Device Drives 3”一书中有详细记录。
本书描述了两种实现块设备的方法:使用“request”函数,或使用“make_request”函数。
目前尚不清楚,当使用简约的“make_request”方法时,队列限制调用是否适用(如果底层设备确实没有从顺序 IO 中受益,这也是更有效的方法,这种情况就是我)。
我真的很想让内核使用 4K 块大小与我对话,但我看到较小的 bio-s 会影响我的 make_request 函数。
我的问题是使用 make_request 时 blk_queue_limit_* 是否会影响 bio 大小?
提前谢谢你。
【问题讨论】:
-
看来问题出在 blk_queue_logical_block_size 和 blk_queue_make_request 的顺序上。后面的函数将每个块限制值设置为其默认值,逻辑扇区大小为 512 字节。我只发现了 make_request 只接收logical_block_size * k 大小的bios这一事实的经验证据,所以我真的很想看看内核中保证这一点的行。
标签: linux-kernel kernel-module