]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
raid5: add an option to avoid copy data from bio to stripe cache
authorShaohua Li <shli@kernel.org>
Wed, 21 May 2014 09:57:44 +0000 (17:57 +0800)
committerNeilBrown <neilb@suse.de>
Thu, 29 May 2014 06:59:47 +0000 (16:59 +1000)
commitd592a9969141e67a3874c808999a4db4bf82ed83
tree3cd94df571c6c289394b12efe20ed3874b132a37
parentf2e06c58841b3e89eaacfa88ce14389d311c54a8
raid5: add an option to avoid copy data from bio to stripe cache

The stripe cache has two goals:
1. cache data, so next time if data can be found in stripe cache, disk access
can be avoided.
2. stable data. data is copied from bio to stripe cache and calculated parity.
data written to disk is from stripe cache, so if upper layer changes bio data,
data written to disk isn't impacted.

In my environment, I can guarantee 2 will not happen. And BDI_CAP_STABLE_WRITES
can guarantee 2 too. For 1, it's not common too. block plug mechanism will
dispatch a bunch of sequentail small requests together. And since I'm using
SSD, I'm using small chunk size. It's rare case stripe cache is really useful.

So I'd like to avoid the copy from bio to stripe cache and it's very helpful
for performance. In my 1M randwrite tests, avoid the copy can increase the
performance more than 30%.

Of course, this shouldn't be enabled by default. It's reported enabling
BDI_CAP_STABLE_WRITES can harm some workloads before, so I added an option to
control it.

Neilb:
  changed BUG_ON to WARN_ON
  Removed some assignments from raid5_build_block which are now not needed.

Signed-off-by: Shaohua Li <shli@fusionio.com>
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid5.c
drivers/md/raid5.h