Re: [rfc][patch] remove racy sync_page?

From: Nick Piggin
Date: Wed May 31 2006 - 09:53:36 EST


Jens Axboe wrote:
On Wed, May 31 2006, Nick Piggin wrote:

Now having a mechanism for a task to batch up requests might be a
good idea. Eg.

plug();
submit reads
unplug();
wait for page


How's this different from what we have now? The plugging will happen
implicitly, if we need to. If the queue is already running, chances are
that there are requests there so you won't get to your first read first
anyways.

The unplug(); wait_for_page(); is already required unless you want to
wait for the plugging to time out (unlikely, since you are now waiting
for io completion on one of them).


I'd think this would give us the benefits of corse grained (per-queue)
plugging and more (e.g. it works when the request queue isn't empty).
And it would be simpler because the unplug point is explicit and doesn't
need to be kicked by lock_page or wait_on_page


I kind of like having the implicit unplug, for several reasons. One is
that people forget to unplug. We had all sorts of hangs there in 2.4 and
earlier because of that. Making the plugging implicit should help that
though. The other is that I don't see what the explicit unplug gains
you. Once you start waiting for one of the pages submitted, that is
exactly the point where you want to unplug in the first place.

OK I wasn't aware it was explicit in 2.4 and earlier.

Two upsides I see to explicit: firstly, it works on non-empty queues. Less
of a problem perhaps, but only because it is statistically less likely to
be the next submitted, so there will still be some improvement.

Second, for async work (aio, readahead, writeback, writeout for page reclaim),
the point where you wait is probably not the best place to unplug.

Also, it would allow lock_page to be untangled.

--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com -
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/