Commit 16d80c54 authored by Ilya Dryomov's avatar Ilya Dryomov

rbd: set io_min, io_opt and discard_granularity to alloc_size

Now that we have alloc_size that controls our discard behavior, it
doesn't make sense to have these set to object (set) size.  alloc_size
defaults to 64k, but because discard_granularity is likely 4M, only
ranges that are equal to or bigger than 4M can be considered during
fstrim.  A smaller io_min is also more likely to be met, resulting in
fewer deferred writes on bluestore OSDs.
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
Reviewed-by: default avatarJason Dillaman <dillaman@redhat.com>
parent 9e98c678
...@@ -833,7 +833,7 @@ static int parse_rbd_opts_token(char *c, void *private) ...@@ -833,7 +833,7 @@ static int parse_rbd_opts_token(char *c, void *private)
pctx->opts->queue_depth = intval; pctx->opts->queue_depth = intval;
break; break;
case Opt_alloc_size: case Opt_alloc_size:
if (intval < 1) { if (intval < SECTOR_SIZE) {
pr_err("alloc_size out of range\n"); pr_err("alloc_size out of range\n");
return -EINVAL; return -EINVAL;
} }
...@@ -4203,12 +4203,12 @@ static int rbd_init_disk(struct rbd_device *rbd_dev) ...@@ -4203,12 +4203,12 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
q->limits.max_sectors = queue_max_hw_sectors(q); q->limits.max_sectors = queue_max_hw_sectors(q);
blk_queue_max_segments(q, USHRT_MAX); blk_queue_max_segments(q, USHRT_MAX);
blk_queue_max_segment_size(q, UINT_MAX); blk_queue_max_segment_size(q, UINT_MAX);
blk_queue_io_min(q, objset_bytes); blk_queue_io_min(q, rbd_dev->opts->alloc_size);
blk_queue_io_opt(q, objset_bytes); blk_queue_io_opt(q, rbd_dev->opts->alloc_size);
if (rbd_dev->opts->trim) { if (rbd_dev->opts->trim) {
blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); blk_queue_flag_set(QUEUE_FLAG_DISCARD, q);
q->limits.discard_granularity = objset_bytes; q->limits.discard_granularity = rbd_dev->opts->alloc_size;
blk_queue_max_discard_sectors(q, objset_bytes >> SECTOR_SHIFT); blk_queue_max_discard_sectors(q, objset_bytes >> SECTOR_SHIFT);
blk_queue_max_write_zeroes_sectors(q, objset_bytes >> SECTOR_SHIFT); blk_queue_max_write_zeroes_sectors(q, objset_bytes >> SECTOR_SHIFT);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment