Message ID | 20170428151539.25514-3-ming.lei@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 04/28/2017 09:15 AM, Ming Lei wrote: > The hardware queue depth can be resized via blk_mq_update_nr_requests(), > so introduce this helper for retrieving queue's depth easily. > > Signed-off-by: Ming Lei <ming.lei@redhat.com> > --- > block/blk-mq.c | 12 ++++++++++++ > block/blk-mq.h | 1 + > 2 files changed, 13 insertions(+) > > diff --git a/block/blk-mq.c b/block/blk-mq.c > index e530bc54f0d9..04761fb76ab4 100644 > --- a/block/blk-mq.c > +++ b/block/blk-mq.c > @@ -2637,6 +2637,18 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set) > } > EXPORT_SYMBOL(blk_mq_free_tag_set); > > +/* > + * Queue depth can be changed via blk_mq_update_nr_requests(), > + * so use this helper to retrieve queue's depth. > + */ > +int blk_mq_get_queue_depth(struct request_queue *q) > +{ > + /* All queues have same queue depth */ > + struct blk_mq_tags *tags = q->tag_set->tags[0]; > + > + return tags->bitmap_tags.sb.depth; > +} What about the per-hw queue tag space? q->nr_requests is device side, this might not be.
On Fri, Apr 28, 2017 at 12:23:38PM -0600, Jens Axboe wrote: > On 04/28/2017 09:15 AM, Ming Lei wrote: > > The hardware queue depth can be resized via blk_mq_update_nr_requests(), > > so introduce this helper for retrieving queue's depth easily. > > > > Signed-off-by: Ming Lei <ming.lei@redhat.com> > > --- > > block/blk-mq.c | 12 ++++++++++++ > > block/blk-mq.h | 1 + > > 2 files changed, 13 insertions(+) > > > > diff --git a/block/blk-mq.c b/block/blk-mq.c > > index e530bc54f0d9..04761fb76ab4 100644 > > --- a/block/blk-mq.c > > +++ b/block/blk-mq.c > > @@ -2637,6 +2637,18 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set) > > } > > EXPORT_SYMBOL(blk_mq_free_tag_set); > > > > +/* > > + * Queue depth can be changed via blk_mq_update_nr_requests(), > > + * so use this helper to retrieve queue's depth. > > + */ > > +int blk_mq_get_queue_depth(struct request_queue *q) > > +{ > > + /* All queues have same queue depth */ > > + struct blk_mq_tags *tags = q->tag_set->tags[0]; > > + > > + return tags->bitmap_tags.sb.depth; > > +} > > What about the per-hw queue tag space? q->nr_requests is device side, > this might not be. This helper returns hw queue's actual queue depth, so only hw tag space is involved. We don't have per-hw queue tag space yet, and the tag space should belong to tag set actually, but the hw queue number can be one. And now all hw queues have same queue depth, either it is set->queue_depth, or the new value updated in blk_mq_update_nr_requests(). And tags's depth is always the latest value. The similar comment can be found in kyber_sched_tags_shift() too. BTW, this patch missed reserved tags, will fix it in V1. Thanks, Ming
On Fri, Apr 28, 2017 at 11:15:37PM +0800, Ming Lei wrote: > The hardware queue depth can be resized via blk_mq_update_nr_requests(), > so introduce this helper for retrieving queue's depth easily. One nit below. If the per-hardware queue tag space situation changes, we can revisit this and the similar thing in Kyber. Reviewed-by: Omar Sandoval <osandov@fb.com> > Signed-off-by: Ming Lei <ming.lei@redhat.com> > --- > block/blk-mq.c | 12 ++++++++++++ > block/blk-mq.h | 1 + > 2 files changed, 13 insertions(+) > > diff --git a/block/blk-mq.c b/block/blk-mq.c > index e530bc54f0d9..04761fb76ab4 100644 > --- a/block/blk-mq.c > +++ b/block/blk-mq.c > @@ -2637,6 +2637,18 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set) > } > EXPORT_SYMBOL(blk_mq_free_tag_set); > > +/* > + * Queue depth can be changed via blk_mq_update_nr_requests(), > + * so use this helper to retrieve queue's depth. > + */ > +int blk_mq_get_queue_depth(struct request_queue *q) > +{ > + /* All queues have same queue depth */ > + struct blk_mq_tags *tags = q->tag_set->tags[0]; Not sure what's going on with the spacing here. Tab instead of a space? > + return tags->bitmap_tags.sb.depth; > +} > + > int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr) > { > struct blk_mq_tag_set *set = q->tag_set; > diff --git a/block/blk-mq.h b/block/blk-mq.h > index 2814a14e529c..8085d5989cf5 100644 > --- a/block/blk-mq.h > +++ b/block/blk-mq.h > @@ -166,6 +166,7 @@ void __blk_mq_finish_request(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx, > void blk_mq_finish_request(struct request *rq); > struct request *__blk_mq_alloc_request(struct blk_mq_alloc_data *data, > unsigned int op); > +int blk_mq_get_queue_depth(struct request_queue *q); > > static inline bool blk_mq_hctx_stopped(struct blk_mq_hw_ctx *hctx) > { > -- > 2.9.3 >
On Wed, May 03, 2017 at 09:55:30AM -0700, Omar Sandoval wrote: > On Fri, Apr 28, 2017 at 11:15:37PM +0800, Ming Lei wrote: > > The hardware queue depth can be resized via blk_mq_update_nr_requests(), > > so introduce this helper for retrieving queue's depth easily. > > One nit below. If the per-hardware queue tag space situation changes, we > can revisit this and the similar thing in Kyber. OK, will add comment about this situation in V3. > > Reviewed-by: Omar Sandoval <osandov@fb.com> > > > Signed-off-by: Ming Lei <ming.lei@redhat.com> > > --- > > block/blk-mq.c | 12 ++++++++++++ > > block/blk-mq.h | 1 + > > 2 files changed, 13 insertions(+) > > > > diff --git a/block/blk-mq.c b/block/blk-mq.c > > index e530bc54f0d9..04761fb76ab4 100644 > > --- a/block/blk-mq.c > > +++ b/block/blk-mq.c > > @@ -2637,6 +2637,18 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set) > > } > > EXPORT_SYMBOL(blk_mq_free_tag_set); > > > > +/* > > + * Queue depth can be changed via blk_mq_update_nr_requests(), > > + * so use this helper to retrieve queue's depth. > > + */ > > +int blk_mq_get_queue_depth(struct request_queue *q) > > +{ > > + /* All queues have same queue depth */ > > + struct blk_mq_tags *tags = q->tag_set->tags[0]; > > Not sure what's going on with the spacing here. Tab instead of a space? Either one should be fine, and I am sure this patch is warning/error free when checking with ./scripts/checkpatch.pl, :-) Thanks, Ming
diff --git a/block/blk-mq.c b/block/blk-mq.c index e530bc54f0d9..04761fb76ab4 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2637,6 +2637,18 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set) } EXPORT_SYMBOL(blk_mq_free_tag_set); +/* + * Queue depth can be changed via blk_mq_update_nr_requests(), + * so use this helper to retrieve queue's depth. + */ +int blk_mq_get_queue_depth(struct request_queue *q) +{ + /* All queues have same queue depth */ + struct blk_mq_tags *tags = q->tag_set->tags[0]; + + return tags->bitmap_tags.sb.depth; +} + int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr) { struct blk_mq_tag_set *set = q->tag_set; diff --git a/block/blk-mq.h b/block/blk-mq.h index 2814a14e529c..8085d5989cf5 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h @@ -166,6 +166,7 @@ void __blk_mq_finish_request(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx, void blk_mq_finish_request(struct request *rq); struct request *__blk_mq_alloc_request(struct blk_mq_alloc_data *data, unsigned int op); +int blk_mq_get_queue_depth(struct request_queue *q); static inline bool blk_mq_hctx_stopped(struct blk_mq_hw_ctx *hctx) {
The hardware queue depth can be resized via blk_mq_update_nr_requests(), so introduce this helper for retrieving queue's depth easily. Signed-off-by: Ming Lei <ming.lei@redhat.com> --- block/blk-mq.c | 12 ++++++++++++ block/blk-mq.h | 1 + 2 files changed, 13 insertions(+)