mbox series

[V1,rdma-core,00/13] verbs: Introduce import verbs for device, PD, MR

Message ID 1593937189-8744-1-git-send-email-yishaih@mellanox.com (mailing list archive)
Headers show
Series verbs: Introduce import verbs for device, PD, MR | expand

Message

Yishai Hadas July 5, 2020, 8:19 a.m. UTC
This series Introduces import verbs for device, PD, MR which enables processes
to share their ibv_context and then share PD(s) and MR(s) that are associated
with.

This functionality enables utilizing and optimizing some application flows, few
examples below.

Any solution which is a single business logic based on multi-process design
needs this. Example include NGINX, with TCP load balancing, sharing the RSS
indirection table with RQ per process. HPC frameworks with multi-rank (process)
solution on single hosts. UCX can share IB resources using the shared PD and
can help dispatch data to multiple processes/MR's in single RDMA operation.
Also, there are use cases when a primary processes registered a large shared
memory range, and each worker process spawned will create a private QP on the
shared PD, and use the shared MR to save the registration time per-process.

As part of this series was added also some pyverbs stuff to support and
demonstrate some usage of the APIs.

The verbs APIs were introduced in the mailing list by the below RFC [1], the
matching kernel series was sent to rdma-next,

PR: https://github.com/linux-rdma/rdma-core/pull/776
[1] https://patchwork.kernel.org/patch/11540665/

Changes from V0:
- Replace ordering of patches #3 and #4 to prevent incomplete functionality.
- Added some note as part of ibv_import_device() to explain why it's safe
  for dissociated flow.
- Improve man pages in some places.
- Drop the IOVA attribute setting which was not really in use.
- Fix some style notes.
- Refer in commit messages to ioctl command instead of KABI.

Yishai

Edward Srouji (3):
  pyverbs: Support verbs import APIs
  Documentation: Add usage example for verbs import
  tests: Add a shared PD Pyverbs test

Yishai Hadas (10):
  Update kernel headers
  verbs: Close async_fd only when it was previously created
  verbs: Enhance async FD usage
  verbs: Introduce ibv_import_device() verb
  mlx5: Refactor mlx5_alloc_context()
  mlx5: Implement the import device functionality
  verbs: Introduce ibv_import/unimport_pd() verbs
  mlx5: Implement the import/unimport PD verbs
  verbs: Introduce ibv_import/unimport_mr() verbs
  mlx5: Implement the import/unimport MR verbs

 Documentation/pyverbs.md                   |  40 ++++
 debian/libibverbs1.symbols                 |   5 +
 kernel-headers/rdma/ib_user_ioctl_cmds.h   |  15 ++
 kernel-headers/rdma/mlx5_user_ioctl_cmds.h |  14 ++
 kernel-headers/rdma/rdma_netlink.h         |   8 +
 kernel-headers/rdma/rdma_user_ioctl_cmds.h |   2 +-
 libibverbs/cmd_cq.c                        |   9 +-
 libibverbs/cmd_device.c                    |  32 ++-
 libibverbs/cmd_mr.c                        |  31 +++
 libibverbs/cmd_qp.c                        |   4 +
 libibverbs/cmd_srq.c                       |   4 +
 libibverbs/cmd_wq.c                        |   4 +
 libibverbs/device.c                        |  73 ++++++-
 libibverbs/driver.h                        |  14 ++
 libibverbs/dummy_ops.c                     |  30 +++
 libibverbs/ibverbs.h                       |   1 +
 libibverbs/libibverbs.map.in               |   7 +
 libibverbs/man/CMakeLists.txt              |   5 +
 libibverbs/man/ibv_import_device.3.md      |  48 +++++
 libibverbs/man/ibv_import_mr.3.md          |  64 ++++++
 libibverbs/man/ibv_import_pd.3.md          |  59 ++++++
 libibverbs/verbs.c                         |  30 +++
 libibverbs/verbs.h                         |  26 +++
 providers/mlx5/mlx5.c                      | 319 ++++++++++++++++++-----------
 providers/mlx5/mlx5.h                      |   6 +
 providers/mlx5/verbs.c                     |  78 ++++++-
 pyverbs/device.pyx                         |  12 +-
 pyverbs/libibverbs.pxd                     |   5 +
 pyverbs/mr.pxd                             |   1 +
 pyverbs/mr.pyx                             |  60 +++++-
 pyverbs/pd.pxd                             |   1 +
 pyverbs/pd.pyx                             |  37 +++-
 tests/CMakeLists.txt                       |   1 +
 tests/base.py                              |  11 +-
 tests/test_shared_pd.py                    |  95 +++++++++
 35 files changed, 999 insertions(+), 152 deletions(-)
 create mode 100644 libibverbs/man/ibv_import_device.3.md
 create mode 100644 libibverbs/man/ibv_import_mr.3.md
 create mode 100644 libibverbs/man/ibv_import_pd.3.md
 create mode 100644 tests/test_shared_pd.py

Comments

Yishai Hadas July 9, 2020, 7:40 a.m. UTC | #1
On 7/5/2020 11:19 AM, Yishai Hadas wrote:
> This series Introduces import verbs for device, PD, MR which enables processes
> to share their ibv_context and then share PD(s) and MR(s) that are associated
> with.
> 
> This functionality enables utilizing and optimizing some application flows, few
> examples below.
> 
> Any solution which is a single business logic based on multi-process design
> needs this. Example include NGINX, with TCP load balancing, sharing the RSS
> indirection table with RQ per process. HPC frameworks with multi-rank (process)
> solution on single hosts. UCX can share IB resources using the shared PD and
> can help dispatch data to multiple processes/MR's in single RDMA operation.
> Also, there are use cases when a primary processes registered a large shared
> memory range, and each worker process spawned will create a private QP on the
> shared PD, and use the shared MR to save the registration time per-process.
> 
> As part of this series was added also some pyverbs stuff to support and
> demonstrate some usage of the APIs.
> 
> The verbs APIs were introduced in the mailing list by the below RFC [1], the
> matching kernel series was sent to rdma-next,
> 
> PR: https://github.com/linux-rdma/rdma-core/pull/776
> [1] https://patchwork.kernel.org/patch/11540665/
> 
> Changes from V0:
> - Replace ordering of patches #3 and #4 to prevent incomplete functionality.
> - Added some note as part of ibv_import_device() to explain why it's safe
>    for dissociated flow.
> - Improve man pages in some places.
> - Drop the IOVA attribute setting which was not really in use.
> - Fix some style notes.
> - Refer in commit messages to ioctl command instead of KABI.
> 
> Yishai
> 
> Edward Srouji (3):
>    pyverbs: Support verbs import APIs
>    Documentation: Add usage example for verbs import
>    tests: Add a shared PD Pyverbs test
> 
> Yishai Hadas (10):
>    Update kernel headers
>    verbs: Close async_fd only when it was previously created
>    verbs: Enhance async FD usage
>    verbs: Introduce ibv_import_device() verb
>    mlx5: Refactor mlx5_alloc_context()
>    mlx5: Implement the import device functionality
>    verbs: Introduce ibv_import/unimport_pd() verbs
>    mlx5: Implement the import/unimport PD verbs
>    verbs: Introduce ibv_import/unimport_mr() verbs
>    mlx5: Implement the import/unimport MR verbs
> 
>   Documentation/pyverbs.md                   |  40 ++++
>   debian/libibverbs1.symbols                 |   5 +
>   kernel-headers/rdma/ib_user_ioctl_cmds.h   |  15 ++
>   kernel-headers/rdma/mlx5_user_ioctl_cmds.h |  14 ++
>   kernel-headers/rdma/rdma_netlink.h         |   8 +
>   kernel-headers/rdma/rdma_user_ioctl_cmds.h |   2 +-
>   libibverbs/cmd_cq.c                        |   9 +-
>   libibverbs/cmd_device.c                    |  32 ++-
>   libibverbs/cmd_mr.c                        |  31 +++
>   libibverbs/cmd_qp.c                        |   4 +
>   libibverbs/cmd_srq.c                       |   4 +
>   libibverbs/cmd_wq.c                        |   4 +
>   libibverbs/device.c                        |  73 ++++++-
>   libibverbs/driver.h                        |  14 ++
>   libibverbs/dummy_ops.c                     |  30 +++
>   libibverbs/ibverbs.h                       |   1 +
>   libibverbs/libibverbs.map.in               |   7 +
>   libibverbs/man/CMakeLists.txt              |   5 +
>   libibverbs/man/ibv_import_device.3.md      |  48 +++++
>   libibverbs/man/ibv_import_mr.3.md          |  64 ++++++
>   libibverbs/man/ibv_import_pd.3.md          |  59 ++++++
>   libibverbs/verbs.c                         |  30 +++
>   libibverbs/verbs.h                         |  26 +++
>   providers/mlx5/mlx5.c                      | 319 ++++++++++++++++++-----------
>   providers/mlx5/mlx5.h                      |   6 +
>   providers/mlx5/verbs.c                     |  78 ++++++-
>   pyverbs/device.pyx                         |  12 +-
>   pyverbs/libibverbs.pxd                     |   5 +
>   pyverbs/mr.pxd                             |   1 +
>   pyverbs/mr.pyx                             |  60 +++++-
>   pyverbs/pd.pxd                             |   1 +
>   pyverbs/pd.pyx                             |  37 +++-
>   tests/CMakeLists.txt                       |   1 +
>   tests/base.py                              |  11 +-
>   tests/test_shared_pd.py                    |  95 +++++++++
>   35 files changed, 999 insertions(+), 152 deletions(-)
>   create mode 100644 libibverbs/man/ibv_import_device.3.md
>   create mode 100644 libibverbs/man/ibv_import_mr.3.md
>   create mode 100644 libibverbs/man/ibv_import_pd.3.md
>   create mode 100644 tests/test_shared_pd.py
> 

The PR was merged.

Thanks,
Yishai