block: add support for IO CPU affinity
commitc7c22e4d5c1fdebfac4dba76de7d0338c2b0d832
authorJens Axboe <jens.axboe@oracle.com>
Sat, 13 Sep 2008 18:26:01 +0000 (13 20:26 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 9 Oct 2008 06:56:09 +0000 (9 08:56 +0200)
treeecc3d2517b3471ccc35d4cb4e3b48d4b57205061
parent18887ad910e56066233a07fd3cfb2fa11338b782
block: add support for IO CPU affinity

This patch adds support for controlling the IO completion CPU of
either all requests on a queue, or on a per-request basis. We export
a sysfs variable (rq_affinity) which, if set, migrates completions
of requests to the CPU that originally submitted it. A bio helper
(bio_set_completion_cpu()) is also added, so that queuers can ask
for completion on that specific CPU.

In testing, this has been show to cut the system time by as much
as 20-40% on synthetic workloads where CPU affinity is desired.

This requires a little help from the architecture, so it'll only
work as designed for archs that are using the new generic smp
helper infrastructure.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/blk-core.c
block/blk-settings.c
block/blk-softirq.c
block/blk-sysfs.c
block/blk.h
fs/bio.c
include/linux/bio.h
include/linux/blkdev.h
include/linux/elevator.h