linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Andrea Vai <andrea.vai@unipv.it>
Cc: Damien Le Moal <Damien.LeMoal@wdc.com>,
	Alan Stern <stern@rowland.harvard.edu>,
	Jens Axboe <axboe@kernel.dk>,
	Johannes Thumshirn <jthumshirn@suse.de>,
	USB list <linux-usb@vger.kernel.org>,
	SCSI development list <linux-scsi@vger.kernel.org>,
	Himanshu Madhani <himanshu.madhani@cavium.com>,
	Hannes Reinecke <hare@suse.com>, Omar Sandoval <osandov@fb.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Hans Holmberg <Hans.Holmberg@wdc.com>,
	Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: Slow I/O on USB media after commit f664a3cc17b7d0a2bc3b3ab96181e1029b0ec0e6
Date: Mon, 25 Nov 2019 11:54:37 +0800	[thread overview]
Message-ID: <20191125035437.GA3806@ming.t460p> (raw)
In-Reply-To: <a9ffcca93657cbbb56819fd883c474a702423b41.camel@unipv.it>

[-- Attachment #1: Type: text/plain, Size: 400 bytes --]

On Sat, Nov 23, 2019 at 04:44:55PM +0100, Andrea Vai wrote:
> Il giorno sab, 23/11/2019 alle 15.28 +0800, Ming Lei ha scritto:
> > 
> > Please post the log of 'lsusb -v', and I will try to make a patch
> > for
> > addressing the issue.
> 
> attached,

Please apply the attached patch, and re-build & install & reboot kernel.

This time, please don't switch io scheduler.

Thanks,
Ming

[-- Attachment #2: usb.patch --]
[-- Type: text/plain, Size: 3616 bytes --]

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 5c9adcaa27ac..eecb46020bfb 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1436,7 +1436,13 @@ static void __blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async,
 	if (unlikely(blk_mq_hctx_stopped(hctx)))
 		return;
 
-	if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) {
+	/*
+	 * Some single-queue devices may need to dispatch IO in order
+	 * which was guaranteed for the legacy queue via the big queue
+	 * lock. Now we reply on single hctx->run_work for that.
+	 */
+	if (!async && !(hctx->flags & (BLK_MQ_F_BLOCKING |
+					BLK_MQ_F_STRICT_DISPATCH_ORDER))) {
 		int cpu = get_cpu();
 		if (cpumask_test_cpu(cpu, hctx->cpumask)) {
 			__blk_mq_run_hw_queue(hctx);
@@ -3042,6 +3048,10 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set)
 	if (!set->ops->get_budget ^ !set->ops->put_budget)
 		return -EINVAL;
 
+	if (set->queue_depth > 1 && (set->flags &
+				BLK_MQ_F_STRICT_DISPATCH_ORDER))
+		return -EINVAL;
+
 	if (set->queue_depth > BLK_MQ_MAX_DEPTH) {
 		pr_info("blk-mq: reduced tag depth to %u\n",
 			BLK_MQ_MAX_DEPTH);
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index d3d237a09a78..563188844143 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1939,6 +1939,9 @@ int scsi_mq_setup_tags(struct Scsi_Host *shost)
 	shost->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
 	shost->tag_set.flags |=
 		BLK_ALLOC_POLICY_TO_MQ_FLAG(shost->hostt->tag_alloc_policy);
+	if (shost->hostt->strict_dispatch_order)
+		shost->tag_set.flags |= BLK_MQ_F_STRICT_DISPATCH_ORDER;
+
 	shost->tag_set.driver_data = shost;
 
 	return blk_mq_alloc_tag_set(&shost->tag_set);
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index 6737fab94959..77795edad8e8 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -661,6 +661,18 @@ static const struct scsi_host_template usb_stor_host_template = {
 	/* we do our own delay after a device or bus reset */
 	.skip_settle_delay =		1,
 
+
+	/*
+	 * Some USB storage, such as Kingston Technology DataTraveler 100
+	 * G3/G4/SE9 G2(ID 0951:1666), requires IO dispatched in the
+	 * sequential order, otherwise IO performance may drop drastically.
+	 *
+	 * can_queue is always 1, so we set .strict_dispatch_order for
+	 * USB mass storage HBA. Another reason is that there can be such
+	 * kind of devices too.
+	 */
+	.strict_dispatch_order =	1,
+
 	/* sysfs device attributes */
 	.sdev_attrs =			sysfs_device_attr_list,
 
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index dc03e059fdff..844539690a27 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -388,6 +388,7 @@ struct blk_mq_ops {
 enum {
 	BLK_MQ_F_SHOULD_MERGE	= 1 << 0,
 	BLK_MQ_F_TAG_SHARED	= 1 << 1,
+	BLK_MQ_F_STRICT_DISPATCH_ORDER	= 1 << 2,
 	BLK_MQ_F_BLOCKING	= 1 << 5,
 	BLK_MQ_F_NO_SCHED	= 1 << 6,
 	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index d4452d0ea3c7..f932d6fa1a4c 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -442,6 +442,13 @@ struct scsi_host_template {
 	/* True if the low-level driver supports blk-mq only */
 	unsigned force_blk_mq:1;
 
+	/*
+	 * True if the low-level driver needs IO to be dispatched in
+	 * the order provided by legacy IO path. The flag is only
+	 * valid for single queue device.
+	 */
+	unsigned strict_dispatch_order:1;
+
 	/*
 	 * Countdown for host blocking with no commands outstanding.
 	 */

  reply	other threads:[~2019-11-25  3:55 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <0cd6ac36b7ab644576fc0f3f5bd4a880c33855d1.camel@unipv.it>
2019-11-05 18:31 ` Slow I/O on USB media after commit f664a3cc17b7d0a2bc3b3ab96181e1029b0ec0e6 Alan Stern
2019-11-05 23:29   ` Jens Axboe
2019-11-06 16:03     ` Alan Stern
2019-11-06 22:13       ` Damien Le Moal
2019-11-07  7:04         ` Andrea Vai
2019-11-07  7:54           ` Damien Le Moal
2019-11-07 18:59             ` Andrea Vai
2019-11-08  8:42               ` Damien Le Moal
2019-11-08 14:33                 ` Jens Axboe
2019-11-11 10:46                   ` Andrea Vai
2019-11-09 10:09                 ` Ming Lei
2019-11-09 22:28               ` Ming Lei
2019-11-11 10:50                 ` Andrea Vai
2019-11-11 11:05                   ` Ming Lei
2019-11-11 11:13                     ` Andrea Vai
2019-11-22 19:16                 ` Andrea Vai
2019-11-23  7:28                   ` Ming Lei
2019-11-23 15:44                     ` Andrea Vai
2019-11-25  3:54                       ` Ming Lei [this message]
2019-11-25 10:11                         ` Andrea Vai
2019-11-25 10:29                           ` Ming Lei
2019-11-25 14:58                             ` Andrea Vai
2019-11-25 15:15                               ` Ming Lei
2019-11-25 18:51                                 ` Andrea Vai
2019-11-26  2:32                                   ` Ming Lei
2019-11-26  7:46                                     ` Andrea Vai
2019-11-26  9:15                                       ` Ming Lei
2019-11-26 10:24                                         ` Ming Lei
2019-11-26 11:14                                         ` Andrea Vai
2019-11-27  2:05                                           ` Ming Lei
2019-11-27  9:39                                             ` Andrea Vai
2019-11-27 13:08                                               ` Ming Lei
2019-11-27 15:01                                                 ` Andrea Vai
2019-11-27  0:21                                       ` Finn Thain
2019-11-27  8:14                                         ` AW: " Schmid, Carsten
2019-11-27 21:49                                           ` Finn Thain
2019-11-28  7:46                                           ` Andrea Vai
2019-11-28  8:12                                             ` AW: " Schmid, Carsten
2019-11-28 11:40                                               ` Andrea Vai
2019-11-28 17:39                                               ` Alan Stern
2019-11-28  9:17                                             ` Ming Lei
2019-11-28 17:34                                               ` Andrea Vai
2019-11-29  0:57                                                 ` Ming Lei
2019-11-29  2:35                                                   ` Ming Lei
2019-11-29 14:41                                                     ` Andrea Vai
2019-12-03  2:23                                                       ` Ming Lei
2019-12-10  7:35                                                         ` Andrea Vai
2019-12-10  8:05                                                           ` Ming Lei
2019-12-11  2:41                                                             ` Theodore Y. Ts'o
2019-12-11  4:00                                                               ` Ming Lei
2019-12-11 16:07                                                                 ` Theodore Y. Ts'o
2019-12-11 21:33                                                                   ` Ming Lei
2019-12-12  7:34                                                                     ` Andrea Vai
2019-12-18  8:25                                                                     ` Andrea Vai
2019-12-18  9:48                                                                       ` Ming Lei
     [not found]                                                                         ` <b1b6a0e9d690ecd9432025acd2db4ac09f834040.camel@unipv.it>
2019-12-23 13:08                                                                           ` Ming Lei
2019-12-23 14:02                                                                             ` Andrea Vai
2019-12-24  1:32                                                                               ` Ming Lei
2019-12-24  8:04                                                                                 ` Andrea Vai
2019-12-24  8:47                                                                                   ` Ming Lei
2019-12-23 16:26                                                                             ` Theodore Y. Ts'o
2019-12-23 16:29                                                                               ` Andrea Vai
2019-12-23 17:22                                                                                 ` Theodore Y. Ts'o
2019-12-23 18:45                                                                                   ` Andrea Vai
2019-12-23 19:53                                                                                     ` Theodore Y. Ts'o
2019-12-24  1:27                                                                                       ` Ming Lei
2019-12-24  6:49                                                                                         ` Andrea Vai
2019-12-24  8:51                                                                                         ` Andrea Vai
2019-12-24  9:35                                                                                           ` Ming Lei
2019-12-25  5:17                                                                                         ` Theodore Y. Ts'o
2019-12-26  2:27                                                                                           ` Ming Lei
2019-12-26  3:30                                                                                             ` Theodore Y. Ts'o
2019-12-26  8:37                                                                                               ` Ming Lei
2020-01-07  7:51                                                                                                 ` Andrea Vai
     [not found]                                                                                               ` <20200101074310.10904-1-hdanton@sina.com>
2020-01-01 13:53                                                                                                 ` slow IO on USB media Ming Lei
2019-11-29 11:44                                                   ` AW: Slow I/O on USB media after commit f664a3cc17b7d0a2bc3b3ab96181e1029b0ec0e6 Bernd Schubert
2019-12-02  7:01                                                     ` Andrea Vai
2019-11-28 17:10                                         ` Andrea Vai

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=20191125035437.GA3806@ming.t460p \
    --to=ming.lei@redhat.com \
    --cc=Damien.LeMoal@wdc.com \
    --cc=Hans.Holmberg@wdc.com \
    --cc=andrea.vai@unipv.it \
    --cc=axboe@kernel.dk \
    --cc=gregkh@linuxfoundation.org \
    --cc=hare@suse.com \
    --cc=himanshu.madhani@cavium.com \
    --cc=jthumshirn@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=osandov@fb.com \
    --cc=stern@rowland.harvard.edu \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).