|
Hannes Reinecke |
6f6fa1 |
From: Josh Triplett <josh@joshtriplett.org>
|
|
Hannes Reinecke |
6f6fa1 |
Date: Fri, 28 Feb 2020 18:52:28 -0800
|
|
Hannes Reinecke |
6f6fa1 |
Subject: [PATCH] nvme: Check for readiness more quickly, to speed up boot time
|
|
Hannes Reinecke |
6f6fa1 |
Git-commit: 3e98c2443f5c7f127b5b7492a3089e92a1c85112
|
|
Michal Kubecek |
66e035 |
Patch-mainline: v5.7-rc1
|
|
Hannes Reinecke |
6f6fa1 |
References: bsc#1161930
|
|
Hannes Reinecke |
6f6fa1 |
|
|
Hannes Reinecke |
6f6fa1 |
After initialization, nvme_wait_ready checks for readiness every 100ms,
|
|
Hannes Reinecke |
6f6fa1 |
even though the drive may be ready far sooner than that. This delays
|
|
Hannes Reinecke |
6f6fa1 |
system boot by hundreds of milliseconds. Reduce the delay, checking for
|
|
Hannes Reinecke |
6f6fa1 |
readiness every millisecond instead.
|
|
Hannes Reinecke |
6f6fa1 |
|
|
Hannes Reinecke |
6f6fa1 |
Boot-time tests on an AWS c5.12xlarge:
|
|
Hannes Reinecke |
6f6fa1 |
|
|
Hannes Reinecke |
6f6fa1 |
Before:
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.546936] initcall nvme_init+0x0/0x5b returned 0 after 37 usecs
|
|
Hannes Reinecke |
6f6fa1 |
...
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.764178] nvme nvme0: 2/0/0 default/read/poll queues
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.768424] nvme0n1: p1
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.774132] EXT4-fs (nvme0n1p1): mounted filesystem with ordered data mode. Opts: (null)
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.774146] VFS: Mounted root (ext4 filesystem) on device 259:1.
|
|
Hannes Reinecke |
6f6fa1 |
...
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.788141] Run /sbin/init as init process
|
|
Hannes Reinecke |
6f6fa1 |
|
|
Hannes Reinecke |
6f6fa1 |
After:
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.537088] initcall nvme_init+0x0/0x5b returned 0 after 37 usecs
|
|
Hannes Reinecke |
6f6fa1 |
...
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.543457] nvme nvme0: 2/0/0 default/read/poll queues
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.548473] nvme0n1: p1
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.554339] EXT4-fs (nvme0n1p1): mounted filesystem with ordered data mode. Opts: (null)
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.554344] VFS: Mounted root (ext4 filesystem) on device 259:1.
|
|
Hannes Reinecke |
6f6fa1 |
...
|
|
Hannes Reinecke |
6f6fa1 |
[ 0.567931] Run /sbin/init as init process
|
|
Hannes Reinecke |
6f6fa1 |
|
|
Hannes Reinecke |
6f6fa1 |
Signed-off-by: Josh Triplett <josh@joshtriplett.org>
|
|
Hannes Reinecke |
6f6fa1 |
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
|
|
Hannes Reinecke |
6f6fa1 |
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
|
|
Hannes Reinecke |
6f6fa1 |
Signed-off-by: Keith Busch <kbusch@kernel.org>
|
|
Hannes Reinecke |
6f6fa1 |
Acked-by: Hannes Reinecke <hare@suse.com>
|
|
Hannes Reinecke |
6f6fa1 |
---
|
|
Hannes Reinecke |
6f6fa1 |
drivers/nvme/host/core.c | 2 +-
|
|
Hannes Reinecke |
6f6fa1 |
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
Hannes Reinecke |
6f6fa1 |
|
|
Hannes Reinecke |
6f6fa1 |
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
|
|
Hannes Reinecke |
6f6fa1 |
index c9988942d0aa..0e38e07a302f 100644
|
|
Hannes Reinecke |
6f6fa1 |
--- a/drivers/nvme/host/core.c
|
|
Hannes Reinecke |
6f6fa1 |
+++ b/drivers/nvme/host/core.c
|
|
Hannes Reinecke |
6f6fa1 |
@@ -2078,7 +2078,7 @@ static int nvme_wait_ready(struct nvme_ctrl *ctrl, u64 cap, bool enabled)
|
|
Hannes Reinecke |
6f6fa1 |
if ((csts & NVME_CSTS_RDY) == bit)
|
|
Hannes Reinecke |
6f6fa1 |
break;
|
|
Hannes Reinecke |
6f6fa1 |
|
|
Hannes Reinecke |
6f6fa1 |
- msleep(100);
|
|
Hannes Reinecke |
6f6fa1 |
+ usleep_range(1000, 2000);
|
|
Hannes Reinecke |
6f6fa1 |
if (fatal_signal_pending(current))
|
|
Hannes Reinecke |
6f6fa1 |
return -EINTR;
|
|
Hannes Reinecke |
6f6fa1 |
if (time_after(jiffies, timeout)) {
|
|
Hannes Reinecke |
6f6fa1 |
--
|
|
Hannes Reinecke |
6f6fa1 |
2.16.4
|
|
Hannes Reinecke |
6f6fa1 |
|