All of lore.kernel.org
 help / color / mirror / Atom feed
From: sagi@grimberg.me (Sagi Grimberg)
Subject: [PATCH 17/17] nvme-rdma: Add T10-PI support
Date: Thu, 31 May 2018 02:05:08 +0300	[thread overview]
Message-ID: <f45105cf-48e7-62d8-ca3a-56f9ce248640@grimberg.me> (raw)
In-Reply-To: <1527436222-15494-18-git-send-email-maxg@mellanox.com>

Max,

> For capable HCAs (e.g. ConnectX-4/ConnectX-5) this will allow end-to-end
> protection information passthrough and validation for NVMe over RDMA transport.
> Similar to iSER, T10-PI offload support was implemented over RDMA signature
> verbs API and is enabled via module parameter. In the future we might want
> to add support per controller.

In NVMe we like to call inherited features differently, in nvme its
metadata and not T10-PI :)

Thanks for doing this btw!

Looking at the code, I realize that the rdma core API can improve
significantly. I think we can actually achieve a much better
abstraction of the HW implementation details. This would be a good
chance to clean it all up.

What I'm thinking of is we should have a single MR that
describes everything (data, metadata, signature parameters) instead
of exposing the use of multiple MRs via the API.

Here's how I think we can do it (and correct me where I'm wrong)
1. modify ib_alloc_mr to accept another parameter of max_meta_sg
which will tell the driver to allocate more "internal" mrs or entries
for a signature enabled MR (driver that does not support would fail if
its set or non-signature MR was requested).

2. introduce ib_map_mr_sg_sig that will accept both data and meta sgls
and will prepare the internal MR mappings.

3. have ib_sig_handover_wr perform whatever needed to do the job.
Which is posting the reg_mr for the "internal" mr(s).

Note that IIRC the Mellanox device can register with disabling the
device checking the MR was invalidated so it wouldn't need to be
locally invalidated (note that this is an internal MR that is private
to the driver with local access rights so no harm in not invalidating it).

4. Move ib_sig_attrs into a signature enabled ib_mr (dynamically
allocated).

5. Given that we now have two block consumers of this, add a better
abstraction helpers that take struct request and blk_integrity and
fill out the ib_sig_attrs accordingly...

Side note, the signature enabled MR can have only a single "internal"
mr because the strided format in the mlx5 signature segment is perfectly
capable of accepting two strides in a single lkey.

So consider a signature stride that takes two sgls:
data: {d1, d2, d3, d4}
meta: {m1, m2, m3, m4}

So the internal MR will look like:

            data start  meta start
            |           |
            -------------------------
            |d1|d2|d3|d4|m1|m2|m3|m4|
            -------------------------

and the sig_mr stride block would be same lkey but different
offsets in it (offset 0 and offset d1+d2+d3+d4)

Thoughts?

  parent reply	other threads:[~2018-05-30 23:05 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-27 15:50 [RFC PATCH 00/17] T10-PI support for NVMeoF/RDMA host Max Gurtovoy
2018-05-27 15:50 ` [PATCH 01/17] IB/isert: fix T10-pi check mask setting Max Gurtovoy
2018-05-27 15:50   ` Max Gurtovoy
2018-05-28  7:21   ` Christoph Hellwig
2018-05-28  7:21     ` Christoph Hellwig
2018-05-28 11:54     ` Max Gurtovoy
2018-05-28 11:54       ` Max Gurtovoy
2018-05-28 12:03       ` Christoph Hellwig
2018-05-28 12:03         ` Christoph Hellwig
2018-05-28 12:04         ` Max Gurtovoy
2018-05-28 12:04           ` Max Gurtovoy
2018-05-28 16:33           ` Jason Gunthorpe
2018-05-28 16:33             ` Jason Gunthorpe
2018-05-29  3:01             ` Martin K. Petersen
2018-05-29  3:01               ` Martin K. Petersen
2018-05-29 12:08               ` Max Gurtovoy
2018-05-29 12:08                 ` Max Gurtovoy
2018-05-29 19:23                 ` Jason Gunthorpe
2018-05-29 19:23                   ` Jason Gunthorpe
2018-05-29 22:11                   ` Martin K. Petersen
2018-05-29 22:11                     ` Martin K. Petersen
2018-05-29 22:19                     ` Jason Gunthorpe
2018-05-29 22:19                       ` Jason Gunthorpe
2018-05-29 22:41                       ` Martin K. Petersen
2018-05-29 22:41                         ` Martin K. Petersen
2018-05-30  8:07                       ` Max Gurtovoy
2018-05-30  8:07                         ` Max Gurtovoy
2018-05-30 15:30                         ` Jason Gunthorpe
2018-05-30 15:30                           ` Jason Gunthorpe
2018-05-30 21:47   ` Sagi Grimberg
2018-05-30 21:47     ` Sagi Grimberg
2018-05-30 21:49   ` Sagi Grimberg
2018-05-30 21:49     ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 02/17] RDMA/core: introduce check masks for T10-PI offload Max Gurtovoy
2018-05-28  7:21   ` Christoph Hellwig
2018-05-30 21:56   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 03/17] IB/iser: use T10-PI check mask definitions from core layer Max Gurtovoy
2018-05-28  7:22   ` Christoph Hellwig
2018-05-30 21:57   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 04/17] IB/isert: " Max Gurtovoy
2018-05-28  7:22   ` Christoph Hellwig
2018-05-30 10:48     ` Max Gurtovoy
2018-05-30 12:08       ` Christoph Hellwig
2018-05-30 15:24         ` Jason Gunthorpe
2018-05-30 21:59           ` Sagi Grimberg
2018-05-30 21:58   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 05/17] nvme: Fix extended data LBA supported setting Max Gurtovoy
2018-05-28  7:22   ` Christoph Hellwig
2018-05-29 12:47     ` Max Gurtovoy
2018-05-30 22:00   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 06/17] nvme: Add WARN in case fabrics ctrl was set with wrong metadata caps Max Gurtovoy
2018-05-28  7:24   ` Christoph Hellwig
2018-05-28 14:56     ` Max Gurtovoy
2018-05-30 22:05     ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 07/17] nvme: introduce max_integrity_segments ctrl attribute Max Gurtovoy
2018-05-30 22:08   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 08/17] nvme: limit integrity segments to be <= data segments Max Gurtovoy
2018-05-30 22:09   ` Sagi Grimberg
2018-06-07 13:02     ` Max Gurtovoy
2018-06-07 15:23       ` Sagi Grimberg
2018-06-07 23:50       ` Martin K. Petersen
2018-06-09  1:33         ` Max Gurtovoy
2018-06-13  0:35           ` Martin K. Petersen
2018-05-27 15:50 ` [PATCH 09/17] nvme: reduce the metadata size in case the ctrl doesn't support it Max Gurtovoy
2018-05-28  7:25   ` Christoph Hellwig
2018-05-27 15:50 ` [PATCH 10/17] nvme: export nvme_ns_has_pi function Max Gurtovoy
2018-05-28  7:25   ` Christoph Hellwig
2018-05-28 12:41     ` Max Gurtovoy
2018-05-30 22:19   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 11/17] nvme-rdma: Introduce cqe for local invalidation Max Gurtovoy
2018-05-28  7:25   ` Christoph Hellwig
2018-05-30 22:26   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 12/17] nvme-rdma: Introduce nvme_rdma_set_keyed_sgl helper func Max Gurtovoy
2018-05-28  7:26   ` Christoph Hellwig
2018-05-30 22:27     ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 13/17] nvme-rdma: introduce nvme_rdma_sgl structure Max Gurtovoy
2018-05-27 15:50 ` [PATCH 14/17] nvme-rdma: refactor cmd mapping/unmapping mechanism Max Gurtovoy
2018-05-30 22:33   ` Sagi Grimberg
2018-05-27 15:50 ` [PATCH 15/17] nvme-rdma: Add helper function for preparing sg list to RDMA operation Max Gurtovoy
2018-05-27 15:50 ` [PATCH 16/17] nvme-rdma: Introduce nvme_rdma_first_wr helper function Max Gurtovoy
2018-05-27 15:50 ` [PATCH 17/17] nvme-rdma: Add T10-PI support Max Gurtovoy
2018-05-28  7:28   ` Christoph Hellwig
2018-05-30 23:05   ` Sagi Grimberg [this message]
2018-06-03  8:51     ` Max Gurtovoy
2018-06-03 11:30       ` Sagi Grimberg
2018-06-03 14:01         ` Oren Duer
2018-06-03 14:04           ` Oren Duer
2018-06-03 16:30           ` Sagi Grimberg
2018-06-05  6:35             ` Oren Duer
2018-06-07 15:30               ` Sagi Grimberg
2018-06-06 12:33         ` Max Gurtovoy
2018-06-07 15:26           ` Sagi Grimberg
2018-05-30 21:47 ` [RFC PATCH 00/17] T10-PI support for NVMeoF/RDMA host Sagi Grimberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f45105cf-48e7-62d8-ca3a-56f9ce248640@grimberg.me \
    --to=sagi@grimberg.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.