diff options
author | Josh Durgin <josh.durgin@dreamhost.com> | 2011-07-22 20:35:23 +0200 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2011-07-26 20:29:35 +0200 |
commit | 029bcbd8b076fd19787b8c73e58dd0a6f2c0caf1 (patch) | |
tree | 305128db78ecfb09e6a236caeeac1fbb9ece1175 | |
parent | ceph: set up readahead size when rsize is not passed (diff) | |
download | linux-029bcbd8b076fd19787b8c73e58dd0a6f2c0caf1.tar.xz linux-029bcbd8b076fd19787b8c73e58dd0a6f2c0caf1.zip |
rbd: set blk_queue request sizes to object size
This improves performance since more requests can be merged.
Reviewed-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
-rw-r--r-- | drivers/block/rbd.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 7392d7af7eab..15f65b5f3fc7 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -630,6 +630,14 @@ static int rbd_get_num_segments(struct rbd_image_header *header, } /* + * returns the size of an object in the image + */ +static u64 rbd_obj_bytes(struct rbd_image_header *header) +{ + return 1 << header->obj_order; +} + +/* * bio helpers */ @@ -1765,6 +1773,13 @@ static int rbd_init_disk(struct rbd_device *rbd_dev) q = blk_init_queue(rbd_rq_fn, &rbd_dev->lock); if (!q) goto out_disk; + + /* set io sizes to object size */ + blk_queue_max_hw_sectors(q, rbd_obj_bytes(&rbd_dev->header) / 512ULL); + blk_queue_max_segment_size(q, rbd_obj_bytes(&rbd_dev->header)); + blk_queue_io_min(q, rbd_obj_bytes(&rbd_dev->header)); + blk_queue_io_opt(q, rbd_obj_bytes(&rbd_dev->header)); + blk_queue_merge_bvec(q, rbd_merge_bvec); disk->queue = q; |