* [PATCH] md - 2 of 2 - Set ra_pages for raid0/raid5 devices properly.
@ 2003-11-21 3:21 NeilBrown
0 siblings, 0 replies; only message in thread
From: NeilBrown @ 2003-11-21 3:21 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-raid
### Comments for ChangeSet
stripe to be effective. This patch sets ra_pages
appropriately.
----------- Diffstat output ------------
./drivers/md/raid0.c | 16 ++++++++++++++++
./drivers/md/raid5.c | 10 ++++++++++
2 files changed, 26 insertions(+)
diff ./drivers/md/raid0.c~current~ ./drivers/md/raid0.c
--- ./drivers/md/raid0.c~current~ 2003-11-21 14:10:24.000000000 +1100
+++ ./drivers/md/raid0.c 2003-11-21 14:15:45.000000000 +1100
@@ -311,6 +311,22 @@ static int raid0_run (mddev_t *mddev)
conf->hash_spacing++;
}
+ /* calculate the max read-ahead size.
+ * For read-ahead of large files to be effective, we need to
+ * readahead at least a whole stripe. i.e. number of devices
+ * multiplied by chunk size.
+ * If an individual device has an ra_pages greater than the
+ * chunk size, then we will not drive that device as hard as it
+ * wants. We consider this a configuration error: a larger
+ * chunksize should be used in that case.
+ */
+ {
+ int stripe = mddev->raid_disks * mddev->chunk_size / PAGE_CACHE_SIZE;
+ if (mddev->queue->backing_dev_info.ra_pages < stripe)
+ mddev->queue->backing_dev_info.ra_pages = stripe;
+ }
+
+
blk_queue_merge_bvec(mddev->queue, raid0_mergeable_bvec);
return 0;
diff ./drivers/md/raid5.c~current~ ./drivers/md/raid5.c
--- ./drivers/md/raid5.c~current~ 2003-11-21 13:59:18.000000000 +1100
+++ ./drivers/md/raid5.c 2003-11-21 14:16:52.000000000 +1100
@@ -1571,6 +1571,16 @@ memory = conf->max_nr_stripes * (sizeof(
print_raid5_conf(conf);
+ /* read-ahead size must cover a whole stripe, which is
+ * (n-1) * chunksize where 'n' is the number of raid devices
+ */
+ {
+ int stripe = (mddev->raid_disks-1) * mddev->chunk_size
+ / PAGE_CACHE_SIZE;
+ if (mddev->queue->backing_dev_info.ra_pages < stripe)
+ mddev->queue->backing_dev_info.ra_pages = stripe;
+ }
+
/* Ok, everything is just fine now */
mddev->array_size = mddev->size * (mddev->raid_disks - 1);
return 0;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-11-21 3:21 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-11-21 3:21 [PATCH] md - 2 of 2 - Set ra_pages for raid0/raid5 devices properly NeilBrown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox