Re: [PATCH 05/10] block: remove per-queue plugging
From: Jens Axboe <hidden>
Date: 2011-04-12 16:49:57
Also in:
dm-devel, lkml
From: Jens Axboe <hidden>
Date: 2011-04-12 16:49:57
Also in:
dm-devel, lkml
On 2011-04-12 18:44, hch@infradead.org wrote:
On Tue, Apr 12, 2011 at 02:58:46PM +0200, Jens Axboe wrote:quoted
Supposedly it's faster to do it inline rather than punt the dispatch. But that may actually not be true, if you have multiple plugs going (and thus multiple contenders for the queue lock on dispatch). So lets play it safe and punt to kblockd, we can always revisit this later.Note that this can be optimized further by adding a new helper that just queues up work on kblockd without taking the queue lock, e.g. adding a new void blk_run_queue_async(struct request_queue *q) { if (likely(!blk_queue_stopped(q))) queue_delayed_work(kblockd_workqueue, &q->delay_work, 0); } And replacing all __blk_run_queue(q, true); callers with that, at which point they won't need the queuelock any more.
I realize that, in fact it's already safe as long as you pass in 'true' for __blk_run_queue(). Before I had rewritten it to move the running out, so that makes the trick a little difficult. This afternoon I also tested it and saw no noticable difference, but I'll probably just do it anyway as it makes sense. -- Jens Axboe