All of lore.kernel.org
 help / color / mirror / Atom feed
From: sagig@dev.mellanox.co.il (Sagi Grimberg)
Subject: [PATCH 5/5] NVMe: IO queue deletion re-write
Date: Sun, 3 Jan 2016 19:05:18 +0200	[thread overview]
Message-ID: <568954CE.2000501@dev.mellanox.co.il> (raw)
In-Reply-To: <20160103114052.GA24893@infradead.org>



On 03/01/2016 13:40, Christoph Hellwig wrote:
> On Sat, Jan 02, 2016@09:30:09PM +0000, Keith Busch wrote:
>> The async deletion was written for a bug reporting "hang" on a device
>> removal. The "hang" was the controller taking on the order of 100's msec
>> to delete a queue (sometimes >1sec if lots of commands queued). This
>> controller had 2k queues, and took ~15 minutes to remove serially. Async
>> deletion brought it down to ~20 seconds, so looked like a good idea.
>>
>> It wasn't a controller I make, so I personally don't care about
>> parallelizing queue deletion. The driver's been this way for so long
>> though, I don't have a good way to know how beneficial this feature
>> is anymore.
>
> How about something like the lightly tested patch below.  It uses
> synchronous command submission, but schedules a work item on the
> system unbound workqueue for each queue, allowing the scheduler
> to execture them in parallel.
>
> ---
> From: Christoph Hellwig <hch at lst.de>
> Date: Sun, 3 Jan 2016 12:09:36 +0100
> Subject: nvme: semi-synchronous queue deletion
>
> Replace the complex async queue deletetion scheme with a a work_item
> per queue that is scheduled to the system unbound workqueue.  That
> way we can use the normal synchronous command submission helpers,
> but let the scheduler distribute the deletions over all available
> CPUs.
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>   drivers/nvme/host/pci.c | 180 +++++++-----------------------------------------
>   1 file changed, 25 insertions(+), 155 deletions(-)
>
> diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
> index b82bbea..68ba2d4 100644
> --- a/drivers/nvme/host/pci.c
> +++ b/drivers/nvme/host/pci.c
> @@ -89,13 +89,6 @@ static void nvme_process_cq(struct nvme_queue *nvmeq);
>   static void nvme_remove_dead_ctrl(struct nvme_dev *dev);
>   static void nvme_dev_shutdown(struct nvme_dev *dev);
>
> -struct async_cmd_info {
> -	struct kthread_work work;
> -	struct kthread_worker *worker;
> -	int status;
> -	void *ctx;
> -};
> -
>   /*
>    * Represents an NVM Express device.  Each nvme_dev is a PCI function.
>    */
> @@ -128,6 +121,10 @@ struct nvme_dev {
>   #define NVME_CTRL_RESETTING    0
>
>   	struct nvme_ctrl ctrl;
> +
> +	/* for queue deletion at shutdown time */
> +	atomic_t		queues_remaining;
> +	wait_queue_head_t	queue_delete_wait;

General question,

Any reason why you didn't just use a counting semaphore for this?
I've seen other places where people are moving away from those but
I didn't understand why...

      parent reply	other threads:[~2016-01-03 17:05 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-30 17:27 [PATCH 0/5] NVMe fixes and updates for 4.5 Keith Busch
2015-12-30 17:27 ` [PATCH 1/5] NVMe: Fix admin queue ring wrap Keith Busch
2015-12-30 17:49   ` Christoph Hellwig
2015-12-30 17:56     ` Keith Busch
2015-12-30 17:53   ` Jens Axboe
2015-12-30 18:09     ` Christoph Hellwig
2015-12-30 17:27 ` [PATCH 2/5] NVMe: Use a retryable error code on reset Keith Busch
2015-12-30 17:52   ` Christoph Hellwig
2015-12-30 18:09     ` Keith Busch
2015-12-30 18:18       ` Christoph Hellwig
2015-12-30 17:27 ` [PATCH 3/5] NVMe: Remove queue freezing on resets Keith Busch
2015-12-30 17:53   ` Christoph Hellwig
2015-12-30 20:44     ` Sagi Grimberg
2015-12-30 20:42   ` Sagi Grimberg
2015-12-31 17:19     ` Sagi Grimberg
2015-12-30 17:27 ` [PATCH 4/5] NVMe: Shutdown controller only for power-off Keith Busch
2015-12-30 17:58   ` Christoph Hellwig
2015-12-30 18:02     ` Keith Busch
2015-12-30 18:14       ` Christoph Hellwig
2015-12-30 17:27 ` [PATCH 5/5] NVMe: IO queue deletion re-write Keith Busch
2015-12-30 18:04   ` Christoph Hellwig
2015-12-30 19:07     ` Keith Busch
2016-01-02 17:07       ` Christoph Hellwig
2016-01-02 21:30         ` Keith Busch
2016-01-03 11:40           ` Christoph Hellwig
2016-01-03 15:43             ` Keith Busch
2016-01-03 16:17               ` Christoph Hellwig
2016-01-03 16:26                 ` Keith Busch
2016-01-03 18:04                   ` Keith Busch
2016-01-03 17:05             ` Sagi Grimberg [this message]

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=568954CE.2000501@dev.mellanox.co.il \
    --to=sagig@dev.mellanox.co.il \
    /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.