make_request и ограничения очереди - PullRequest
0 голосов
/ 23 ноября 2011

Я пишу модуль ядра Linux, который эмулирует блочное устройство.

Существуют различные вызовы, которые можно использовать, чтобы сообщить ядру о размере блока, поэтому он выравнивает и масштабирует каждый запрос к драйверу.соответственно.Это хорошо описано в книге «Linux Device Drives 3».

В книге описаны два метода реализации блочного устройства: использование функции «request» или использование функции «make_request».

Не ясно, применяются ли вызовы ограничения очереди при использовании минималистического подхода «make_request» (который также является более эффективным, если базовое устройство действительно не имеет преимуществ от последовательного ввода-вывода по случайному принципу, что в случае со мной).

Мне бы очень хотелось, чтобы ядро ​​говорило со мной, используя размеры блока 4K, но я вижу, что био-объекты меньшего размера попадают в мою функцию make_request.

Мой вопрос заключается в том, должен ли blk_queue_limit_* влияет на размер био при использовании make_request?

Заранее спасибо.

1 Ответ

1 голос
/ 20 января 2012

Я думаю, что я нашел достаточно доказательств в коде ядра, что если вы используете make_request, вы получите корректный размер и выровненный биос.

Ответ:

Вы должны позвонитьСначала blk_queue_make_request, потому что он устанавливает пределы очереди по умолчанию.После этого установите ограничения очереди как вам угодно.

Кажется, что каждая часть ядра, отправляющая BIOS, проверяет правильность, и отправитель должен выполнить эти проверки.Я нашел неполную проверку в submit_bio и generic_make_request.Но пока никто не делает трюки, это нормально.

Так как политика представляет правильную биографию, но заботиться должен податель, а никто посередине не делает, я думаю, что долженосуществить явные проверки и провалить неправильные биографические данные.Поскольку это политика, нормально нарушать правила, а ядро ​​не применяет ее, поэтому хорошо делать явные проверки.

Если вы хотите прочитать немного больше истории, см. http://tlfabian.blogspot.com/2012/01/linux-block-device-drivers-queue-and.html.

...