Linux kernel 设置请求和队列限制

Linux kernel 设置请求和队列限制,linux-kernel,kernel-module,Linux Kernel,Kernel Module,我正在编写一个模拟块设备的linux内核模块 有各种各样的调用可以用来告诉内核块的大小,因此它会相应地调整每个请求到驱动程序的大小。这在“Linux设备驱动器3”一书中有很好的记录 这本书描述了两种实现块设备的方法:使用“请求”功能,或使用“发出请求”功能 目前还不清楚,当使用最低限度的“make_request”方法时,队列限制调用是否适用(如果底层设备确实没有从顺序随机IO中获益,这也是更有效的方法,我就是这样) 我真的很想让内核使用4K块大小与我对话,但我看到更小的bio-s在运行我的ma

我正在编写一个模拟块设备的linux内核模块

有各种各样的调用可以用来告诉内核块的大小,因此它会相应地调整每个请求到驱动程序的大小。这在“Linux设备驱动器3”一书中有很好的记录

这本书描述了两种实现块设备的方法:使用“请求”功能,或使用“发出请求”功能

目前还不清楚,当使用最低限度的“make_request”方法时,队列限制调用是否适用(如果底层设备确实没有从顺序随机IO中获益,这也是更有效的方法,我就是这样)

我真的很想让内核使用4K块大小与我对话,但我看到更小的bio-s在运行我的make_请求函数

我的问题是,当使用make_请求时,blk_队列限制是否会影响bio大小


提前谢谢。

我认为我在内核代码中找到了足够的证据,如果使用make_request,您将获得正确大小和对齐的bios

答案是:

您必须首先调用blk_queue_make_request,因为它将队列限制设置为默认值。在此之后,根据需要设置队列限制

似乎提交bios的内核的每个部分都要进行有效性检查,而这些检查是由提交者来完成的。我在submit_bio和generic_make_请求中发现不完整的验证。但只要没人耍花招,那就好了

<> P>因为这是一个提交正确的BIO的政策,但这取决于提交人的照顾,中间没有人,我想我必须实施明确的检查,并失败错误的生物。因为这是一个策略,所以在违反规则时失败是可以的,而且因为它不是由内核强制执行的,所以进行显式检查是一件好事


如果您想阅读更多有关该故事的内容,请参阅。

问题似乎出在blk_queue_logical_block_size和blk_queue_make_request的顺序上。后面的函数将每个块限制值设置为默认值,逻辑扇区大小为512字节。我只找到了经验证据,证明make_request只接收逻辑块大小*k大小的bios,所以我很想看看内核中保证这一点的行。