Dan Williams
8b3e6cdc53
md: introduce get_priority_stripe() to improve raid456 write performance
...
Improve write performance by preventing the delayed_list from dumping all its
stripes onto the handle_list in one shot. Delayed stripes are now further
delayed by being held on the 'hold_list'. The 'hold_list' is bypassed when:
* a STRIPE_IO_STARTED stripe is found at the head of 'handle_list'
* 'handle_list' is empty and i/o is being done to satisfy full stripe-width
write requests
* 'bypass_count' is less than 'bypass_threshold'. By default the threshold
is 1, i.e. every other stripe handled is a preread stripe provided the
top two conditions are false.
Benchmark data:
System: 2x Xeon 5150, 4x SATA, mem=1GB
Baseline: 2.6.24-rc7
Configuration: mdadm --create /dev/md0 /dev/sd[b-e] -n 4 -l 5 --assume-clean
Test1: dd if=/dev/zero of=/dev/md0 bs=1024k count=2048
* patched: +33% (stripe_cache_size = 256), +25% (stripe_cache_size = 512)
Test2: tiobench --size 2048 --numruns 5 --block 4096 --block 131072 (XFS)
* patched: +13%
* patched + preread_bypass_threshold = 0: +37%
Changes since v1:
* reduce bypass_threshold from (chunk_size / sectors_per_chunk) to (1) and
make it configurable. This defaults to fairness and modest performance
gains out of the box.
Changes since v2:
* [neilb@suse.de ]: kill STRIPE_PRIO_HI and preread_needed as they are not
necessary, the important change was clearing STRIPE_DELAYED in
add_stripe_bio and this has been moved out to make_request for the hang
fix.
* [neilb@suse.de ]: simplify get_priority_stripe
* [dan.j.williams@intel.com ]: reset the bypass_count when ->hold_list is
sampled empty (+11%)
* [dan.j.williams@intel.com ]: decrement the bypass_count at the detection
of stripes being naturally promoted off of hold_list +2%. Note, resetting
bypass_count instead of decrementing on these events yields +4% but that is
probably too aggressive.
Changes since v3:
* cosmetic fixups
Tested-by: James W. Laferriere <babydr@baby-dragons.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
Signed-off-by: Neil Brown <neilb@suse.de >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2008-04-28 08:58:42 -07:00
..
2008-02-08 09:22:32 -08:00
2008-04-24 14:07:46 -03:00
2008-04-14 09:57:06 -07:00
2008-04-25 13:00:11 -04:00
2008-04-19 11:29:08 +01:00
2008-04-25 14:52:32 -07:00
2008-04-22 20:10:10 +01:00
2008-04-14 11:15:49 +02:00
2008-04-14 11:15:44 +02:00
2008-04-14 11:15:54 +02:00
2008-04-25 13:00:11 -04:00
2008-04-28 08:58:42 -07:00
2008-04-02 00:43:01 -04:00
2008-04-17 23:56:30 -07:00
2008-04-24 11:46:16 -07:00
2008-04-24 21:16:52 -07:00
2008-02-08 09:22:30 -08:00
2008-02-14 02:43:39 -05:00
2008-04-20 21:47:02 -07:00
2008-02-19 10:04:00 +01:00
2008-03-28 22:14:15 -04:00
2008-03-27 14:51:39 -04:00
2008-02-24 00:27:33 -05:00
2008-03-23 22:04:31 -07:00
2008-02-08 09:22:38 -08:00
2008-03-04 13:41:23 +01:00
2008-04-19 19:10:33 -07:00
2008-04-19 09:59:43 +10:00
2008-04-21 09:50:08 +02:00
2008-04-28 08:58:19 -07:00
2008-04-26 19:21:17 +02:00
2008-04-21 09:51:05 +02:00
2008-04-28 08:58:25 -07:00
2008-04-22 15:16:32 -05:00
2008-02-13 16:21:18 -08:00
2008-04-28 08:58:19 -07:00
2008-04-28 08:58:26 -07:00
2008-04-21 09:50:08 +02:00
2008-03-04 16:35:12 -08:00
2008-04-04 14:46:26 -07:00
2008-04-17 20:05:38 +02:00
2008-03-30 14:20:23 -07:00
2008-02-09 23:24:09 +01:00
2008-04-26 17:44:55 +02:00
2008-03-04 16:35:12 -08:00
2008-02-14 20:58:05 -08:00
2008-02-26 18:42:44 -08:00
2008-04-18 22:16:54 -04:00
2008-03-26 00:45:26 -04:00
2008-04-28 08:58:19 -07:00
2008-04-28 08:58:19 -07:00
2008-04-21 10:19:23 +08:00
2008-02-08 15:33:33 -08:00
2008-04-23 00:04:38 -04:00
2008-02-14 21:17:08 -08:00
2008-03-04 14:47:06 -08:00
2008-03-04 16:35:12 -08:00
2008-04-25 13:27:00 +01:00
2008-04-21 15:49:58 -07:00
2008-04-21 11:35:39 -05:00
2008-04-21 11:22:28 -05:00
2008-04-21 11:35:39 -05:00
2008-04-21 11:22:29 -05:00
2008-02-11 11:06:35 -05:00
2008-04-25 13:26:55 +01:00
2008-04-25 13:26:55 +01:00
2008-02-08 02:09:56 +00:00
2008-04-25 13:26:55 +01:00
2008-04-21 22:38:45 +00:00
2008-02-08 09:22:24 -08:00
2008-04-28 08:58:30 -07:00
2008-04-19 19:19:54 +02:00
2008-02-08 09:22:30 -08:00
2008-02-07 09:02:26 -08:00
2008-02-29 08:06:37 -08:00
2008-04-19 19:10:33 -07:00
2008-02-13 16:21:19 -08:00
2008-03-07 11:11:13 -08:00
2008-04-23 16:13:42 -04:00
2008-02-25 16:54:37 -05:00
2008-02-10 01:11:44 -05:00
2008-04-28 08:58:35 -07:00
2008-04-25 09:23:59 -04:00
2008-04-10 02:02:28 -07:00
2008-03-10 16:33:33 -07:00
2008-02-14 21:13:33 -08:00
2008-04-28 08:58:23 -07:00
2008-04-16 20:09:35 -04:00
2008-02-23 17:12:15 -08:00
2008-03-12 12:34:37 -07:00
2008-04-28 08:58:26 -07:00
2008-03-04 16:35:10 -08:00
2008-03-28 14:45:21 -07:00
2008-02-07 08:42:34 -08:00
2008-04-18 00:46:24 +02:00
2008-04-22 11:34:58 +02:00
2008-04-22 11:34:59 +02:00
2008-04-18 22:22:54 -04:00
2008-04-04 18:36:49 +02:00
2008-04-17 12:22:31 +02:00
2008-04-28 08:58:25 -07:00
2008-04-19 19:10:28 -07:00
2008-04-22 22:16:46 +02:00
2008-04-24 14:09:42 -03:00
2008-04-22 22:16:46 +02:00
2008-02-24 20:03:42 +01:00
2008-04-28 08:58:34 -07:00
2008-03-05 20:58:10 -08:00
2008-04-27 15:38:34 +02:00
2008-04-23 21:25:36 -04:00
2008-03-03 12:20:57 -08:00
2008-02-23 20:09:11 -08:00
2008-04-18 22:16:54 -04:00
2008-04-12 18:48:58 -07:00
2008-04-03 10:06:00 +09:00
2008-04-16 00:48:04 -07:00
2008-03-23 22:05:44 -07:00
2008-04-12 13:43:19 +09:00
2008-03-17 22:48:46 -07:00
2008-03-26 04:39:53 +09:00
2008-04-28 08:58:26 -07:00
2008-02-19 21:00:18 +01:00
2008-04-02 00:41:00 -04:00
2008-04-17 07:47:05 +02:00
2008-04-15 09:25:33 +02:00
2008-03-04 16:35:17 -08:00
2008-04-20 21:47:08 -07:00
2008-02-08 09:22:26 -08:00
2008-02-08 09:22:23 -08:00
2008-04-14 02:30:23 -07:00
2008-04-17 07:47:05 +02:00
2008-04-19 19:19:54 +02:00
2008-04-19 19:10:28 -07:00
2008-04-15 00:30:16 -07:00
2008-02-07 08:42:33 -08:00
2008-02-07 08:42:34 -08:00
2008-04-18 22:16:54 -04:00
2008-04-18 22:16:54 -04:00
2008-04-21 16:36:46 -07:00
2008-04-26 17:36:37 +02:00
2008-04-19 19:10:19 -07:00
2008-04-18 22:16:54 -04:00
2008-04-15 01:30:32 -04:00
2008-04-17 20:05:42 +02:00
2008-04-28 08:58:32 -07:00
2008-04-19 19:44:57 +02:00
2008-04-27 18:21:46 +03:00
2008-04-27 12:00:27 +03:00
2008-04-27 12:01:15 +03:00
2008-04-27 18:21:37 +03:00
2008-04-24 23:49:30 +01:00
2008-03-28 11:05:54 +11:00
2008-04-25 00:46:09 -04:00
2008-04-11 08:29:13 -07:00
2008-04-28 08:58:32 -07:00
2008-03-31 10:41:44 +01:00
2008-04-15 21:22:17 +10:00
2008-02-26 14:03:47 +09:00
2008-03-04 16:35:14 -08:00
2008-04-15 19:35:41 -07:00
2008-03-27 14:51:39 -04:00
2008-03-04 16:35:15 -08:00
2008-04-28 08:58:25 -07:00
2008-04-19 19:10:19 -07:00
2008-04-28 08:58:25 -07:00
2008-04-19 19:10:29 -07:00
2008-04-24 14:07:43 -03:00
2008-04-19 19:10:28 -07:00
2008-04-28 08:58:20 -07:00
2008-04-28 08:58:24 -07:00
2008-04-28 08:58:25 -07:00
2008-04-23 00:05:03 -04:00
2008-02-14 20:58:04 -08:00
2008-02-13 16:21:19 -08:00
2008-04-23 00:04:51 -04:00
2008-04-13 23:21:16 -07:00
2008-04-04 10:44:42 +09:00
2008-04-07 12:15:39 -05:00
2008-02-13 16:21:18 -08:00
2008-02-08 09:22:31 -08:00
2008-02-14 21:13:33 -08:00
2008-02-08 09:22:41 -08:00
2008-04-28 08:58:29 -07:00
2008-03-22 17:18:47 -07:00
2008-04-16 02:02:18 -07:00
2008-04-14 11:15:52 +02:00
2008-04-14 11:15:49 +02:00
2008-03-04 12:28:49 -08:00
2008-04-23 16:13:37 -04:00
2008-04-19 16:54:56 -04:00
2008-04-19 16:55:29 -04:00
2008-04-19 16:53:15 -04:00
2008-03-06 15:30:41 -05:00
2008-04-28 08:58:19 -07:00
2008-04-28 08:58:32 -07:00
2008-04-17 07:46:11 +10:00
2008-04-17 07:46:11 +10:00
2008-04-07 13:49:23 +10:00
2008-04-28 08:58:18 -07:00
2008-04-28 08:58:22 -07:00
2008-02-13 16:21:18 -08:00
2008-04-18 22:22:54 -04:00
2008-02-14 21:13:33 -08:00
2008-03-10 18:01:19 -07:00
2008-04-20 21:47:03 -07:00
2008-04-20 21:47:03 -07:00
2008-04-20 21:47:07 -07:00
2008-02-07 23:11:56 -08:00
2008-04-25 02:08:52 -04:00
2008-02-08 09:22:23 -08:00
2008-02-13 16:21:18 -08:00
2008-04-04 10:44:42 +09:00
2008-03-17 22:46:46 -07:00
2008-04-19 19:10:26 -07:00
2008-04-19 19:10:26 -07:00
2008-03-13 10:09:27 +11:00
2008-04-11 08:06:44 -07:00
2008-04-28 08:58:26 -07:00
2008-02-08 09:22:31 -08:00
2008-03-07 11:08:40 -08:00
2008-02-08 09:22:26 -08:00
2008-04-28 08:58:33 -07:00
2008-04-28 08:58:33 -07:00
2008-04-19 19:10:33 -07:00
2008-02-29 18:46:50 +01:00
2008-03-19 18:53:36 -07:00
2008-02-08 09:22:41 -08:00
2008-04-23 22:10:48 -07:00
2008-02-13 16:21:18 -08:00
2008-04-07 12:15:45 -05:00
2008-04-28 08:58:26 -07:00
2008-04-28 08:58:26 -07:00
2008-04-28 08:58:26 -07:00
2008-04-19 09:53:46 +10:00
2008-04-17 10:43:01 -04:00
2008-04-02 00:10:28 -07:00
2008-04-23 00:04:38 -04:00
2008-04-25 00:25:08 +02:00
2008-02-07 08:42:34 -08:00
2008-04-28 08:58:32 -07:00
2008-04-17 20:05:37 +02:00
2008-02-26 14:52:45 +09:00
2008-04-15 13:26:52 -04:00
2008-02-07 08:42:30 -08:00
2008-04-28 08:58:25 -07:00
2008-02-08 09:22:27 -08:00
2008-04-21 15:51:36 -07:00
2008-03-06 16:21:49 -08:00
2008-04-14 18:53:02 +03:00
2008-03-04 16:35:13 -08:00
2008-03-04 16:35:13 -08:00
2008-03-17 07:49:27 -04:00
2008-04-17 12:22:31 +02:00
2008-02-07 08:42:34 -08:00
2008-04-28 08:58:36 -07:00
2008-04-28 08:58:20 -07:00
2008-02-09 11:08:33 -08:00
2008-04-28 08:58:29 -07:00
2008-04-18 22:16:54 -04:00
2008-04-19 19:44:59 +02:00
2008-04-22 15:16:31 -05:00
2008-03-21 16:33:01 -07:00
2008-04-15 19:35:41 -07:00
2008-04-17 12:22:30 +02:00
2008-03-10 18:01:18 -07:00
2008-03-09 08:42:57 +01:00
2008-02-08 09:22:37 -08:00
2008-03-09 08:42:57 +01:00
2008-04-19 19:44:59 +02:00
2008-04-19 19:10:33 -07:00
2008-04-17 20:05:37 +02:00
2008-02-08 09:22:39 -08:00
2008-04-17 20:05:36 +02:00
2008-04-17 14:22:23 +02:00
2008-03-23 22:06:51 -07:00
2008-04-24 21:16:42 -07:00
2008-04-24 21:16:57 -07:00
2008-04-24 21:16:54 -07:00
2008-02-08 09:22:23 -08:00
2008-04-24 14:07:56 -03:00
2008-02-18 12:18:05 -03:00
2008-04-07 13:14:22 -07:00
2008-04-28 08:58:21 -07:00
2008-04-28 08:58:23 -07:00
2008-02-13 16:21:18 -08:00
2008-03-06 15:30:40 -05:00
2008-04-17 09:24:58 -04:00
2008-02-13 16:21:18 -08:00
2008-04-25 00:29:34 -07:00