2023-09-13 21:58:31

by Dragos Tatulea

[permalink] [raw]
Subject: [PATCH 00/16] vdpa: Add support for vq descriptor mappings

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.

[0] https://lore.kernel.org/virtualization/[email protected]

Dragos Tatulea (13):
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
Cover letter: vdpa/mlx5: Add support for vq descriptor mappings

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 | 191 ++++++++++++++++-------------
drivers/vdpa/mlx5/core/resources.c | 6 +-
drivers/vdpa/mlx5/net/mlx5_vnet.c | 100 ++++++++++-----
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, 264 insertions(+), 130 deletions(-)

--
2.41.0


2023-09-14 02:02:55

by Dragos Tatulea

[permalink] [raw]
Subject: [PATCH 03/16] vhost-vdpa: uAPI to get dedicated descriptor group id

From: Si-Wei Liu <[email protected]>

With _F_DESC_ASID backend feature, the device can now support the
VHOST_VDPA_GET_VRING_DESC_GROUP ioctl, and it may expose the descriptor
table (including avail and used ring) in a different group than the
buffers it contains. This new uAPI will fetch the group ID of the
descriptor table.

Signed-off-by: Si-Wei Liu <[email protected]>
Acked-by: Eugenio Pérez <[email protected]>
Acked-by: Jason Wang <[email protected]>
---
drivers/vhost/vdpa.c | 10 ++++++++++
include/uapi/linux/vhost.h | 8 ++++++++
2 files changed, 18 insertions(+)

diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index 2f21798a37ee..851535f57b95 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -613,6 +613,16 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
else if (copy_to_user(argp, &s, sizeof(s)))
return -EFAULT;
return 0;
+ case VHOST_VDPA_GET_VRING_DESC_GROUP:
+ if (!vhost_vdpa_has_desc_group(v))
+ return -EOPNOTSUPP;
+ s.index = idx;
+ s.num = ops->get_vq_desc_group(vdpa, idx);
+ if (s.num >= vdpa->ngroups)
+ return -EIO;
+ else if (copy_to_user(argp, &s, sizeof(s)))
+ return -EFAULT;
+ return 0;
case VHOST_VDPA_SET_GROUP_ASID:
if (copy_from_user(&s, argp, sizeof(s)))
return -EFAULT;
diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h
index f5c48b61ab62..649560c685f1 100644
--- a/include/uapi/linux/vhost.h
+++ b/include/uapi/linux/vhost.h
@@ -219,4 +219,12 @@
*/
#define VHOST_VDPA_RESUME _IO(VHOST_VIRTIO, 0x7E)

+/* Get the group for the descriptor table including driver & device areas
+ * of a virtqueue: read index, write group in num.
+ * The virtqueue index is stored in the index field of vhost_vring_state.
+ * The group ID of the descriptor table for this specific virtqueue
+ * is returned via num field of vhost_vring_state.
+ */
+#define VHOST_VDPA_GET_VRING_DESC_GROUP _IOWR(VHOST_VIRTIO, 0x7F, \
+ struct vhost_vring_state)
#endif
--
2.41.0

2023-09-25 09:06:03

by Dragos Tatulea

[permalink] [raw]
Subject: Re: [PATCH 00/16] vdpa: Add support for vq descriptor mappings

On Tue, 2023-09-12 at 16:01 +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.
>
Gentle ping.

Note that I will have to send a v2. The changes in mlx5_ifc.h will need to be
merged first separately into the mlx5-next branch [0] and then pulled from there
when the series is applied.

[0]
https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=mlx5-next

Thanks,
Dragos

> 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.
>
> [0]
> https://lore.kernel.org/virtualization/[email protected]
>
> Dragos Tatulea (13):
>   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
>   Cover letter: vdpa/mlx5: Add support for vq descriptor mappings
>
> 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        | 191 ++++++++++++++++-------------
>  drivers/vdpa/mlx5/core/resources.c |   6 +-
>  drivers/vdpa/mlx5/net/mlx5_vnet.c  | 100 ++++++++++-----
>  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, 264 insertions(+), 130 deletions(-)
>

2023-09-26 21:18:49

by Dragos Tatulea

[permalink] [raw]
Subject: Re: [PATCH 00/16] vdpa: Add support for vq descriptor mappings

On Tue, 2023-09-26 at 05:22 -0700, Si-Wei Liu wrote:
>
>
> On 9/25/2023 12:59 AM, Dragos Tatulea wrote:
> > On Tue, 2023-09-12 at 16:01 +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.
> > >
> > Gentle ping.
> >
> > Note that I will have to send a v2. The changes in mlx5_ifc.h will need to
> > be
> > merged first separately into the mlx5-next branch [0] and then pulled from
> > there
> > when the series is applied.
> This separation is unnecessary, as historically the virtio emulation
> portion of the update to mlx5_ifc.h often had to go through the vhost
> tree. See commits 1892a3d425bf and e13cd45d352d. Especially the
> additions from this series (mainly desc group mkey) have nothing to do
> with any networking or NIC driver feature.
>
The reason for doing that is to avoid conflicts in Linus's tree on the
mlx5_ifc.h file.

Thanks,
Dragos

> -Siwei
>
> >
> > [0]
> > https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=mlx5-next
> >
> > Thanks,
> > Dragos
> >
> > > 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.
> > >
> > > [0]
> > > https://lore.kernel.org/virtualization/[email protected]
> > >
> > > Dragos Tatulea (13):
> > >    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
> > >    Cover letter: vdpa/mlx5: Add support for vq descriptor mappings
> > >
> > > 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        | 191 ++++++++++++++++-------------
> > >   drivers/vdpa/mlx5/core/resources.c |   6 +-
> > >   drivers/vdpa/mlx5/net/mlx5_vnet.c  | 100 ++++++++++-----
> > >   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, 264 insertions(+), 130 deletions(-)
> > >
>

2023-09-26 23:27:26

by Si-Wei Liu

[permalink] [raw]
Subject: Re: [PATCH 00/16] vdpa: Add support for vq descriptor mappings



On 9/25/2023 12:59 AM, Dragos Tatulea wrote:
> On Tue, 2023-09-12 at 16:01 +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.
>>
> Gentle ping.
>
> Note that I will have to send a v2. The changes in mlx5_ifc.h will need to be
> merged first separately into the mlx5-next branch [0] and then pulled from there
> when the series is applied.
This separation is unnecessary, as historically the virtio emulation
portion of the update to mlx5_ifc.h often had to go through the vhost
tree. See commits 1892a3d425bf and e13cd45d352d. Especially the
additions from this series (mainly desc group mkey) have nothing to do
with any networking or NIC driver feature.

-Siwei

>
> [0]
> https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git/log/?h=mlx5-next
>
> Thanks,
> Dragos
>
>> 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.
>>
>> [0]
>> https://lore.kernel.org/virtualization/[email protected]
>>
>> Dragos Tatulea (13):
>>   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
>>   Cover letter: vdpa/mlx5: Add support for vq descriptor mappings
>>
>> 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        | 191 ++++++++++++++++-------------
>>  drivers/vdpa/mlx5/core/resources.c |   6 +-
>>  drivers/vdpa/mlx5/net/mlx5_vnet.c  | 100 ++++++++++-----
>>  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, 264 insertions(+), 130 deletions(-)
>>