All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <Bart.VanAssche@wdc.com>
To: "linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"hch@infradead.org" <hch@infradead.org>,
	"jejb@linux.vnet.ibm.com" <jejb@linux.vnet.ibm.com>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"axboe@fb.com" <axboe@fb.com>,
	"ming.lei@redhat.com" <ming.lei@redhat.com>,
	"martin.petersen@oracle.com" <martin.petersen@oracle.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"hare@suse.com" <hare@suse.com>,
	"holger@applied-asynchrony.com" <holger@applied-asynchrony.com>
Subject: Re: [PATCH] SCSI: run queue if SCSI device queue isn't ready and queue is idle
Date: Tue, 5 Dec 2017 16:08:20 +0000	[thread overview]
Message-ID: <1512490099.2660.6.camel@sandisk.com> (raw)
In-Reply-To: <20171205075256.10319-1-ming.lei@redhat.com>

T24gVHVlLCAyMDE3LTEyLTA1IGF0IDE1OjUyICswODAwLCBNaW5nIExlaSB3cm90ZToNCj4gZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGli
LmMNCj4gaW5kZXggZGI5NTU2NjYyZTI3Li4xODE2ZGQ4MjU5YjMgMTAwNjQ0DQo+IC0tLSBhL2Ry
aXZlcnMvc2NzaS9zY3NpX2xpYi5jDQo+ICsrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jDQo+
IEBAIC0xOTY3LDYgKzE5NjcsOCBAQCBzdGF0aWMgYm9vbCBzY3NpX21xX2dldF9idWRnZXQoc3Ry
dWN0IGJsa19tcV9od19jdHggKmhjdHgpDQo+ICBvdXRfcHV0X2RldmljZToNCj4gIAlwdXRfZGV2
aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7DQo+ICBvdXQ6DQo+ICsJaWYgKGF0b21pY19yZWFkKCZz
ZGV2LT5kZXZpY2VfYnVzeSkgPT0gMCAmJiAhc2NzaV9kZXZpY2VfYmxvY2tlZChzZGV2KSkNCj4g
KwkJYmxrX21xX2RlbGF5X3J1bl9od19xdWV1ZShoY3R4LCBTQ1NJX1FVRVVFX0RFTEFZKTsNCj4g
IAlyZXR1cm4gZmFsc2U7DQo+ICB9DQoNClRoaXMgY2Fubm90IHdvcmsgc2luY2UgbXVsdGlwbGUg
dGhyZWFkcyBjYW4gY2FsbCBzY3NpX21xX2dldF9idWRnZXQoKQ0KY29uY3VycmVudGx5IGFuZCBo
ZW5jZSBpdCBjYW4gaGFwcGVuIHRoYXQgbm9uZSBvZiB0aGVtIHNlZXMNCmF0b21pY19yZWFkKCZz
ZGV2LT5kZXZpY2VfYnVzeSkgPT0gMC4gQlRXLCB0aGUgYWJvdmUgcGF0Y2ggaXMgc29tZXRoaW5n
IEkNCmNvbnNpZGVyIGFzIGEgd29ya2Fyb3VuZC4gSGF2ZSB5b3UgY29uc2lkZXJlZCB0byBmaXgg
dGhlIHJvb3QgY2F1c2UgYW5kIHRvDQphZGQgYmxrX21xX3NjaGVkX21hcmtfcmVzdGFydF9oY3R4
KCkgd2hlcmUgdGhlc2UgYXJlIG1pc3NpbmcsIGUuZy4gaW4gDQpibGtfbXFfc2NoZWRfZGlzcGF0
Y2hfcmVxdWVzdHMoKT8gVGhlIHBhdGNoIGJlbG93IGlzIG5vdCBhIGZ1bGwgc29sdXRpb24NCmJ1
dCByZXN1bHRlZCBpbiBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50IGluIG15IHRlc3RzOg0KDQpk
aWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLXNjaGVkLmMgYi9ibG9jay9ibGstbXEtc2NoZWQuYw0K
aW5kZXggNjllMzIyNmU2NmNhLi45ZDg2ODc2ZWM1MDMgMTAwNjQ0DQotLS0gYS9ibG9jay9ibGst
bXEtc2NoZWQuYw0KKysrIGIvYmxvY2svYmxrLW1xLXNjaGVkLmMNCkBAIC0yMjYsNiArMjI2LDcg
QEAgdm9pZCBibGtfbXFfc2NoZWRfZGlzcGF0Y2hfcmVxdWVzdHMoc3RydWN0IGJsa19tcV9od19j
dHggKmhjdHgpDQogCQkgKiBUT0RPOiBnZXQgbW9yZSBidWRnZXRzLCBhbmQgZGVxdWV1ZSBtb3Jl
IHJlcXVlc3RzIGluDQogCQkgKiBvbmUgdGltZS4NCiAJCSAqLw0KKwkJYmxrX21xX3NjaGVkX21h
cmtfcmVzdGFydF9oY3R4KGhjdHgpOw0KIAkJYmxrX21xX2RvX2Rpc3BhdGNoX2N0eChoY3R4KTsN
CiAJfSBlbHNlIHsNCiAJCWJsa19tcV9mbHVzaF9idXN5X2N0eHMoaGN0eCwgJnJxX2xpc3QpOw0K
DQpCYXJ0Lg==

WARNING: multiple messages have this Message-ID (diff)
From: Bart Van Assche <Bart.VanAssche@wdc.com>
To: "linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"hch@infradead.org" <hch@infradead.org>,
	"jejb@linux.vnet.ibm.com" <jejb@linux.vnet.ibm.com>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"axboe@fb.com" <axboe@fb.com>,
	"ming.lei@redhat.com" <ming.lei@redhat.com>,
	"martin.petersen@oracle.com" <martin.petersen@oracle.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"hare@suse.com" <hare@suse.com>,
	"holger@applied-asynchrony.com" <holger@applied-asynchrony.com>
Subject: Re: [PATCH] SCSI: run queue if SCSI device queue isn't ready and queue is idle
Date: Tue, 5 Dec 2017 16:08:20 +0000	[thread overview]
Message-ID: <1512490099.2660.6.camel@sandisk.com> (raw)
In-Reply-To: <20171205075256.10319-1-ming.lei@redhat.com>

On Tue, 2017-12-05 at 15:52 +0800, Ming Lei wrote:
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index db9556662e27..1816dd8259b3 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -1967,6 +1967,8 @@ static bool scsi_mq_get_budget(struct blk_mq_hw_ctx *hctx)
>  out_put_device:
>  	put_device(&sdev->sdev_gendev);
>  out:
> +	if (atomic_read(&sdev->device_busy) == 0 && !scsi_device_blocked(sdev))
> +		blk_mq_delay_run_hw_queue(hctx, SCSI_QUEUE_DELAY);
>  	return false;
>  }

This cannot work since multiple threads can call scsi_mq_get_budget()
concurrently and hence it can happen that none of them sees
atomic_read(&sdev->device_busy) == 0. BTW, the above patch is something I
consider as a workaround. Have you considered to fix the root cause and to
add blk_mq_sched_mark_restart_hctx() where these are missing, e.g. in 
blk_mq_sched_dispatch_requests()? The patch below is not a full solution
but resulted in a significant improvement in my tests:

diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
index 69e3226e66ca..9d86876ec503 100644
--- a/block/blk-mq-sched.c
+++ b/block/blk-mq-sched.c
@@ -226,6 +226,7 @@ void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
 		 * TODO: get more budgets, and dequeue more requests in
 		 * one time.
 		 */
+		blk_mq_sched_mark_restart_hctx(hctx);
 		blk_mq_do_dispatch_ctx(hctx);
 	} else {
 		blk_mq_flush_busy_ctxs(hctx, &rq_list);

Bart.

  parent reply	other threads:[~2017-12-05 16:08 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-05  7:52 [PATCH] SCSI: run queue if SCSI device queue isn't ready and queue is idle Ming Lei
2017-12-05 14:29 ` Johannes Thumshirn
2017-12-05 16:16   ` Bart Van Assche
2017-12-05 16:16     ` Bart Van Assche
2017-12-05 16:08 ` Bart Van Assche [this message]
2017-12-05 16:08   ` Bart Van Assche
2017-12-05 16:28   ` Ming Lei
2017-12-05 16:41     ` Bart Van Assche
2017-12-05 16:41       ` Bart Van Assche
2017-12-05 16:45       ` Ming Lei
2017-12-06  1:52     ` Ming Lei
2017-12-06 16:07       ` Bart Van Assche
2017-12-06 16:07         ` Bart Van Assche
2017-12-07  1:31         ` Ming Lei
2017-12-07 21:11           ` Bart Van Assche
2017-12-07 21:11             ` Bart Van Assche
2017-12-08  0:36             ` Ming Lei
2017-12-07 21:06     ` Bart Van Assche
2017-12-07 21:06       ` Bart Van Assche
2017-12-08  0:50       ` Ming Lei
2017-12-06 23:10 ` Holger Hoffstätte
2017-12-07  1:40   ` Ming Lei
2017-12-07  1:40     ` Ming Lei
2017-12-08  0:54     ` Martin K. Petersen

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=1512490099.2660.6.camel@sandisk.com \
    --to=bart.vanassche@wdc.com \
    --cc=axboe@fb.com \
    --cc=hare@suse.com \
    --cc=hch@infradead.org \
    --cc=holger@applied-asynchrony.com \
    --cc=jejb@linux.vnet.ibm.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=ming.lei@redhat.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.