|| ||Jens Axboe <email@example.com>|
|| ||[PATCH 0/8] IO queuing and complete affinity|
|| ||Thu, 7 Feb 2008 10:18:57 +0100|
|| ||Alan.Brunelle@hp.com, firstname.lastname@example.org, email@example.com,
Since I'll be on vacation next week, I thought I'd send this out in
case people wanted to play with it. It works here, but I haven't done
any performance numbers at all.
Patches 1-7 are all preparation patches for #8, which contains the
real changes. I'm not particularly happy with the arch implementation
for raising a softirq on another CPU, but it should be fast enough
so suffice for testing.
Anyway, this patchset is mainly meant as a playground for testing IO
affinity. It allows you to set three values per queue, see the files
in the /sys/block/<dev>/queue directory:
Only allow completions to happen on the defined CPU mask.
Only allow queuing to happen on the defined CPU mask.
Always complete a request on the same CPU that queued it.
As you can tell, there's some overlap to allow for experimentation.
rq_affinity will override completion_affinity, so it's possible to
have completions on a CPU that isn't set in that mask. The interface
is currently limited to all CPUs or a specific CPU, but the implementation
is supports (and works with) cpu masks. The logic is in
blk_queue_set_cpumask(), it should be easy enough to change this to
echo a full mask, or allow OR'ing of CPU masks when a new CPU is passed in.
For now, echo a CPU number to set that CPU, or use -1 to set all CPUs.
The default is all CPUs for no change in behaviour.
Patch set is against current git as of this morning. The code is also in
the block git repo, branch is io-cpu-affinity.