Re: Question about request queues in I/O scheduling

From: Max Kanushin
Date: Thu May 12 2016 - 01:33:25 EST


Hello,

I was trying to use spin_trylock(q->queue_lock) on several queues when q->nr_sorted exceeds the per-defined number to block them and unlock the them later with spin_unlock(q->queue_lock), but I have faced the following problem: my system freezes when I am trying to test it by moving files around in my system. I thought it might be caused by blocking a queue of a system partition or swap, but I do not know how to check this as well.
Is it the right way to stop the queue/elevator? What are freezes might be caused by? Is there a simple way to find out which block device is a queue belong to?
I would really appreciate your reply.

Best regards,
Max Kanushin.

On 04/29/2016 07:22 PM, Jeff Moyer wrote:
Max Kanushin <rextuz@xxxxxxxxx> writes:

Thank you very much for the reply. My general idea is take control of all
request queues to block and unblock them manually depending on their load.
One of my steps is to find a length of a queue to decide if to block it.
Actually I think I've found the way. If I got it right, I can move from one
request to another within the list:
struct list_head queue_head;
So that I can calculate how many requests are there in the queue.

Hi, Max,

The queue_head is the dispatch list for I/O, so it does not represent
all I/O queued for a request_queue. The number of requests in the
scheduler would be reflected by q->nr_sorted. The number of dispatched
requests is in an array, in_flight.

Cheers,
Jeff




Best regards,
Max Kanushin.
On Apr 29, 2016 6:32 PM, "Jeff Moyer" <jmoyer@xxxxxxxxxx> wrote:

Max Kanushin <rextuz@xxxxxxxxx> writes:

Hello,

I was searching for a way to find out the length of a request_queue
(that is defined as a structure in
linux/include/linux/blkdev.h). However I am new to the kernel
development and can't figure out where is the actual list of requests
to be processed by an elevator.
Is there a way to iterate requests in a queue or at least find a
number of them?

Hi, Max,

What exactly are you trying to accomplish?

Cheers,
Jeff