make_request和队列限制

时间:2011-11-23 15:27:03

标签: linux-kernel kernel-module

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

可以使用各种调用来告诉内核的块大小,因此它会根据驱动程序对每个请求进行对齐和调整。这在“Linux设备驱动3”一书中有详细记载。

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

目前尚不清楚,当使用简约的“make_request”方法时,队列限制调用是否适用(如果底层设备实际上没有从顺序随机IO中获益,这也是更有效的方法,情况就是如此)我)。

我真的想让内核使用4K块大小与我交谈,但我看到较小的bio-s命中我的make_request函数。

我的问题是,当使用make_request时,blk_queue_limit_ *会影响生物大小吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

答案是:

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

似乎提交BIOS的内核的每个部分都会检查有效性,并且由提交者进行这些检查。我在submit_bio和generic_make_request中发现了不完整的验证。但只要没有人耍花招,那就没关系。

由于这是提交正确生物的政策,但是由提交者来照顾,中间没有人这样做,我认为我必须实施明确的检查并且错误的生物s。因为它是一个策略,所以在违规时失败是好的,并且因为它没有被内核强制执行,所以进行显式检查是一件好事。

如果您想详细了解故事,请参阅http://tlfabian.blogspot.com/2012/01/linux-block-device-drivers-queue-and.html