1
0
Fork 0
alistair23-linux/block
Jens Axboe a6f23657d3 block: add one-hit cache for disk partition lookup
disk_map_sector_rcu() returns a partition from a sector offset,
which we use for IO statistics on a per-partition basis. The
lookup itself is an O(N) list lookup, where N is the number of
partitions. This actually hurts performance quite a bit, even
on the lower end partitions. On higher numbered partitions,
it can get pretty bad.

Solve this by adding a one-hit cache for partition lookup.
This makes the lookup O(1) for the case where we do most IO to
one partition. Even for mixed partition workloads, amortized cost
is pretty close to O(1) since the natural IO batching makes the
one-hit cache last for lots of IOs.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2008-12-29 08:29:51 +01:00
..
Kconfig blktrace: port to tracepoints 2008-11-26 12:13:34 +01:00
Kconfig.iosched update I/O sched Kconfig help texts - CFQ is now default, not AS. 2007-02-17 20:08:22 +01:00
Makefile block: unify request timeout handling 2008-10-09 08:56:13 +02:00
as-iosched.c block: get rid of elevator_t typedef 2008-12-29 08:29:50 +01:00
blk-barrier.c block: fix empty barrier on write-through w/ ordered tag 2008-12-29 08:28:45 +01:00
blk-core.c block: don't use plugging on SSD devices 2008-12-29 08:28:45 +01:00
blk-exec.c Add some block/ source files to the kernel-api docbook. Fix kernel-doc notation in them as needed. Fix changed function parameter names. Fix typos/spellos. In comments, change REQ_SPECIAL to REQ_TYPE_SPECIAL and REQ_BLOCK_PC to REQ_TYPE_BLOCK_PC. 2008-10-09 08:56:03 +02:00
blk-integrity.c block: Switch blk_integrity_compare from bdev to gendisk 2008-10-09 08:56:21 +02:00
blk-ioc.c cfq-iosched: fix RCU race in the cfq io_context destructor handling 2008-05-07 09:28:57 +02:00
blk-map.c When block layer fails to map iov, it calls bio_unmap_user to undo 2008-12-03 12:41:20 +01:00
blk-merge.c block: remove unused ll_new_mergeable() 2008-11-06 08:41:55 +01:00
blk-settings.c block: fix setting of max_segment_size and seg_boundary mask 2008-12-03 12:55:55 +01:00
blk-softirq.c block: add fault injection mechanism for faking request timeouts 2008-10-09 08:56:17 +02:00
blk-sysfs.c block: don't take lock on changing ra_pages 2008-12-29 08:28:43 +01:00
blk-tag.c block/blk-tag.c: cleanup kernel-doc 2008-12-29 08:28:43 +01:00
blk-timeout.c block: leave the request timeout timer running even on an empty list 2008-12-29 08:28:42 +01:00
blk.h block: remove __generic_unplug_device() from exports 2008-10-17 14:03:08 +02:00
blktrace.c blktrace: port to tracepoints 2008-11-26 12:13:34 +01:00
bsg.c Enforce a minimum SG_IO timeout 2008-12-05 14:49:18 -08:00
cfq-iosched.c cfq-iosched: remove limit of dispatch depth of max 4 times quantum 2008-12-29 08:29:51 +01:00
cmd-filter.c [PATCH] introduce fmode_t, do annotations 2008-10-21 07:47:06 -04:00
compat_ioctl.c block: don't take lock on changing ra_pages 2008-12-29 08:28:43 +01:00
deadline-iosched.c block: get rid of elevator_t typedef 2008-12-29 08:29:50 +01:00
elevator.c block: get rid of elevator_t typedef 2008-12-29 08:29:50 +01:00
genhd.c block: add one-hit cache for disk partition lookup 2008-12-29 08:29:51 +01:00
ioctl.c block: don't take lock on changing ra_pages 2008-12-29 08:28:43 +01:00
noop-iosched.c block: get rid of elevator_t typedef 2008-12-29 08:29:50 +01:00
scsi_ioctl.c scsi-ioctl: use clock_t <> jiffies 2008-12-29 08:28:42 +01:00