[PATCHv3 2/4] nvme: extend show-topology command to add support for multipath
Hannes Reinecke
hare at suse.de
Mon Sep 8 05:53:28 PDT 2025
On 9/4/25 19:56, Nilay Shroff wrote:
> This commit enhances the show-topology command by adding support for
> NVMe multipath. With this change, users can now list all paths to a
> namespace from its corresponding head node device. Each NVMe path
> entry then also includes additional details such as ANA state, NUMA
> node, and queue depth, improving visibility into multipath configs.
> This information can be particularly helpful for debugging and
> analyzing NVMe multipath setups.
>
> To support this functionality, the "--ranking" option of the nvme
> show-topology command has been extended with a new sub-option:
> "multipath".
>
> Since this enhancement is specific to NVMe multipath, the iopolicy
> configured under each subsystem is now always displayed. Previously,
> iopolicy was shown only with nvme show-topology verbose output, but
> it is now included by default to improve usability and provide better
> context when reviewing multipath configurations via show-topology.
>
> With this update, users can view the multipath topology of a multi
> controller/port NVMe disk.
>
> Examples:
>
> $ nvme show-topology -r multipath
>
> nvme-subsys2 - NQN=nvmet_subsystem
> hostnqn=nqn.2014-08.org.nvmexpress:uuid:12b49f6e-0276-4746-b10c-56815b7e6dc2
> iopolicy=numa
>
> _ _ _<head-node>
> / _ _ _ <ana-state>
> / / _ _ _ <numa-node-list>
> / / /
> | / /
> +- nvme2n1 (ns 1) / /
> \ | |
> +- nvme2c2n1 optimized 1,2 nvme2 tcp traddr=127.0.0.2,trsvcid=4460,src_addr=127.0.0.1 live
> +- nvme2c3n1 optimized 3,4 nvme3 tcp traddr=127.0.0.3,trsvcid=4460,src_addr=127.0.0.1 live
>
> For iopolicy=numa, only NUMA node list is shown (queue depth is hidden).
>
> $ nvme show-topology -r multipath
>
> nvme-subsys2 - NQN=nvmet_subsystem
> hostnqn=nqn.2014-08.org.nvmexpress:uuid:12b49f6e-0276-4746-b10c-56815b7e6dc2
> iopolicy=queue-depth
>
> _ _ _<head-node>
> / _ _ _ <ana-state>
> / /
> / / _ _ _<queue-depth>
> | / /
> +- nvme2n1 (ns 1) / /
> \ | |
> +- nvme2c2n1 optimized 0 nvme2 tcp traddr=127.0.0.2,trsvcid=4460,src_addr=127.0.0.1 live
> +- nvme2c3n1 optimized 0 nvme3 tcp traddr=127.0.0.3,trsvcid=4460,src_addr=127.0.0.1 live
>
> For iopolicy=queue-depth, queue depth is shown (NUMA node list is hidden).
>
> $ nvme show-topology -r multipath
>
> nvme-subsys2 - NQN=nvmet_subsystem
> hostnqn=nqn.2014-08.org.nvmexpress:uuid:12b49f6e-0276-4746-b10c-56815b7e6dc2
> iopolicy=round-robin
>
> _ _ _<head-node>
> / _ _ _ <ana-state>
> / /
> / /
> | /
> +- nvme2n1 (ns 1) /
> \ |
> +- nvme2c2n1 optimized nvme2 tcp traddr=127.0.0.2,trsvcid=4460,src_addr=127.0.0.1 live
> +- nvme2c3n1 optimized nvme3 tcp traddr=127.0.0.3,trsvcid=4460,src_addr=127.0.0.1 live
>
> For iopolicy=round-robin, both NUMA node list and queue depth are hidden.
>
> Note:
> The annotations above (e.g., <numa-node-list>, <ana-state>, <head-node>,
> <queue-depth>) are for illustration only and are not part of the actual
> command output. A more human-friendly tabular format will be introduced
> in a follow-up patches.
>
> Signed-off-by: Nilay Shroff <nilay at linux.ibm.com>
> ---
> nvme-print-binary.c | 1 +
> nvme-print-json.c | 36 +++++++++++++++----
> nvme-print-stdout.c | 85 ++++++++++++++++++++++++++++++++++++++++++---
> nvme-print.c | 4 ++-
> nvme-print.h | 1 +
> nvme.c | 4 ++-
> nvme.h | 1 +
> 7 files changed, 120 insertions(+), 12 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare at suse.de>
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare at suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg
HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich
More information about the Linux-nvme
mailing list