linux/drivers/md
Mustafa Mesanovic 2991520200 dm stripe: implement merge method
Implement a merge function in the striped target.

When the striped target's underlying devices provide a merge_bvec_fn
(like all DM devices do via dm_merge_bvec) it is important to call down
to them when building a biovec that doesn't span a stripe boundary.

Without the merge method, a striped DM device stacked on DM devices
causes bios with a single page to be submitted which results
in unnecessary overhead that hurts performance.

This change really helps filesystems (e.g. XFS and now ext4) which take
care to assemble larger bios.  By implementing stripe_merge(), DM and the
stripe target no longer undermine the filesystem's work by only allowing
a single page per bio.  Buffered IO sees the biggest improvement
(particularly uncached reads, buffered writes to a lesser degree).  This
is especially so for more capable "enterprise" storage LUNs.

The performance improvement has been measured to be ~12-35% -- when a
reasonable chunk_size is used (e.g. 64K) in conjunction with a stripe
count that is a power of 2.

In contrast, the performance penalty is ~5-7% for the pathological worst
case stripe configuration (small chunk_size with a stripe count that is
not a power of 2).  The reason for this is that stripe_map_sector() is
now called once for every call to dm_merge_bvec().  stripe_map_sector()
will use slower division if stripe count isn't a power of 2.

Signed-off-by: Mustafa Mesanovic <mume@linux.vnet.ibm.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
2011-03-24 13:54:35 +00:00
..
bitmap.c md: Don't let implementation detail of curr_resync leak out through sysfs. 2011-01-14 09:14:34 +11:00
bitmap.h md: use sector_t in bitmap_get_counter 2010-10-28 17:32:26 +11:00
dm-bio-record.h
dm-crypt.c dm crypt: wipe keys string immediately after key is set 2011-03-24 13:54:27 +00:00
dm-delay.c dm: convert workqueues to alloc_ordered 2011-01-13 19:59:57 +00:00
dm-exception-store.c dm snapshot: test chunk size against both origin and snapshot 2010-08-12 04:13:51 +01:00
dm-exception-store.h dm snapshot: test chunk size against both origin and snapshot 2010-08-12 04:13:51 +01:00
dm-flakey.c dm: add flakey target 2011-03-24 13:54:24 +00:00
dm-io.c dm: implement REQ_FLUSH/FUA support for bio-based dm 2010-09-10 12:35:38 +02:00
dm-ioctl.c dm ioctl: add flag to wipe buffers for secure data 2011-03-24 13:54:30 +00:00
dm-kcopyd.c dm: use non reentrant workqueues if equivalent 2011-01-13 19:59:58 +00:00
dm-linear.c dm: use dm_target_offset macro 2010-08-12 04:14:11 +01:00
dm-log-userspace-base.c dm log userspace: add version number to comms 2011-01-13 19:59:52 +00:00
dm-log-userspace-transfer.c netlink: kill eff_cap from struct netlink_skb_parms 2011-03-03 13:32:07 -08:00
dm-log-userspace-transfer.h
dm-log.c dm: fix opening log and cow devices for read only tables 2011-03-24 13:52:14 +00:00
dm-mpath.c dm mpath: allow table load with no priority groups 2011-03-24 13:54:33 +00:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid1.c dm: use non reentrant workqueues if equivalent 2011-01-13 19:59:58 +00:00
dm-raid.c dm: raid456 basic support 2011-01-13 20:00:02 +00:00
dm-region-hash.c dm: implement REQ_FLUSH/FUA support for bio-based dm 2010-09-10 12:35:38 +02:00
dm-round-robin.c
dm-service-time.c
dm-snap-persistent.c dm snapshot: persistent make metadata_wq multithreaded 2011-01-13 19:59:59 +00:00
dm-snap-transient.c
dm-snap.c dm: fix opening log and cow devices for read only tables 2011-03-24 13:52:14 +00:00
dm-stripe.c dm stripe: implement merge method 2011-03-24 13:54:35 +00:00
dm-sysfs.c
dm-table.c block: restore multiple bd_link_disk_holder() support 2011-01-14 18:44:22 +01:00
dm-target.c dm: error return error for discards 2010-08-12 04:14:14 +01:00
dm-uevent.c
dm-uevent.h
dm-zero.c dm: zero silently drop discards 2010-08-12 04:14:12 +01:00
dm.c dm: remove superfluous irq disablement in dm_request_fn 2011-01-13 20:00:00 +00:00
dm.h dm: linear support discard 2010-08-12 04:14:08 +01:00
faulty.c md: use separate bio pool for each md device. 2010-10-28 17:36:15 +11:00
Kconfig dm: add flakey target 2011-03-24 13:54:24 +00:00
linear.c md: avoid spinlock problem in blk_throtl_exit 2011-02-21 18:25:57 +11:00
linear.h
Makefile dm: add flakey target 2011-03-24 13:54:24 +00:00
md.c Merge branch 'for-2.6.39' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2011-03-16 08:20:19 -07:00
md.h md: Fix - again - partition detection when array becomes active 2011-02-24 17:26:41 +11:00
multipath.c md: avoid spinlock problem in blk_throtl_exit 2011-02-21 18:25:57 +11:00
multipath.h
raid0.c md: avoid spinlock problem in blk_throtl_exit 2011-02-21 18:25:57 +11:00
raid0.h md: fix handling of array level takeover that re-arranges devices. 2010-06-24 13:33:24 +10:00
raid1.c md: avoid spinlock problem in blk_throtl_exit 2011-02-21 18:25:57 +11:00
raid1.h md/raid1: discard unused variable. 2010-10-29 16:40:33 +11:00
raid5.c md: avoid spinlock problem in blk_throtl_exit 2011-02-21 18:25:57 +11:00
raid5.h md: implment REQ_FLUSH/FUA support 2010-09-10 12:35:38 +02:00
raid10.c md: avoid spinlock problem in blk_throtl_exit 2011-02-21 18:25:57 +11:00
raid10.h md: fix handling of array level takeover that re-arranges devices. 2010-06-24 13:33:24 +10:00