dm-multipath low performance with blk-mq

Sagi Grimberg sagig at dev.mellanox.co.il
Wed Jan 27 03:10:20 PST 2016


>> Don't think I have time at the moment, sorry..
>
> No problem, I pulled the latest DM changes ontop of 'nvme-loop.2', see:
> http://git.kernel.org/cgit/linux/kernel/git/snitzer/linux.git/log/?h=devel
>
> I was able to use nvme-loop like was documented here:
> http://git.infradead.org/users/hch/block.git/commit/47d8d5b1db270463b5bd7b6a68cd89bd8762840d
>
> But I'm not too sure how Sagi used the resulting nvme device with
> multipath.. maybe he just manually pushed down a DM multipath table?
> And only used the single /dev/nvme0n1 device?  Sagi?

Hi Mike, sorry for the late response, I'm kinda caught up with other stuff.

So I think you are missing the a patch to support multipath that didn't
exist back when Christoph submitted the patchset.

It's a temp hack, and I don't have time to even check that it applies
correctly on nvme-loop.2, but here it is:

--
diff --git a/drivers/nvme/target/admin-cmd.c 
b/drivers/nvme/target/admin-cmd.c
index 0931e91..532234b 100644
--- a/drivers/nvme/target/admin-cmd.c
+++ b/drivers/nvme/target/admin-cmd.c
@@ -180,7 +180,8 @@ static void nvmet_execute_identify_ns(struct 
nvmet_req *req)
          */
         id->nmic = (1 << 0);

-       /* XXX: provide a nguid value! */
+       /* XXX: provide a real nguid value! */
+       memcpy(&id->nguid, &ns->nguid, sizeof(uuid_le));

         id->lbaf[0].ds = ns->blksize_shift;

diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index e2a8893..a99343a 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -145,6 +145,9 @@ struct nvmet_ns *nvmet_ns_alloc(struct nvmet_subsys 
*subsys, u32 nsid)
         ns->nsid = nsid;
         ns->subsys = subsys;

+       /* XXX: Hacking nguids with uuid  */
+       uuid_le_gen(&ns->nguid);
+
         return ns;

  free_ns:
@@ -436,6 +439,7 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char 
*subsys_name)
         if (!subsys)
                 return NULL;

+       subsys->ver = NVME_VS(1, 2);
         subsys->subsys_name = kstrndup(subsys_name, NVMF_NQN_SIZE,
                         GFP_KERNEL);
         if (IS_ERR(subsys->subsys_name)) {
diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h
index 111aa5e..8f68c5f 100644
--- a/drivers/nvme/target/nvmet.h
+++ b/drivers/nvme/target/nvmet.h
@@ -19,6 +19,7 @@ struct nvmet_ns {
         u32                     nsid;
         u32                     blksize_shift;
         loff_t                  size;
+       uuid_le                 nguid;

         struct nvmet_subsys     *subsys;
         const char              *device_path;
--



More information about the Linux-nvme mailing list