aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Moyer <jmoyer@redhat.com>2015-08-13 14:57:56 -0400
committerJens Axboe <axboe@fb.com>2015-08-18 16:21:13 -0400
commit30e2bc08b2bb7c069246feee78f7ed4006e130fe (patch)
tree51526a90f372dca0811c93e0311c5b5301d094be
parent0048b4837affd153897ed1222283492070027aa9 (diff)
Revert "block: remove artifical max_hw_sectors cap"
This reverts commit 34b48db66e08ca1c1bc07cf305d672ac940268dc. That commit caused performance regressions for streaming I/O workloads on a number of different storage devices, from SATA disks to external RAID arrays. It also managed to trip up some buggy firmware in at least one drive, causing data corruption. The next patch will bump the default max_sectors_kb value to 1280, which will accommodate a 10-data-disk stripe write with chunk size 128k. In the testing I've done using iozone, fio, and aio-stress, a value of 1280 does not show a big performance difference from 512. This will hopefully still help the software RAID setup that Christoph saw the original performance gains with while still not regressing other storage configurations. Signed-off-by: Jeff Moyer <jmoyer@redhat.com> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--block/blk-settings.c4
-rw-r--r--drivers/block/aoe/aoeblk.c2
-rw-r--r--include/linux/blkdev.h1
3 files changed, 5 insertions, 2 deletions
diff --git a/block/blk-settings.c b/block/blk-settings.c
index 9df73991b231..d27b4e272356 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -236,7 +236,9 @@ void blk_limits_max_hw_sectors(struct queue_limits *limits, unsigned int max_hw_
236 __func__, max_hw_sectors); 236 __func__, max_hw_sectors);
237 } 237 }
238 238
239 limits->max_sectors = limits->max_hw_sectors = max_hw_sectors; 239 limits->max_hw_sectors = max_hw_sectors;
240 limits->max_sectors = min_t(unsigned int, max_hw_sectors,
241 BLK_DEF_MAX_SECTORS);
240} 242}
241EXPORT_SYMBOL(blk_limits_max_hw_sectors); 243EXPORT_SYMBOL(blk_limits_max_hw_sectors);
242 244
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index 46c282fff104..dd73e1ff1759 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -395,7 +395,7 @@ aoeblk_gdalloc(void *vp)
395 WARN_ON(d->flags & DEVFL_TKILL); 395 WARN_ON(d->flags & DEVFL_TKILL);
396 WARN_ON(d->gd); 396 WARN_ON(d->gd);
397 WARN_ON(d->flags & DEVFL_UP); 397 WARN_ON(d->flags & DEVFL_UP);
398 blk_queue_max_hw_sectors(q, 1024); 398 blk_queue_max_hw_sectors(q, BLK_DEF_MAX_SECTORS);
399 q->backing_dev_info.name = "aoe"; 399 q->backing_dev_info.name = "aoe";
400 q->backing_dev_info.ra_pages = READ_AHEAD / PAGE_CACHE_SIZE; 400 q->backing_dev_info.ra_pages = READ_AHEAD / PAGE_CACHE_SIZE;
401 d->bufpool = mp; 401 d->bufpool = mp;
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index a1feff54aeab..9f1e3f8eeed7 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1132,6 +1132,7 @@ extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm);
1132enum blk_default_limits { 1132enum blk_default_limits {
1133 BLK_MAX_SEGMENTS = 128, 1133 BLK_MAX_SEGMENTS = 128,
1134 BLK_SAFE_MAX_SECTORS = 255, 1134 BLK_SAFE_MAX_SECTORS = 255,
1135 BLK_DEF_MAX_SECTORS = 1024,
1135 BLK_MAX_SEGMENT_SIZE = 65536, 1136 BLK_MAX_SEGMENT_SIZE = 65536,
1136 BLK_SEG_BOUNDARY_MASK = 0xFFFFFFFFUL, 1137 BLK_SEG_BOUNDARY_MASK = 0xFFFFFFFFUL,
1137}; 1138};