Shaohua Li
9dedf60313
md/raid1: read balance chooses idlest disk for SSD
...
SSD hasn't spindle, distance between requests means nothing. And the original
distance based algorithm sometimes can cause severe performance issue for SSD
raid.
Considering two thread groups, one accesses file A, the other access file B.
The first group will access one disk and the second will access the other disk,
because requests are near from one group and far between groups. In this case,
read balance might keep one disk very busy but the other relative idle. For
SSD, we should try best to distribute requests to as many disks as possible.
There isn't spindle move penality anyway.
With below patch, I can see more than 50% throughput improvement sometimes
depending on workloads.
The only exception is small requests can be merged to a big request which
typically can drive higher throughput for SSD too. Such small requests are
sequential reads. Unlike hard disk, sequential read which can't be merged (for
example direct IO, or read without readahead) can be ignored for SSD. Again
there is no spindle move penality. readahead dispatches small requests and such
requests can be merged.
Last patch can help detect sequential read well, at least if concurrent read
number isn't greater than raid disk number. In that case, distance based
algorithm doesn't work well too.
V2: For hard disk and SSD mixed raid, doesn't use distance based algorithm for
random IO too. This makes the algorithm generic for raid with SSD.
Signed-off-by: Shaohua Li <shli@fusionio.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2012-07-31 10:03:53 +10:00
..
persistent-data
dm persistent data: fix allocation failure in space map checker init
2012-07-03 12:55:37 +01:00
bitmap.c
md/bitmap: record the space available for the bitmap in the superblock.
2012-05-22 13:55:34 +10:00
bitmap.h
md/bitmap: record the space available for the bitmap in the superblock.
2012-05-22 13:55:34 +10:00
dm-bio-record.h
dm-bufio.c
dm bufio: prefetch
2012-03-28 18:41:29 +01:00
dm-bufio.h
dm bufio: prefetch
2012-03-28 18:41:29 +01:00
dm-crypt.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-delay.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-exception-store.c
dm exception store: fix init error path
2012-03-28 18:41:22 +01:00
dm-exception-store.h
dm-flakey.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-io.c
dm io: fix discard support
2012-03-07 19:09:37 +00:00
dm-ioctl.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-kcopyd.c
dm kcopyd: add dm_kcopyd_zero to zero an area
2011-10-31 20:18:58 +00:00
dm-linear.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-log-userspace-base.c
Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux
2011-11-06 19:44:47 -08:00
dm-log-userspace-transfer.c
connector/userns: replace netlink uses of cap_raised() with capable()
2012-05-10 23:21:39 -04:00
dm-log-userspace-transfer.h
dm-log.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-mpath.c
dm mpath: allow ioctls to trigger pg init
2012-06-03 00:29:58 +01:00
dm-mpath.h
dm-path-selector.c
md: Add module.h to all files using it implicitly
2011-10-31 19:31:18 -04:00
dm-path-selector.h
dm-queue-length.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-raid.c
DM RAID: Use md_error() in place of simply setting Faulty bit
2012-05-22 13:55:31 +10:00
dm-raid1.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-region-hash.c
dm-round-robin.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-service-time.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-snap-persistent.c
md: Add in export.h for files using EXPORT_SYMBOL
2011-10-31 19:31:19 -04:00
dm-snap-transient.c
md: Add in export.h for files using EXPORT_SYMBOL
2011-10-31 19:31:19 -04:00
dm-snap.c
dm-stripe.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-sysfs.c
dm-table.c
dm: reject trailing characters in sccanf input
2012-03-28 18:41:26 +01:00
dm-target.c
dm-thin-metadata.c
dm thin: provide userspace access to pool metadata
2012-06-03 00:30:01 +01:00
dm-thin-metadata.h
dm thin: provide userspace access to pool metadata
2012-06-03 00:30:01 +01:00
dm-thin.c
dm thin: commit metadata before creating metadata snapshot
2012-07-03 12:55:31 +01:00
dm-uevent.c
md: Add in export.h for files using EXPORT_SYMBOL
2011-10-31 19:31:19 -04:00
dm-uevent.h
dm-verity.c
dm: add verity target
2012-03-28 18:43:38 +01:00
dm-zero.c
dm.c
dm: clear bi_end_io on remapping failure
2012-03-28 18:41:25 +01:00
dm.h
dm table: add immutable feature
2011-10-31 20:19:04 +00:00
faulty.c
md: tidy up rdev_for_each usage.
2012-03-19 12:46:39 +11:00
Kconfig
dm: add verity target
2012-03-28 18:43:38 +01:00
linear.c
md/linear: If md_integrity_register() fails, linear_run() must free the mem.
2012-04-02 09:48:37 +10:00
linear.h
Makefile
dm: add verity target
2012-03-28 18:43:38 +01:00
md.c
md: avoid crash when stopping md array races with closing other open fds.
2012-07-19 15:59:18 +10:00
md.h
md/bitmap: add new 'space' attribute for bitmaps.
2012-05-22 13:55:07 +10:00
multipath.c
md: make 'name' arg to md_register_thread non-optional.
2012-07-03 15:56:52 +10:00
multipath.h
md/multipath: typedef removal: multipath_conf_t -> struct mpconf
2011-10-11 16:48:57 +11:00
raid0.c
md: Avoid OOPS when reshaping raid1 to raid0
2012-04-03 15:37:26 +10:00
raid0.h
md: add proper merge_bvec handling to RAID0 and Linear.
2012-03-19 12:46:39 +11:00
raid1.c
md/raid1: read balance chooses idlest disk for SSD
2012-07-31 10:03:53 +10:00
raid1.h
md/raid1: make sequential read detection per disk based
2012-07-31 10:03:53 +10:00
raid5.c
raid5: add a per-stripe lock
2012-07-19 16:01:31 +10:00
raid5.h
raid5: add a per-stripe lock
2012-07-19 16:01:31 +10:00
raid10.c
MD RAID10: Export md_raid10_congested
2012-07-31 10:03:53 +10:00
raid10.h
MD RAID10: Export md_raid10_congested
2012-07-31 10:03:53 +10:00