diff --git a/examples/nvme/perf/perf.c b/examples/nvme/perf/perf.c index f6fe258c6..a05c4fc8a 100644 --- a/examples/nvme/perf/perf.c +++ b/examples/nvme/perf/perf.c @@ -38,6 +38,7 @@ #include "spdk/env.h" #include "spdk/fd.h" #include "spdk/nvme.h" +#include "spdk/vmd.h" #include "spdk/queue.h" #include "spdk/string.h" #include "spdk/nvme_intel.h" @@ -186,6 +187,8 @@ static int g_outstanding_commands; static bool g_latency_ssd_tracking_enable = false; static int g_latency_sw_tracking_level = 0; +static bool g_vmd = false; + static struct ctrlr_entry *g_controllers = NULL; static int g_controllers_found = 0; static struct ns_entry *g_namespaces = NULL; @@ -1113,6 +1116,7 @@ static void usage(char *program_name) printf("\t[-m max completions per poll]\n"); printf("\t\t(default: 0 - unlimited)\n"); printf("\t[-i shared memory group ID]\n"); + printf("\t[-V enable VMD enumeration]\n"); #ifdef DEBUG printf("\t[-G enable debug logging]\n"); #else @@ -1530,7 +1534,7 @@ parse_args(int argc, char **argv) g_core_mask = NULL; g_max_completions = 0; - while ((op = getopt(argc, argv, "c:e:i:lm:n:o:q:r:k:s:t:w:DGHILM:U:")) != -1) { + while ((op = getopt(argc, argv, "c:e:i:lm:n:o:q:r:k:s:t:w:DGHILM:U:V")) != -1) { switch (op) { case 'i': case 'm': @@ -1625,6 +1629,9 @@ parse_args(int argc, char **argv) case 'L': g_latency_sw_tracking_level++; break; + case 'V': + g_vmd = true; + break; default: usage(argv[0]); return 1; @@ -1844,6 +1851,11 @@ register_controllers(void) printf("Initializing NVMe Controllers\n"); + if (g_vmd && spdk_vmd_init()) { + fprintf(stderr, "Failed to initialize VMD." + " Some NVMe devices can be unavailable.\n"); + } + TAILQ_FOREACH(trid_entry, &g_trid_list, tailq) { if (spdk_nvme_probe(&trid_entry->trid, trid_entry, probe_cb, attach_cb, NULL) != 0) { fprintf(stderr, "spdk_nvme_probe() failed for transport address '%s'\n", diff --git a/mk/nvme.libtest.mk b/mk/nvme.libtest.mk index d59884f37..b226363ab 100644 --- a/mk/nvme.libtest.mk +++ b/mk/nvme.libtest.mk @@ -39,7 +39,7 @@ include $(SPDK_ROOT_DIR)/mk/spdk.modules.mk C_SRCS = $(APP:%=%.c) SPDK_LIB_LIST = $(SOCK_MODULES_LIST) -SPDK_LIB_LIST += nvme thread util log sock +SPDK_LIB_LIST += nvme thread util log sock vmd ifeq ($(CONFIG_RDMA),y) SYS_LIBS += -libverbs -lrdmacm