cfq-iosched: add close cooperator code
authorJens Axboe <jens.axboe@oracle.com>
Wed, 15 Apr 2009 10:15:11 +0000 (12:15 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Wed, 15 Apr 2009 10:15:11 +0000 (12:15 +0200)
commita36e71f996e25d6213f57951f7ae1874086ec57e
tree1673eeb55b4d84a3d38dda9009ad7ac6f31c5a89
parent9481ffdc61738a91baf0f8b7fb20922768ae1b8e
cfq-iosched: add close cooperator code

If we have processes that are working in close proximity to each
other on disk, we don't want to idle wait. Instead allow the close
process to issue a request, getting better aggregate bandwidth.
The anticipatory scheduler has similar checks, noop and deadline do
not need it since they don't care about process <-> io mappings.

The code for CFQ is a little more involved though, since we split
request queues into per-process contexts.

This fixes a performance problem with eg dump(8), since it uses
several processes in some silly attempt to speed IO up. Even if
dump(8) isn't really a valid case (it should be fixed by using
CLONE_IO), there are other cases where we see close processes
and where idling ends up hurting performance.

Credit goes to Jeff Moyer <jmoyer@redhat.com> for writing the
initial implementation.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/cfq-iosched.c