From: Mike Snitzer <snitzer@redhat.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: Keith Busch <keith.busch@intel.com>,
Christoph Hellwig <hch@infradead.org>,
device-mapper development <dm-devel@redhat.com>,
Bart Van Assche <bvanassche@acm.org>,
Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
Subject: Re: blk-mq request allocation stalls [was: Re: [PATCH v3 0/8] dm: add request-based blk-mq support]
Date: Fri, 9 Jan 2015 20:48:11 -0500 [thread overview]
Message-ID: <20150110014811.GA2384@redhat.com> (raw)
In-Reply-To: <54B071DC.9000307@kernel.dk>
[-- Attachment #1: Type: text/plain, Size: 1936 bytes --]
On Fri, Jan 09 2015 at 7:27pm -0500,
Jens Axboe <axboe@kernel.dk> wrote:
> I sent out the half-done v3, unfortunately. Can you try this? Both the
> cases with substantial nr_free are at the end of an index.
I initially thought it was fixed since I didn't see any failures on boot
(which I normally do see 3-4). I then ran the kernel "make install" to
this virtio-blk root device and also didn't see any failures on the the
first run. But the 2nd run triggered these:
[ 83.711724] __bt_get: values before for loop: last_tag=55, index=1
[ 83.713395] __bt_get: values after for loop: last_tag=32, index=1
[ 83.714464] bt_get: __bt_get() returned -1
[ 83.715183] queue_num=0, nr_tags=128, reserved_tags=0, bits_per_word=5
[ 83.716297] nr_free=128, nr_reserved=0
[ 83.716940] active_queues=0
[ 88.716241] __bt_get: values before for loop: last_tag=15, index=0
[ 88.717890] __bt_get: values after for loop: last_tag=0, index=0
[ 88.718956] bt_get: __bt_get() returned -1
[ 88.719682] queue_num=0, nr_tags=128, reserved_tags=0, bits_per_word=5
[ 88.720866] nr_free=128, nr_reserved=0
[ 88.721536] active_queues=0
A third "make install" resulted in:
[ 543.711782] __bt_get: values before for loop: last_tag=114, index=3
[ 543.713411] __bt_get: values after for loop: last_tag=96, index=3
[ 543.714495] bt_get: __bt_get() returned -1
[ 543.715222] queue_num=0, nr_tags=128, reserved_tags=0, bits_per_word=5
[ 543.716351] nr_free=128, nr_reserved=0
[ 543.717016] active_queues=0
(things definitely do seem better, e.g. less frequent failure and no
longer see the last_tag=127 case)
> If this one doesn't solve it, I'll reproduce it myself to save the
> ping-pong effort :-)
I don't mind testing it since it is really quick. But OK.
I've attached the debug patch I've been using in case you'd like to use it.
But feel free to send me additional versions for me to test off-list if
you'd like.
Mike
[-- Attachment #2: blk-mq-bt_get-debug-v2.patch --]
[-- Type: text/plain, Size: 2496 bytes --]
diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index 32e8dbb..4f11e7c 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -180,12 +180,16 @@ static int __bt_get(struct blk_mq_hw_ctx *hctx, struct blk_mq_bitmap_tags *bt,
unsigned int last_tag, org_last_tag;
int index, i, tag;
- if (!hctx_may_queue(hctx, bt))
+ if (!hctx_may_queue(hctx, bt)) {
+ printk("!hctx_may_queue() __bt_get returning -1\n");
return -1;
+ }
last_tag = org_last_tag = *tag_cache;
index = TAG_TO_INDEX(bt, last_tag);
+ WARN_ON(last_tag > 127);
+
for (i = 0; i < bt->map_nr; i++) {
tag = __bt_get_word(&bt->map[index], TAG_TO_BIT(bt, last_tag));
if (tag != -1) {
@@ -198,6 +202,11 @@ static int __bt_get(struct blk_mq_hw_ctx *hctx, struct blk_mq_bitmap_tags *bt,
index = 0;
}
+ printk("\n%s: values before for loop: last_tag=%u, index=%d\n", __func__,
+ *tag_cache, TAG_TO_INDEX(bt, *tag_cache));
+ printk("%s: values after for loop: last_tag=%u, index=%d\n", __func__,
+ last_tag, index);
+
*tag_cache = 0;
return -1;
@@ -232,6 +241,27 @@ static struct bt_wait_state *bt_wait_ptr(struct blk_mq_bitmap_tags *bt,
return bs;
}
+static unsigned int bt_unused_tags(struct blk_mq_bitmap_tags *bt);
+
+static void print_hctx_tags_usage(struct blk_mq_hw_ctx *hctx)
+{
+ unsigned int free, res;
+ struct blk_mq_tags *tags = hctx->tags;
+
+ if (!tags)
+ return;
+
+ printk("queue_num=%d, nr_tags=%u, reserved_tags=%u, bits_per_word=%u\n",
+ hctx->queue_num, tags->nr_tags, tags->nr_reserved_tags,
+ tags->bitmap_tags.bits_per_word);
+
+ free = bt_unused_tags(&tags->bitmap_tags);
+ res = bt_unused_tags(&tags->breserved_tags);
+
+ printk("nr_free=%u, nr_reserved=%u\n", free, res);
+ printk("active_queues=%u\n", atomic_read(&tags->active_queues));
+}
+
static int bt_get(struct blk_mq_alloc_data *data,
struct blk_mq_bitmap_tags *bt,
struct blk_mq_hw_ctx *hctx,
@@ -245,6 +275,10 @@ static int bt_get(struct blk_mq_alloc_data *data,
if (tag != -1)
return tag;
+ printk("%s: __bt_get() returned -1\n", __func__);
+ print_hctx_tags_usage(hctx);
+ //dump_stack();
+
if (!(data->gfp & __GFP_WAIT))
return -1;
@@ -256,6 +290,9 @@ static int bt_get(struct blk_mq_alloc_data *data,
if (tag != -1)
break;
+ printk("%s: __bt_get() _still_ returned -1\n", __func__);
+ print_hctx_tags_usage(hctx);
+
/*
* We're out of tags on this hardware queue, kick any
* pending IO submits before going to sleep waiting for
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
next prev parent reply other threads:[~2015-01-10 1:48 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-17 3:59 [PATCH v3 0/8] dm: add request-based blk-mq support Mike Snitzer
2014-12-17 3:59 ` [PATCH v3 1/8] block: require blk_rq_prep_clone() be given an initialized clone request Mike Snitzer
2014-12-17 3:59 ` [PATCH v3 2/8] block: initialize bio member of blk-mq request to NULL Mike Snitzer
2014-12-17 3:59 ` [PATCH v3 3/8] block: add blk-mq support to blk_insert_cloned_request() Mike Snitzer
2014-12-17 4:00 ` [PATCH v3 4/8] block: mark blk-mq devices as stackable Mike Snitzer
2014-12-17 4:00 ` [PATCH v3 5/8] dm: remove exports for request-based interfaces without external callers Mike Snitzer
2014-12-17 4:00 ` [PATCH v3 6/8] dm: split request structure out from dm_rq_target_io structure Mike Snitzer
2014-12-17 4:00 ` [PATCH v3 7/8] dm: submit stacked requests in irq enabled context Mike Snitzer
2014-12-17 4:00 ` [PATCH v3 8/8] dm: allocate requests from target when stacking on blk-mq devices Mike Snitzer
2014-12-17 22:35 ` Mike Snitzer
2014-12-17 21:42 ` [PATCH v3 0/8] dm: add request-based blk-mq support Keith Busch
2014-12-17 21:43 ` Jens Axboe
2014-12-17 23:06 ` Mike Snitzer
2014-12-18 1:41 ` Keith Busch
2014-12-18 4:58 ` Mike Snitzer
2014-12-19 14:32 ` Bart Van Assche
2014-12-19 15:38 ` Mike Snitzer
2014-12-19 17:14 ` Mike Snitzer
2014-12-22 15:28 ` Bart Van Assche
2014-12-22 18:49 ` Mike Snitzer
2014-12-23 16:24 ` Bart Van Assche
2014-12-23 17:13 ` Mike Snitzer
2014-12-23 21:42 ` Mike Snitzer
2014-12-24 13:02 ` Bart Van Assche
2014-12-24 18:21 ` Mike Snitzer
2014-12-24 18:55 ` Mike Snitzer
2014-12-24 19:26 ` Mike Snitzer
2015-01-02 17:53 ` Bart Van Assche
2015-01-05 21:35 ` Mike Snitzer
2015-01-06 8:59 ` Christoph Hellwig
2015-01-06 9:31 ` Bart Van Assche
2015-01-06 16:05 ` blk-mq request allocation stalls [was: Re: [PATCH v3 0/8] dm: add request-based blk-mq support] Mike Snitzer
2015-01-06 16:15 ` Jens Axboe
2015-01-07 10:33 ` Bart Van Assche
2015-01-07 15:32 ` Jens Axboe
2015-01-07 16:15 ` Mike Snitzer
2015-01-07 16:18 ` Jens Axboe
2015-01-07 16:22 ` Mike Snitzer
2015-01-07 16:24 ` Jens Axboe
2015-01-07 17:18 ` Mike Snitzer
2015-01-07 17:35 ` Jens Axboe
2015-01-07 20:09 ` Mike Snitzer
2015-01-07 20:40 ` Keith Busch
2015-01-09 19:49 ` Mike Snitzer
2015-01-09 21:07 ` Jens Axboe
2015-01-09 21:11 ` Jens Axboe
2015-01-09 21:40 ` Mike Snitzer
2015-01-09 21:56 ` Jens Axboe
2015-01-09 22:25 ` Mike Snitzer
2015-01-10 0:27 ` Jens Axboe
2015-01-10 1:48 ` Mike Snitzer [this message]
2015-01-10 1:59 ` Jens Axboe
2015-01-10 3:10 ` Mike Snitzer
2015-01-12 14:46 ` blk-mq request allocation stalls Bart Van Assche
2015-01-12 15:42 ` Jens Axboe
2015-01-12 16:12 ` Bart Van Assche
2015-01-12 16:34 ` Jens Axboe
2015-01-12 16:58 ` Mike Snitzer
2015-01-12 16:59 ` Jens Axboe
2015-01-12 17:04 ` Bart Van Assche
2015-01-12 17:09 ` Jens Axboe
2015-01-12 17:53 ` Keith Busch
2015-01-12 18:12 ` Jens Axboe
2015-01-12 18:22 ` Keith Busch
2015-01-12 18:35 ` Keith Busch
2015-01-12 19:11 ` Mike Snitzer
2015-01-12 20:21 ` Mike Snitzer
2015-01-13 12:29 ` Bart Van Assche
2015-01-13 14:17 ` Mike Snitzer
2015-01-13 14:28 ` dm + blk-mq soft lockup complaint Bart Van Assche
2015-01-13 16:20 ` Mike Snitzer
2015-01-14 9:16 ` Bart Van Assche
2015-01-14 9:16 ` Bart Van Assche
2015-01-14 18:59 ` Mike Snitzer
2015-01-15 8:11 ` Bart Van Assche
2015-01-15 15:43 ` Mike Snitzer
2015-01-15 15:55 ` Bart Van Assche
2015-01-13 14:59 ` blk-mq request allocation stalls Jens Axboe
2015-01-13 15:11 ` Keith Busch
2015-01-13 15:27 ` Keith Busch
2015-01-13 15:41 ` Mike Snitzer
2015-01-13 15:14 ` Mike Snitzer
2015-01-27 18:42 ` blk-mq DM changes for 3.20 [was: Re: blk-mq request allocation stalls] Mike Snitzer
2015-01-28 16:42 ` Jens Axboe
2015-01-28 17:44 ` Mike Snitzer
2015-01-28 17:49 ` Jens Axboe
2015-01-28 18:10 ` Mike Snitzer
2015-01-29 22:43 ` blk-mq DM changes for 3.20 [was: Re: blk-mq request allocation stalls]X Keith Busch
2015-01-29 23:09 ` Mike Snitzer
2015-01-29 23:44 ` Keith Busch
2015-01-30 0:32 ` Mike Snitzer
2015-01-12 19:05 ` blk-mq request allocation stalls Jens Axboe
2015-01-12 19:07 ` Mike Snitzer
2015-01-12 18:19 ` Mike Snitzer
2014-12-17 22:51 ` [PATCH v3 0/8] dm: add request-based blk-mq support Mike Snitzer
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=20150110014811.GA2384@redhat.com \
--to=snitzer@redhat.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=dm-devel@redhat.com \
--cc=hch@infradead.org \
--cc=j-nomura@ce.jp.nec.com \
--cc=keith.busch@intel.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.