From: John Garry <john.garry@huawei.com>
To: Ming Lei <ming.lei@redhat.com>
Cc: <axboe@kernel.dk>, <jejb@linux.ibm.com>,
<martin.petersen@oracle.com>, <don.brace@microsemi.com>,
<kashyap.desai@broadcom.com>, <sumit.saxena@broadcom.com>,
<bvanassche@acm.org>, <hare@suse.com>, <hch@lst.de>,
<shivasharan.srikanteshwara@broadcom.com>,
<linux-block@vger.kernel.org>, <linux-scsi@vger.kernel.org>,
<esc.storagedev@microsemi.com>, <chenxiang66@hisilicon.com>,
<megaraidlinux.pdl@broadcom.com>
Subject: Re: [PATCH RFC v7 04/12] blk-mq: Facilitate a shared sbitmap per tagset
Date: Thu, 11 Jun 2020 11:09:43 +0100 [thread overview]
Message-ID: <4a5ef683-91f4-093c-4fed-675f9fcfda31@huawei.com> (raw)
In-Reply-To: <20200611033728.GC453671@T590>
On 11/06/2020 04:37, Ming Lei wrote:
Hi Ming,
Thanks for checking this.
>> bool bt_iter(struct sbitmap *bitmap, unsigned int bitnr, void *data)
>> * We can hit rq == NULL here, because the tagging functions
>> * test and set the bit before assigning ->rqs[].
>> */
>> - if (rq && rq->q == hctx->queue)
>> + if (rq && rq->q == hctx->queue && rq->mq_hctx == hctx)
>> return iter_data->fn(hctx, rq, iter_data->data, reserved);
>> return true;
>> }
>> @@ -466,6 +466,7 @@ static int blk_mq_init_bitmap_tags(struct blk_mq_tags *tags,
>> round_robin, node))
>> goto free_bitmap_tags;
>>
>> + /* We later overwrite these in case of per-set shared sbitmap */
>> tags->bitmap_tags = &tags->__bitmap_tags;
>> tags->breserved_tags = &tags->__breserved_tags;
> You may skip to allocate anything for blk_mq_is_sbitmap_shared(), and
> similar change for blk_mq_free_tags().
I did try that, but it breaks scheduler tags allocation - this is common
code. Maybe I can pass some flag, to avoid the allocation for case of
shared sbitmap and !sched tags. Same for free path.
BTW, if you check patch 7/12, I mentioned that we could use this sbitmap
for iterating to get the per-hctx bitmap, instead of allocating a temp
sbitmap. Maybe it's better.
>
>>
>> @@ -475,7 +476,32 @@ static int blk_mq_init_bitmap_tags(struct blk_mq_tags *tags,
>> return -ENOMEM;
>> }
>>
>> -struct blk_mq_tags *blk_mq_init_tags(unsigned int total_tags,
>> +bool blk_mq_init_shared_sbitmap(struct blk_mq_tag_set *tag_set)
>> +{
>> + unsigned int depth = tag_set->queue_depth - tag_set->reserved_tags;
>> + int alloc_policy = BLK_MQ_FLAG_TO_ALLOC_POLICY(tag_set->flags);
>> + bool round_robin = alloc_policy == BLK_TAG_ALLOC_RR;
>> + int node = tag_set->numa_node;
>> +
>> + if (bt_alloc(&tag_set->__bitmap_tags, depth, round_robin, node))
>> + return false;
>> + if (bt_alloc(&tag_set->__breserved_tags, tag_set->reserved_tags,
>> + round_robin, node))
>> + goto free_bitmap_tags;
>> + return true;
>> +free_bitmap_tags:
>> + sbitmap_queue_free(&tag_set->__bitmap_tags);
>> + return false;
>> +}
>> +
[...]
>> index 90b645c3092c..77120dd4e4d5 100644
>> --- a/block/blk-mq.c
>> +++ b/block/blk-mq.c
>> @@ -2229,7 +2229,7 @@ struct blk_mq_tags *blk_mq_alloc_rq_map(struct blk_mq_tag_set *set,
>> if (node == NUMA_NO_NODE)
>> node = set->numa_node;
>>
>> - tags = blk_mq_init_tags(nr_tags, reserved_tags, node,
>> + tags = blk_mq_init_tags(set, nr_tags, reserved_tags, node,
>> BLK_MQ_FLAG_TO_ALLOC_POLICY(set->flags));
>> if (!tags)
>> return NULL;
>> @@ -3349,11 +3349,28 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
>> if (ret)
>> goto out_free_mq_map;
>>
>> + if (blk_mq_is_sbitmap_shared(set)) {
>> + if (!blk_mq_init_shared_sbitmap(set)) {
>> + ret = -ENOMEM;
>> + goto out_free_mq_rq_maps;
>> + }
>> +
>> + for (i = 0; i < set->nr_hw_queues; i++) {
>> + struct blk_mq_tags *tags = set->tags[i];
>> +
>> + tags->bitmap_tags = &set->__bitmap_tags;
>> + tags->breserved_tags = &set->__breserved_tags;
>> + }
> I am wondering why you don't put ->[bitmap|breserved]_tags initialization into
> blk_mq_init_shared_sbitmap().
I suppose I could.
Thanks,
John
next prev parent reply other threads:[~2020-06-11 10:11 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-10 17:29 [PATCH RFC v7 00/12] blk-mq/scsi: Provide hostwide shared tags for SCSI HBAs John Garry
2020-06-10 17:29 ` [PATCH RFC v7 01/12] blk-mq: rename BLK_MQ_F_TAG_SHARED as BLK_MQ_F_TAG_QUEUE_SHARED John Garry
2020-06-10 17:29 ` [PATCH RFC v7 02/12] blk-mq: rename blk_mq_update_tag_set_depth() John Garry
2020-06-11 2:57 ` Ming Lei
2020-06-11 8:26 ` John Garry
2020-06-23 11:25 ` John Garry
2020-06-23 14:23 ` Hannes Reinecke
2020-06-24 8:13 ` Kashyap Desai
2020-06-29 16:18 ` John Garry
2020-08-10 16:51 ` Kashyap Desai
2020-08-11 8:01 ` John Garry
2020-08-11 16:34 ` Kashyap Desai
2020-06-10 17:29 ` [PATCH RFC v7 03/12] blk-mq: Use pointers for blk_mq_tags bitmap tags John Garry
2020-06-10 17:29 ` [PATCH RFC v7 04/12] blk-mq: Facilitate a shared sbitmap per tagset John Garry
2020-06-11 3:37 ` Ming Lei
2020-06-11 10:09 ` John Garry [this message]
2020-06-10 17:29 ` [PATCH RFC v7 05/12] blk-mq: Record nr_active_requests per queue for when using shared sbitmap John Garry
2020-06-11 4:04 ` Ming Lei
2020-06-11 10:22 ` John Garry
2020-06-10 17:29 ` [PATCH RFC v7 06/12] blk-mq: Record active_queues_shared_sbitmap per tag_set " John Garry
2020-06-11 13:16 ` Hannes Reinecke
2020-06-11 14:22 ` John Garry
2020-06-10 17:29 ` [PATCH RFC v7 07/12] blk-mq: Add support in hctx_tags_bitmap_show() for a " John Garry
2020-06-11 13:19 ` Hannes Reinecke
2020-06-11 14:33 ` John Garry
2020-06-12 6:06 ` Hannes Reinecke
2020-06-29 15:32 ` About sbitmap_bitmap_show() and cleared bits (was Re: [PATCH RFC v7 07/12] blk-mq: Add support in hctx_tags_bitmap_show() for a shared sbitmap) John Garry
2020-06-30 6:33 ` Hannes Reinecke
2020-06-30 7:30 ` John Garry
2020-06-30 11:36 ` John Garry
2020-06-30 14:55 ` Bart Van Assche
2020-07-13 9:41 ` [PATCH RFC v7 07/12] blk-mq: Add support in hctx_tags_bitmap_show() for a shared sbitmap John Garry
2020-07-13 12:20 ` Hannes Reinecke
2020-06-10 17:29 ` [PATCH RFC v7 08/12] scsi: Add template flag 'host_tagset' John Garry
2020-06-10 17:29 ` [PATCH RFC v7 09/12] scsi: hisi_sas: Switch v3 hw to MQ John Garry
2020-06-10 17:29 ` [PATCH RFC v7 10/12] megaraid_sas: switch fusion adapters " John Garry
2020-07-02 10:23 ` Kashyap Desai
2020-07-06 8:23 ` John Garry
2020-07-06 8:45 ` Hannes Reinecke
2020-07-06 9:26 ` John Garry
2020-07-06 9:40 ` Hannes Reinecke
2020-07-06 19:19 ` Kashyap Desai
2020-07-07 7:58 ` John Garry
2020-07-07 14:45 ` Kashyap Desai
2020-07-07 16:17 ` John Garry
2020-07-09 19:01 ` Kashyap Desai
2020-07-10 8:10 ` John Garry
2020-07-13 7:55 ` Kashyap Desai
2020-07-13 8:42 ` John Garry
2020-07-19 19:07 ` Kashyap Desai
2020-07-20 7:23 ` Kashyap Desai
2020-07-20 9:18 ` John Garry
2020-07-21 1:13 ` Ming Lei
2020-07-21 6:53 ` Kashyap Desai
2020-07-22 4:12 ` Ming Lei
2020-07-22 5:30 ` Kashyap Desai
2020-07-22 8:04 ` Ming Lei
2020-07-22 9:32 ` John Garry
2020-07-23 14:07 ` Ming Lei
2020-07-23 17:29 ` John Garry
2020-07-24 2:47 ` Ming Lei
2020-07-28 7:54 ` John Garry
2020-07-28 8:45 ` Ming Lei
2020-07-29 5:25 ` Kashyap Desai
2020-07-29 15:36 ` Ming Lei
2020-07-29 18:31 ` Kashyap Desai
2020-08-04 8:36 ` Ming Lei
2020-08-04 9:27 ` Kashyap Desai
2020-08-05 8:40 ` Ming Lei
2020-08-06 10:25 ` Kashyap Desai
2020-08-06 13:38 ` Ming Lei
2020-08-06 14:37 ` Kashyap Desai
2020-08-06 15:29 ` Ming Lei
2020-08-08 19:05 ` Kashyap Desai
2020-08-09 2:16 ` Ming Lei
2020-08-10 16:38 ` Kashyap Desai
2020-08-11 8:09 ` John Garry
2020-08-04 17:00 ` John Garry
2020-08-05 2:56 ` Ming Lei
2020-07-28 8:01 ` Kashyap Desai
2020-07-08 11:31 ` John Garry
2020-06-10 17:29 ` [PATCH RFC v7 11/12] smartpqi: enable host tagset John Garry
2020-07-14 13:16 ` John Garry
2020-07-14 13:31 ` John Garry
2020-07-14 18:16 ` Don.Brace
2020-07-15 7:28 ` John Garry
2020-07-14 14:02 ` Hannes Reinecke
2020-08-18 8:33 ` John Garry
2020-06-10 17:29 ` [PATCH RFC v7 12/12] hpsa: enable host_tagset and switch to MQ John Garry
2020-07-14 7:37 ` John Garry
2020-07-14 7:41 ` Hannes Reinecke
2020-07-14 7:52 ` John Garry
2020-07-14 8:06 ` Ming Lei
2020-07-14 9:53 ` John Garry
2020-07-14 10:14 ` Ming Lei
2020-07-14 10:43 ` Hannes Reinecke
2020-07-14 10:19 ` Hannes Reinecke
2020-07-14 10:35 ` John Garry
2020-07-14 10:44 ` Ming Lei
2020-07-14 10:52 ` John Garry
2020-07-14 12:04 ` Ming Lei
2020-08-03 20:39 ` Don.Brace
2020-08-04 9:27 ` John Garry
2020-08-04 15:18 ` Don.Brace
2020-08-05 11:21 ` John Garry
2020-08-14 21:04 ` Don.Brace
2020-08-17 8:00 ` John Garry
2020-08-17 18:39 ` Don.Brace
2020-08-18 7:14 ` Hannes Reinecke
2020-07-16 16:14 ` Don.Brace
2020-07-16 19:45 ` Don.Brace
2020-07-17 10:11 ` John Garry
2020-06-11 3:07 ` [PATCH RFC v7 00/12] blk-mq/scsi: Provide hostwide shared tags for SCSI HBAs Ming Lei
2020-06-11 9:35 ` John Garry
2020-06-12 18:47 ` Kashyap Desai
2020-06-15 2:13 ` Ming Lei
2020-06-15 6:57 ` Kashyap Desai
2020-06-16 1:00 ` Ming Lei
2020-06-17 11:26 ` Kashyap Desai
2020-06-22 6:24 ` Hannes Reinecke
2020-06-23 0:55 ` Ming Lei
2020-06-23 11:50 ` Kashyap Desai
2020-06-23 12:11 ` Kashyap Desai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4a5ef683-91f4-093c-4fed-675f9fcfda31@huawei.com \
--to=john.garry@huawei.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=chenxiang66@hisilicon.com \
--cc=don.brace@microsemi.com \
--cc=esc.storagedev@microsemi.com \
--cc=hare@suse.com \
--cc=hch@lst.de \
--cc=jejb@linux.ibm.com \
--cc=kashyap.desai@broadcom.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=megaraidlinux.pdl@broadcom.com \
--cc=ming.lei@redhat.com \
--cc=shivasharan.srikanteshwara@broadcom.com \
--cc=sumit.saxena@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.