]> www.infradead.org Git - users/sagi/nvme-cli.git/commit
nvme-cli: Make 'list' more useful
authorKeith Busch <kbusch@kernel.org>
Mon, 26 Aug 2019 22:17:41 +0000 (16:17 -0600)
committerKeith Busch <kbusch@kernel.org>
Wed, 28 Aug 2019 15:05:23 +0000 (09:05 -0600)
commitfc322ed874a7c621bb18bd60292a8fe090085bca
tree623eb3fd38864e560190781f7039ad9eaa528b3f
parentd01d6a8fe5b14601fef01161b6315927b66aa9c8
nvme-cli: Make 'list' more useful

The original 'list' subcommand was a bit of an ad-hoc development. Not
a whole lot of forethought was made toward subsystems, multipathing,
multi-namespace capabilities.

Those more complicated topologies we see today have become difficult
for users to visualize and understand the relationships among many
devices co-existing in the same, and 'list' has not kept up with these
complications.

As newer kernels provide more information for user space to discover,
provide a more verbose option to list this information while maintaining
backward compatibility for kernels that do not provide nvme subsystem
suppport.

The following examples are using the column format, however I find the
json output more satisfying.

The old way (no verbose options):

  # nvme list
  Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
  ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
  /dev/nvme0n1     PHLE7200015N6P4BGN-1 7335943:ICDPC5ED2ORA6.4T                 1           3.20  TB /   3.20  TB    512   B +  0 B   QDV1RD07
  /dev/nvme1n1     PHLE7200015N6P4BGN-2 7335943:ICDPC5ED2ORA6.4T                 1           3.20  TB /   3.20  TB    512   B +  0 B   QDV1RD03
  /dev/nvme2n1     CVFT50850022400GGN   INTEL SSDPE2MD400G4                      1         400.09  GB / 400.09  GB      4 KiB +  0 B   8DV101J0
  /dev/nvme3n1     CVMD4215002W1P6DGN   INTEL SSDPEDME012T4                      1           1.20  TB /   1.20  TB      4 KiB +  0 B   8DV101B0
  /dev/nvme4n1     e559e5e004175109     Linux                                    1           3.20  TB /   3.20  TB    512   B +  0 B   5.3.0-rc
  /dev/nvme4n2     e559e5e004175109     Linux                                    2           3.20  TB /   3.20  TB    512   B +  0 B   5.3.0-rc
  /dev/nvme5n1     FUMB5256000J280A     INTEL SSDPED1D140GA                      1         140.04  GB / 140.04  GB    512   B +  0 B   E40A0208

And with the new 'verbose' flag:

  # nvme list -v
  NVM Express Subsystems

  Subsystem        Subsystem-NQN                                                                                    Controllers
  ---------------- ------------------------------------------------------------------------------------------------ ----------------
  nvme-subsys0     nqn.2014.08.org.nvmexpress:8086108ePHLE7200015N6P4BGN-17335943:ICDPC5ED2ORA6.4T                  nvme1
  nvme-subsys1     nqn.2014.08.org.nvmexpress:8086108ePHLE7200015N6P4BGN-27335943:ICDPC5ED2ORA6.4T                  nvme2
  nvme-subsys2     nqn.2014.08.org.nvmexpress:80868086CVFT50850022400GGN  INTEL SSDPE2MD400G4                       nvme0
  nvme-subsys3     nqn.2014.08.org.nvmexpress:80868086CVMD4215002W1P6DGN  INTEL SSDPEDME012T4                       nvme3
  nvme-subsys4     keith-loopback-testnqn                                                                           nvme4, nvme5
  nvme-subsys5     nqn.2014.08.org.nvmexpress:80868086FUMB5256000J280A    INTEL SSDPED1D140GA                       nvme6

  NVM Express Controllers

  Device   SN                   MN                                       FR       TxPort Address        Subsystem    Namespaces
  -------- -------------------- ---------------------------------------- -------- ------ -------------- ------------ ----------------
  nvme1    PHLE7200015N6P4BGN-1 7335943:ICDPC5ED2ORA6.4T                 QDV1RD07 pcie   0000:88:00.0   nvme-subsys0 nvme0n1
  nvme2    PHLE7200015N6P4BGN-2 7335943:ICDPC5ED2ORA6.4T                 QDV1RD03 pcie   0000:89:00.0   nvme-subsys1 nvme1n1
  nvme0    CVFT50850022400GGN   INTEL SSDPE2MD400G4                      8DV101J0 pcie   0000:5e:00.0   nvme-subsys2 nvme2n1
  nvme3    CVMD4215002W1P6DGN   INTEL SSDPEDME012T4                      8DV101B0 pcie   0000:d8:00.0   nvme-subsys3 nvme3n1
  nvme4    e559e5e004175109     Linux                                    5.3.0-rc loop                  nvme-subsys4 nvme4n1, nvme4n2
  nvme5    e559e5e004175109     Linux                                    5.3.0-rc loop                  nvme-subsys4 nvme4n1, nvme4n2
  nvme6    FUMB5256000J280A     INTEL SSDPED1D140GA                      E40A0208 pcie   10001:01:00.0  nvme-subsys5 nvme5n1

  NVM Express Namespaces

  Device       NSID     Usage                      Format           Controllers
  ------------ -------- -------------------------- ---------------- ----------------
  nvme0n1      1          3.20  TB /   3.20  TB    512   B +  0 B   nvme1
  nvme1n1      1          3.20  TB /   3.20  TB    512   B +  0 B   nvme2
  nvme2n1      1        400.09  GB / 400.09  GB      4 KiB +  0 B   nvme0
  nvme3n1      1          1.20  TB /   1.20  TB      4 KiB +  0 B   nvme3
  nvme4n1      1          3.20  TB /   3.20  TB    512   B +  0 B   nvme4, nvme5
  nvme4n2      2          3.20  TB /   3.20  TB    512   B +  0 B   nvme4, nvme5
  nvme5n1      1        140.04  GB / 140.04  GB    512   B +  0 B   nvme6

Signed-off-by: Keith Busch <kbusch@kernel.org>
Documentation/nvme-list.txt
json.c
json.h
nvme-print.c
nvme-print.h
nvme.c
nvme.h