[vhost,v4,00/16] vdpa: Add support for vq descriptor mappings

Message ID 20231018171456.1624030-2-dtatulea@nvidia.com
Headers
Series vdpa: Add support for vq descriptor mappings |

Message

Dragos Tatulea Oct. 18, 2023, 5:14 p.m. UTC
  This patch series adds support for vq descriptor table mappings which
are used to improve vdpa live migration downtime. The improvement comes
from using smaller mappings which take less time to create and destroy
in hw.

The first part adds the vdpa core changes from Si-Wei [0].

The second part adds support in mlx5_vdpa:
- Refactor the mr code to be able to cleanly add descriptor mappings.
- Add hardware descriptor mr support.
- Properly update iotlb for cvq during ASID switch.

Changes in v4:

- Improved the handling of empty iotlbs. See mlx5_vdpa_change_map
  section in patch "12/16 vdpa/mlx5: Improve mr upate flow".
- Fixed a invalid usage of desc_group_mkey hw vq field when the
  capability is not there. See patch
  "15/16 vdpa/mlx5: Enable hw support for vq descriptor map".

Changes in v3:

- dup_iotlb now checks for src == dst case and returns an error.
- Renamed iotlb parameter in dup_iotlb to dst.
- Removed a redundant check of the asid value.
- Fixed a commit message.
- mx5_ifc.h patch has been applied to mlx5-vhost tree. When applying
  this series please pull from that tree first.

Changes in v2:

- The "vdpa/mlx5: Enable hw support for vq descriptor mapping" change
  was split off into two patches to avoid merge conflicts into the tree
  of Linus.

  The first patch contains only changes for mlx5_ifc.h. This must be
  applied into the mlx5-vdpa tree [1] first. Once this patch is applied
  on mlx5-vdpa, the change has to be pulled fom mlx5-vdpa into the vhost
  tree and only then the remaining patches can be applied.

[0] https://lore.kernel.org/virtualization/1694248959-13369-1-git-send-email-si-wei.liu@oracle.com
[1] https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=mlx5-vhost

Dragos Tatulea (13):
  vdpa/mlx5: Expose descriptor group mkey hw capability
  vdpa/mlx5: Create helper function for dma mappings
  vdpa/mlx5: Decouple cvq iotlb handling from hw mapping code
  vdpa/mlx5: Take cvq iotlb lock during refresh
  vdpa/mlx5: Collapse "dvq" mr add/delete functions
  vdpa/mlx5: Rename mr destroy functions
  vdpa/mlx5: Allow creation/deletion of any given mr struct
  vdpa/mlx5: Move mr mutex out of mr struct
  vdpa/mlx5: Improve mr update flow
  vdpa/mlx5: Introduce mr for vq descriptor
  vdpa/mlx5: Enable hw support for vq descriptor mapping
  vdpa/mlx5: Make iotlb helper functions more generic
  vdpa/mlx5: Update cvq iotlb mapping on ASID change

Si-Wei Liu (3):
  vdpa: introduce dedicated descriptor group for virtqueue
  vhost-vdpa: introduce descriptor group backend feature
  vhost-vdpa: uAPI to get dedicated descriptor group id

 drivers/vdpa/mlx5/core/mlx5_vdpa.h |  31 +++--
 drivers/vdpa/mlx5/core/mr.c        | 194 ++++++++++++++++-------------
 drivers/vdpa/mlx5/core/resources.c |   6 +-
 drivers/vdpa/mlx5/net/mlx5_vnet.c  | 105 +++++++++++-----
 drivers/vhost/vdpa.c               |  27 ++++
 include/linux/mlx5/mlx5_ifc.h      |   8 +-
 include/linux/mlx5/mlx5_ifc_vdpa.h |   7 +-
 include/linux/vdpa.h               |  11 ++
 include/uapi/linux/vhost.h         |   8 ++
 include/uapi/linux/vhost_types.h   |   5 +
 10 files changed, 272 insertions(+), 130 deletions(-)
  

Comments

Michael S. Tsirkin Oct. 18, 2023, 5:24 p.m. UTC | #1
On Wed, Oct 18, 2023 at 08:14:39PM +0300, Dragos Tatulea wrote:
> This patch series adds support for vq descriptor table mappings which
> are used to improve vdpa live migration downtime. The improvement comes
> from using smaller mappings which take less time to create and destroy
> in hw.
> 
> The first part adds the vdpa core changes from Si-Wei [0].
> 
> The second part adds support in mlx5_vdpa:
> - Refactor the mr code to be able to cleanly add descriptor mappings.
> - Add hardware descriptor mr support.
> - Properly update iotlb for cvq during ASID switch.
> 
> Changes in v4:
> 
> - Improved the handling of empty iotlbs. See mlx5_vdpa_change_map
>   section in patch "12/16 vdpa/mlx5: Improve mr upate flow".
> - Fixed a invalid usage of desc_group_mkey hw vq field when the
>   capability is not there. See patch
>   "15/16 vdpa/mlx5: Enable hw support for vq descriptor map".

At this point, whether this patchset makes it in 6.7 will largely depend
on how many rcs there are in 6.6, so it can get some time in next.


> Changes in v3:
> 
> - dup_iotlb now checks for src == dst case and returns an error.
> - Renamed iotlb parameter in dup_iotlb to dst.
> - Removed a redundant check of the asid value.
> - Fixed a commit message.
> - mx5_ifc.h patch has been applied to mlx5-vhost tree. When applying
>   this series please pull from that tree first.
> 
> Changes in v2:
> 
> - The "vdpa/mlx5: Enable hw support for vq descriptor mapping" change
>   was split off into two patches to avoid merge conflicts into the tree
>   of Linus.
> 
>   The first patch contains only changes for mlx5_ifc.h. This must be
>   applied into the mlx5-vdpa tree [1] first. Once this patch is applied
>   on mlx5-vdpa, the change has to be pulled fom mlx5-vdpa into the vhost
>   tree and only then the remaining patches can be applied.
> 
> [0] https://lore.kernel.org/virtualization/1694248959-13369-1-git-send-email-si-wei.liu@oracle.com
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=mlx5-vhost
> 
> Dragos Tatulea (13):
>   vdpa/mlx5: Expose descriptor group mkey hw capability
>   vdpa/mlx5: Create helper function for dma mappings
>   vdpa/mlx5: Decouple cvq iotlb handling from hw mapping code
>   vdpa/mlx5: Take cvq iotlb lock during refresh
>   vdpa/mlx5: Collapse "dvq" mr add/delete functions
>   vdpa/mlx5: Rename mr destroy functions
>   vdpa/mlx5: Allow creation/deletion of any given mr struct
>   vdpa/mlx5: Move mr mutex out of mr struct
>   vdpa/mlx5: Improve mr update flow
>   vdpa/mlx5: Introduce mr for vq descriptor
>   vdpa/mlx5: Enable hw support for vq descriptor mapping
>   vdpa/mlx5: Make iotlb helper functions more generic
>   vdpa/mlx5: Update cvq iotlb mapping on ASID change
> 
> Si-Wei Liu (3):
>   vdpa: introduce dedicated descriptor group for virtqueue
>   vhost-vdpa: introduce descriptor group backend feature
>   vhost-vdpa: uAPI to get dedicated descriptor group id
> 
>  drivers/vdpa/mlx5/core/mlx5_vdpa.h |  31 +++--
>  drivers/vdpa/mlx5/core/mr.c        | 194 ++++++++++++++++-------------
>  drivers/vdpa/mlx5/core/resources.c |   6 +-
>  drivers/vdpa/mlx5/net/mlx5_vnet.c  | 105 +++++++++++-----
>  drivers/vhost/vdpa.c               |  27 ++++
>  include/linux/mlx5/mlx5_ifc.h      |   8 +-
>  include/linux/mlx5/mlx5_ifc_vdpa.h |   7 +-
>  include/linux/vdpa.h               |  11 ++
>  include/uapi/linux/vhost.h         |   8 ++
>  include/uapi/linux/vhost_types.h   |   5 +
>  10 files changed, 272 insertions(+), 130 deletions(-)
> 
> -- 
> 2.41.0
  
Si-Wei Liu Oct. 19, 2023, 11:47 p.m. UTC | #2
For patches 05-16:

Reviewed-by: Si-Wei Liu <si-wei.liu@oracle.com>
Tested-by: Si-Wei Liu <si-wei.liu@oracle.com>

Thanks for the fixes!

On 10/18/2023 10:14 AM, Dragos Tatulea wrote:
> This patch series adds support for vq descriptor table mappings which
> are used to improve vdpa live migration downtime. The improvement comes
> from using smaller mappings which take less time to create and destroy
> in hw.
>
> The first part adds the vdpa core changes from Si-Wei [0].
>
> The second part adds support in mlx5_vdpa:
> - Refactor the mr code to be able to cleanly add descriptor mappings.
> - Add hardware descriptor mr support.
> - Properly update iotlb for cvq during ASID switch.
>
> Changes in v4:
>
> - Improved the handling of empty iotlbs. See mlx5_vdpa_change_map
>    section in patch "12/16 vdpa/mlx5: Improve mr upate flow".
> - Fixed a invalid usage of desc_group_mkey hw vq field when the
>    capability is not there. See patch
>    "15/16 vdpa/mlx5: Enable hw support for vq descriptor map".
>
> Changes in v3:
>
> - dup_iotlb now checks for src == dst case and returns an error.
> - Renamed iotlb parameter in dup_iotlb to dst.
> - Removed a redundant check of the asid value.
> - Fixed a commit message.
> - mx5_ifc.h patch has been applied to mlx5-vhost tree. When applying
>    this series please pull from that tree first.
>
> Changes in v2:
>
> - The "vdpa/mlx5: Enable hw support for vq descriptor mapping" change
>    was split off into two patches to avoid merge conflicts into the tree
>    of Linus.
>
>    The first patch contains only changes for mlx5_ifc.h. This must be
>    applied into the mlx5-vdpa tree [1] first. Once this patch is applied
>    on mlx5-vdpa, the change has to be pulled fom mlx5-vdpa into the vhost
>    tree and only then the remaining patches can be applied.
>
> [0] https://lore.kernel.org/virtualization/1694248959-13369-1-git-send-email-si-wei.liu@oracle.com
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=mlx5-vhost
>
> Dragos Tatulea (13):
>    vdpa/mlx5: Expose descriptor group mkey hw capability
>    vdpa/mlx5: Create helper function for dma mappings
>    vdpa/mlx5: Decouple cvq iotlb handling from hw mapping code
>    vdpa/mlx5: Take cvq iotlb lock during refresh
>    vdpa/mlx5: Collapse "dvq" mr add/delete functions
>    vdpa/mlx5: Rename mr destroy functions
>    vdpa/mlx5: Allow creation/deletion of any given mr struct
>    vdpa/mlx5: Move mr mutex out of mr struct
>    vdpa/mlx5: Improve mr update flow
>    vdpa/mlx5: Introduce mr for vq descriptor
>    vdpa/mlx5: Enable hw support for vq descriptor mapping
>    vdpa/mlx5: Make iotlb helper functions more generic
>    vdpa/mlx5: Update cvq iotlb mapping on ASID change
>
> Si-Wei Liu (3):
>    vdpa: introduce dedicated descriptor group for virtqueue
>    vhost-vdpa: introduce descriptor group backend feature
>    vhost-vdpa: uAPI to get dedicated descriptor group id
>
>   drivers/vdpa/mlx5/core/mlx5_vdpa.h |  31 +++--
>   drivers/vdpa/mlx5/core/mr.c        | 194 ++++++++++++++++-------------
>   drivers/vdpa/mlx5/core/resources.c |   6 +-
>   drivers/vdpa/mlx5/net/mlx5_vnet.c  | 105 +++++++++++-----
>   drivers/vhost/vdpa.c               |  27 ++++
>   include/linux/mlx5/mlx5_ifc.h      |   8 +-
>   include/linux/mlx5/mlx5_ifc_vdpa.h |   7 +-
>   include/linux/vdpa.h               |  11 ++
>   include/uapi/linux/vhost.h         |   8 ++
>   include/uapi/linux/vhost_types.h   |   5 +
>   10 files changed, 272 insertions(+), 130 deletions(-)
>
  
Lei Yang Oct. 24, 2023, 6:45 a.m. UTC | #3
QE tested this series v4 with regression testing on real nic, there
are no new issues.

Tested-by: Lei Yang <leiyang@redhat.com>


On Fri, Oct 20, 2023 at 7:50 AM Si-Wei Liu <si-wei.liu@oracle.com> wrote:
>
> For patches 05-16:
>
> Reviewed-by: Si-Wei Liu <si-wei.liu@oracle.com>
> Tested-by: Si-Wei Liu <si-wei.liu@oracle.com>
>
> Thanks for the fixes!
>
> On 10/18/2023 10:14 AM, Dragos Tatulea wrote:
> > This patch series adds support for vq descriptor table mappings which
> > are used to improve vdpa live migration downtime. The improvement comes
> > from using smaller mappings which take less time to create and destroy
> > in hw.
> >
> > The first part adds the vdpa core changes from Si-Wei [0].
> >
> > The second part adds support in mlx5_vdpa:
> > - Refactor the mr code to be able to cleanly add descriptor mappings.
> > - Add hardware descriptor mr support.
> > - Properly update iotlb for cvq during ASID switch.
> >
> > Changes in v4:
> >
> > - Improved the handling of empty iotlbs. See mlx5_vdpa_change_map
> >    section in patch "12/16 vdpa/mlx5: Improve mr upate flow".
> > - Fixed a invalid usage of desc_group_mkey hw vq field when the
> >    capability is not there. See patch
> >    "15/16 vdpa/mlx5: Enable hw support for vq descriptor map".
> >
> > Changes in v3:
> >
> > - dup_iotlb now checks for src == dst case and returns an error.
> > - Renamed iotlb parameter in dup_iotlb to dst.
> > - Removed a redundant check of the asid value.
> > - Fixed a commit message.
> > - mx5_ifc.h patch has been applied to mlx5-vhost tree. When applying
> >    this series please pull from that tree first.
> >
> > Changes in v2:
> >
> > - The "vdpa/mlx5: Enable hw support for vq descriptor mapping" change
> >    was split off into two patches to avoid merge conflicts into the tree
> >    of Linus.
> >
> >    The first patch contains only changes for mlx5_ifc.h. This must be
> >    applied into the mlx5-vdpa tree [1] first. Once this patch is applied
> >    on mlx5-vdpa, the change has to be pulled fom mlx5-vdpa into the vhost
> >    tree and only then the remaining patches can be applied.
> >
> > [0] https://lore.kernel.org/virtualization/1694248959-13369-1-git-send-email-si-wei.liu@oracle.com
> > [1] https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=mlx5-vhost
> >
> > Dragos Tatulea (13):
> >    vdpa/mlx5: Expose descriptor group mkey hw capability
> >    vdpa/mlx5: Create helper function for dma mappings
> >    vdpa/mlx5: Decouple cvq iotlb handling from hw mapping code
> >    vdpa/mlx5: Take cvq iotlb lock during refresh
> >    vdpa/mlx5: Collapse "dvq" mr add/delete functions
> >    vdpa/mlx5: Rename mr destroy functions
> >    vdpa/mlx5: Allow creation/deletion of any given mr struct
> >    vdpa/mlx5: Move mr mutex out of mr struct
> >    vdpa/mlx5: Improve mr update flow
> >    vdpa/mlx5: Introduce mr for vq descriptor
> >    vdpa/mlx5: Enable hw support for vq descriptor mapping
> >    vdpa/mlx5: Make iotlb helper functions more generic
> >    vdpa/mlx5: Update cvq iotlb mapping on ASID change
> >
> > Si-Wei Liu (3):
> >    vdpa: introduce dedicated descriptor group for virtqueue
> >    vhost-vdpa: introduce descriptor group backend feature
> >    vhost-vdpa: uAPI to get dedicated descriptor group id
> >
> >   drivers/vdpa/mlx5/core/mlx5_vdpa.h |  31 +++--
> >   drivers/vdpa/mlx5/core/mr.c        | 194 ++++++++++++++++-------------
> >   drivers/vdpa/mlx5/core/resources.c |   6 +-
> >   drivers/vdpa/mlx5/net/mlx5_vnet.c  | 105 +++++++++++-----
> >   drivers/vhost/vdpa.c               |  27 ++++
> >   include/linux/mlx5/mlx5_ifc.h      |   8 +-
> >   include/linux/mlx5/mlx5_ifc_vdpa.h |   7 +-
> >   include/linux/vdpa.h               |  11 ++
> >   include/uapi/linux/vhost.h         |   8 ++
> >   include/uapi/linux/vhost_types.h   |   5 +
> >   10 files changed, 272 insertions(+), 130 deletions(-)
> >
>