All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch]raid5: fix directio regression
@ 2012-08-07  3:22 Shaohua Li
  2012-08-07  5:13 ` Jianpeng Ma
  0 siblings, 1 reply; 28+ messages in thread
From: Shaohua Li @ 2012-08-07  3:22 UTC (permalink / raw)
  To: linux-raid; +Cc: neilb, majianpeng

My directIO randomwrite 4k workload shows a 10~20% regression caused by commit
895e3c5c58a80bb. directIO usually is random IO and if request size isn't big
(which is the common case), delay handling of the stripe hasn't any advantages.
For big size request, delay can still reduce IO.

Signed-off-by: Shaohua Li <shli@fusionio.com>
---
 drivers/md/raid5.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Index: linux/drivers/md/raid5.c
===================================================================
--- linux.orig/drivers/md/raid5.c	2012-08-07 11:04:48.442834682 +0800
+++ linux/drivers/md/raid5.c	2012-08-07 11:09:08.743562203 +0800
@@ -4076,6 +4076,7 @@ static void make_request(struct mddev *m
 	struct stripe_head *sh;
 	const int rw = bio_data_dir(bi);
 	int remaining;
+	bool large_request;
 
 	if (unlikely(bi->bi_rw & REQ_FLUSH)) {
 		md_flush_request(mddev, bi);
@@ -4089,6 +4090,11 @@ static void make_request(struct mddev *m
 	     chunk_aligned_read(mddev,bi))
 		return;
 
+	if (mddev->new_chunk_sectors < mddev->chunk_sectors)
+		large_request = (bi->bi_size >> 9) > mddev->new_chunk_sectors;
+	else
+		large_request = (bi->bi_size >> 9) > mddev->chunk_sectors;
+
 	logical_sector = bi->bi_sector & ~((sector_t)STRIPE_SECTORS-1);
 	last_sector = bi->bi_sector + (bi->bi_size>>9);
 	bi->bi_next = NULL;
@@ -4192,7 +4198,8 @@ static void make_request(struct mddev *m
 			finish_wait(&conf->wait_for_overlap, &w);
 			set_bit(STRIPE_HANDLE, &sh->state);
 			clear_bit(STRIPE_DELAYED, &sh->state);
-			if ((bi->bi_rw & REQ_NOIDLE) &&
+			if ((bi->bi_rw & REQ_SYNC) &&
+			    ((bi->bi_rw & REQ_NOIDLE) || !large_request) &&
 			    !test_and_set_bit(STRIPE_PREREAD_ACTIVE, &sh->state))
 				atomic_inc(&conf->preread_active_stripes);
 			release_stripe_plug(mddev, sh);

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2012-09-11  0:44 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-07  3:22 [patch]raid5: fix directio regression Shaohua Li
2012-08-07  5:13 ` Jianpeng Ma
2012-08-07  5:32   ` Shaohua Li
2012-08-07  5:42     ` Jianpeng Ma
2012-08-07  6:21     ` Jianpeng Ma
2012-08-08  2:58       ` Shaohua Li
2012-08-08  5:21         ` Jianpeng Ma
2012-08-08 12:53           ` Shaohua Li
2012-08-09  1:20             ` Jianpeng Ma
2012-08-09  1:32               ` NeilBrown
2012-08-09  2:27                 ` Jianpeng Ma
2012-08-09  5:07                 ` Shaohua Li
2012-08-14  6:33                   ` [patch v2]raid5: " Shaohua Li
2012-08-15  0:56                     ` NeilBrown
2012-08-15  1:20                       ` kedacomkernel
2012-08-15  1:44                       ` Shaohua Li
2012-08-15  1:54                         ` Jianpeng Ma
2012-08-16  7:36                         ` Jianpeng Ma
2012-08-16  9:42                           ` Shaohua Li
2012-08-17  1:00                             ` Jianpeng Ma
2012-08-23  6:08                             ` Shaohua Li
2012-08-23  6:46                               ` Jianpeng Ma
2012-08-23  7:55                                 ` Shaohua Li
2012-08-23  8:11                                   ` Jianpeng Ma
2012-08-23 12:17                                   ` Jianpeng Ma
2012-08-24  3:12                                     ` Shaohua Li
2012-08-24  4:21                                       ` kedacomkernel
2012-09-11  0:44                                         ` NeilBrown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.