mbox series

[v7,resend,0/4] add generic vDPA device support

Message ID 20221105083629.1058-1-longpeng2@huawei.com (mailing list archive)
Headers show
Series add generic vDPA device support | expand

Message

Zhijian Li (Fujitsu)" via Nov. 5, 2022, 8:36 a.m. UTC
From: Longpeng <longpeng2@huawei.com>

Hi guys,

With the generic vDPA device, QEMU won't need to touch the device
types any more, such like vfio.

We can use the generic vDPA device as follow:
  -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
  Or
  -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
  vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x

Changes v6 -> v7:
    (v6: https://mail.gnu.org/archive/html/qemu-devel/2022-05/msg02821.html)
    - rebase. [Jason]
    - add documentation . [Stefan]

Changes v5 -> v6:
  Patch 2:
    - Turn to the original approach in the RFC to initialize the
      virtio_pci_id_info array. [Michael]
	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
  Patch 3:
    - Fix logical error of exception handler around the post_init.
      [Stefano]
    - Fix some coding style warnings. [Stefano]
  Patch 4:
    - Fix some coding style warnings. [Stefano]

Changes v4 -> v5:
  Patch 3:
    - remove vhostfd [Jason]
    - support virtio-mmio [Jason]

Changes v3 -> v4:
  v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
  - reorganize the series [Stefano]
  - fix some typos [Stefano]
  - fix logical error in vhost_vdpa_device_realize [Stefano]

Changes v2 -> v3
  Patch 4 & 5:
    - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
    - s/VQS_NUM/VQS_COUNT  [Stefano]
    - check both vdpa_dev_fd and vdpa_dev [Stefano]
  Patch 6:
    - move all steps into vhost_vdpa_device_unrealize. [Stefano]

Changes RFC -> v2
  Patch 1:
    - rename 'pdev_id' to 'trans_devid'  [Michael]
    - only use transitional device id for the devices
      listed in the spec  [Michael]
    - use macros to make the id_info table clearer  [Longpeng]
    - add some modern devices in the id_info table  [Longpeng]
  Patch 2:
    - remove the GET_VECTORS_NUM command  [Jason]
  Patch 4:
    - expose vdpa_dev_fd as a QOM preperty  [Stefan]
    - introduce vhost_vdpa_device_get_u32 as a common
      function to make the code clearer  [Stefan]
    - fix the misleading description of 'dc->desc'  [Stefano]
  Patch 5:
    - check returned number of virtqueues  [Stefan]
  Patch 6:
    - init s->num_queues  [Stefano]
    - free s->dev.vqs  [Stefano]


Longpeng (Mike) (4):
  virtio: get class_id and pci device id by the virtio id
  vdpa: add vdpa-dev support
  vdpa: add vdpa-dev-pci support
  docs: Add generic vhost-vdpa device documentation

 docs/system/devices/vhost-vdpa-device.rst |  43 +++
 hw/virtio/Kconfig                         |   5 +
 hw/virtio/meson.build                     |   2 +
 hw/virtio/vdpa-dev-pci.c                  | 102 ++++++
 hw/virtio/vdpa-dev.c                      | 377 ++++++++++++++++++++++
 hw/virtio/virtio-pci.c                    |  88 +++++
 include/hw/virtio/vdpa-dev.h              |  43 +++
 include/hw/virtio/virtio-pci.h            |   5 +
 8 files changed, 665 insertions(+)
 create mode 100644 docs/system/devices/vhost-vdpa-device.rst
 create mode 100644 hw/virtio/vdpa-dev-pci.c
 create mode 100644 hw/virtio/vdpa-dev.c
 create mode 100644 include/hw/virtio/vdpa-dev.h

Comments

Michael S. Tsirkin Nov. 5, 2022, 4:43 p.m. UTC | #1
On Sat, Nov 05, 2022 at 04:36:25PM +0800, Longpeng(Mike) wrote:
> From: Longpeng <longpeng2@huawei.com>
> 
> Hi guys,
> 
> With the generic vDPA device, QEMU won't need to touch the device
> types any more, such like vfio.

With this kind of passthrough migration is completely MIA right?
Better add a blocker...
And given this is there an advantage over VFIO?

> We can use the generic vDPA device as follow:
>   -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
>   Or
>   -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
>   vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x

> Changes v6 -> v7:
>     (v6: https://mail.gnu.org/archive/html/qemu-devel/2022-05/msg02821.html)
>     - rebase. [Jason]
>     - add documentation . [Stefan]
> 
> Changes v5 -> v6:
>   Patch 2:
>     - Turn to the original approach in the RFC to initialize the
>       virtio_pci_id_info array. [Michael]
> 	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
>   Patch 3:
>     - Fix logical error of exception handler around the post_init.
>       [Stefano]
>     - Fix some coding style warnings. [Stefano]
>   Patch 4:
>     - Fix some coding style warnings. [Stefano]
> 
> Changes v4 -> v5:
>   Patch 3:
>     - remove vhostfd [Jason]
>     - support virtio-mmio [Jason]
> 
> Changes v3 -> v4:
>   v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
>   - reorganize the series [Stefano]
>   - fix some typos [Stefano]
>   - fix logical error in vhost_vdpa_device_realize [Stefano]
> 
> Changes v2 -> v3
>   Patch 4 & 5:
>     - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
>     - s/VQS_NUM/VQS_COUNT  [Stefano]
>     - check both vdpa_dev_fd and vdpa_dev [Stefano]
>   Patch 6:
>     - move all steps into vhost_vdpa_device_unrealize. [Stefano]
> 
> Changes RFC -> v2
>   Patch 1:
>     - rename 'pdev_id' to 'trans_devid'  [Michael]
>     - only use transitional device id for the devices
>       listed in the spec  [Michael]
>     - use macros to make the id_info table clearer  [Longpeng]
>     - add some modern devices in the id_info table  [Longpeng]
>   Patch 2:
>     - remove the GET_VECTORS_NUM command  [Jason]
>   Patch 4:
>     - expose vdpa_dev_fd as a QOM preperty  [Stefan]
>     - introduce vhost_vdpa_device_get_u32 as a common
>       function to make the code clearer  [Stefan]
>     - fix the misleading description of 'dc->desc'  [Stefano]
>   Patch 5:
>     - check returned number of virtqueues  [Stefan]
>   Patch 6:
>     - init s->num_queues  [Stefano]
>     - free s->dev.vqs  [Stefano]
> 
> 
> Longpeng (Mike) (4):
>   virtio: get class_id and pci device id by the virtio id
>   vdpa: add vdpa-dev support
>   vdpa: add vdpa-dev-pci support
>   docs: Add generic vhost-vdpa device documentation
> 
>  docs/system/devices/vhost-vdpa-device.rst |  43 +++
>  hw/virtio/Kconfig                         |   5 +
>  hw/virtio/meson.build                     |   2 +
>  hw/virtio/vdpa-dev-pci.c                  | 102 ++++++
>  hw/virtio/vdpa-dev.c                      | 377 ++++++++++++++++++++++
>  hw/virtio/virtio-pci.c                    |  88 +++++
>  include/hw/virtio/vdpa-dev.h              |  43 +++
>  include/hw/virtio/virtio-pci.h            |   5 +
>  8 files changed, 665 insertions(+)
>  create mode 100644 docs/system/devices/vhost-vdpa-device.rst
>  create mode 100644 hw/virtio/vdpa-dev-pci.c
>  create mode 100644 hw/virtio/vdpa-dev.c
>  create mode 100644 include/hw/virtio/vdpa-dev.h
> 
> -- 
> 2.23.0
Zhijian Li (Fujitsu)" via Nov. 6, 2022, 12:17 a.m. UTC | #2
在 2022/11/6 0:43, Michael S. Tsirkin 写道:
> On Sat, Nov 05, 2022 at 04:36:25PM +0800, Longpeng(Mike) wrote:
>> From: Longpeng <longpeng2@huawei.com>
>>
>> Hi guys,
>>
>> With the generic vDPA device, QEMU won't need to touch the device
>> types any more, such like vfio.
> 
> With this kind of passthrough migration is completely MIA right?
> Better add a blocker...

Oh, I missed the "vdpa-dev: mark the device as unmigratable" since v4 
and I'll add it in the next version.

We'll support passthrough migration in the next step. We have already 
written a demo that can migrate between some offloading cards.

> And given this is there an advantage over VFIO?

I think the answer is the same as "why we need vDPA" if we compare it 
with VFIO.

> 
>> We can use the generic vDPA device as follow:
>>    -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
>>    Or
>>    -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
>>    vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
> 
>> Changes v6 -> v7:
>>      (v6: https://mail.gnu.org/archive/html/qemu-devel/2022-05/msg02821.html)
>>      - rebase. [Jason]
>>      - add documentation . [Stefan]
>>
>> Changes v5 -> v6:
>>    Patch 2:
>>      - Turn to the original approach in the RFC to initialize the
>>        virtio_pci_id_info array. [Michael]
>> 	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
>>    Patch 3:
>>      - Fix logical error of exception handler around the post_init.
>>        [Stefano]
>>      - Fix some coding style warnings. [Stefano]
>>    Patch 4:
>>      - Fix some coding style warnings. [Stefano]
>>
>> Changes v4 -> v5:
>>    Patch 3:
>>      - remove vhostfd [Jason]
>>      - support virtio-mmio [Jason]
>>
>> Changes v3 -> v4:
>>    v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
>>    - reorganize the series [Stefano]
>>    - fix some typos [Stefano]
>>    - fix logical error in vhost_vdpa_device_realize [Stefano]
>>
>> Changes v2 -> v3
>>    Patch 4 & 5:
>>      - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
>>      - s/VQS_NUM/VQS_COUNT  [Stefano]
>>      - check both vdpa_dev_fd and vdpa_dev [Stefano]
>>    Patch 6:
>>      - move all steps into vhost_vdpa_device_unrealize. [Stefano]
>>
>> Changes RFC -> v2
>>    Patch 1:
>>      - rename 'pdev_id' to 'trans_devid'  [Michael]
>>      - only use transitional device id for the devices
>>        listed in the spec  [Michael]
>>      - use macros to make the id_info table clearer  [Longpeng]
>>      - add some modern devices in the id_info table  [Longpeng]
>>    Patch 2:
>>      - remove the GET_VECTORS_NUM command  [Jason]
>>    Patch 4:
>>      - expose vdpa_dev_fd as a QOM preperty  [Stefan]
>>      - introduce vhost_vdpa_device_get_u32 as a common
>>        function to make the code clearer  [Stefan]
>>      - fix the misleading description of 'dc->desc'  [Stefano]
>>    Patch 5:
>>      - check returned number of virtqueues  [Stefan]
>>    Patch 6:
>>      - init s->num_queues  [Stefano]
>>      - free s->dev.vqs  [Stefano]
>>
>>
>> Longpeng (Mike) (4):
>>    virtio: get class_id and pci device id by the virtio id
>>    vdpa: add vdpa-dev support
>>    vdpa: add vdpa-dev-pci support
>>    docs: Add generic vhost-vdpa device documentation
>>
>>   docs/system/devices/vhost-vdpa-device.rst |  43 +++
>>   hw/virtio/Kconfig                         |   5 +
>>   hw/virtio/meson.build                     |   2 +
>>   hw/virtio/vdpa-dev-pci.c                  | 102 ++++++
>>   hw/virtio/vdpa-dev.c                      | 377 ++++++++++++++++++++++
>>   hw/virtio/virtio-pci.c                    |  88 +++++
>>   include/hw/virtio/vdpa-dev.h              |  43 +++
>>   include/hw/virtio/virtio-pci.h            |   5 +
>>   8 files changed, 665 insertions(+)
>>   create mode 100644 docs/system/devices/vhost-vdpa-device.rst
>>   create mode 100644 hw/virtio/vdpa-dev-pci.c
>>   create mode 100644 hw/virtio/vdpa-dev.c
>>   create mode 100644 include/hw/virtio/vdpa-dev.h
>>
>> -- 
>> 2.23.0
> 
> .
Michael S. Tsirkin Nov. 6, 2022, 5:22 a.m. UTC | #3
On Sun, Nov 06, 2022 at 08:17:07AM +0800, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
> 
> 
> 在 2022/11/6 0:43, Michael S. Tsirkin 写道:
> > On Sat, Nov 05, 2022 at 04:36:25PM +0800, Longpeng(Mike) wrote:
> > > From: Longpeng <longpeng2@huawei.com>
> > > 
> > > Hi guys,
> > > 
> > > With the generic vDPA device, QEMU won't need to touch the device
> > > types any more, such like vfio.
> > 
> > With this kind of passthrough migration is completely MIA right?
> > Better add a blocker...
> 
> Oh, I missed the "vdpa-dev: mark the device as unmigratable" since v4 and
> I'll add it in the next version.
> 
> We'll support passthrough migration in the next step. We have already
> written a demo that can migrate between some offloading cards.

Hmm ok. Backend disconnect can't work though, can it? State
is by necessity lost when backend crashes.

> > And given this is there an advantage over VFIO?
> 
> I think the answer is the same as "why we need vDPA" if we compare it with
> VFIO.

The answer is mostly because you can migrate and support backend
disconnect, no?

> > 
> > > We can use the generic vDPA device as follow:
> > >    -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
> > >    Or
> > >    -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
> > >    vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
> > 
> > > Changes v6 -> v7:
> > >      (v6: https://mail.gnu.org/archive/html/qemu-devel/2022-05/msg02821.html)
> > >      - rebase. [Jason]
> > >      - add documentation . [Stefan]
> > > 
> > > Changes v5 -> v6:
> > >    Patch 2:
> > >      - Turn to the original approach in the RFC to initialize the
> > >        virtio_pci_id_info array. [Michael]
> > > 	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
> > >    Patch 3:
> > >      - Fix logical error of exception handler around the post_init.
> > >        [Stefano]
> > >      - Fix some coding style warnings. [Stefano]
> > >    Patch 4:
> > >      - Fix some coding style warnings. [Stefano]
> > > 
> > > Changes v4 -> v5:
> > >    Patch 3:
> > >      - remove vhostfd [Jason]
> > >      - support virtio-mmio [Jason]
> > > 
> > > Changes v3 -> v4:
> > >    v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
> > >    - reorganize the series [Stefano]
> > >    - fix some typos [Stefano]
> > >    - fix logical error in vhost_vdpa_device_realize [Stefano]
> > > 
> > > Changes v2 -> v3
> > >    Patch 4 & 5:
> > >      - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
> > >      - s/VQS_NUM/VQS_COUNT  [Stefano]
> > >      - check both vdpa_dev_fd and vdpa_dev [Stefano]
> > >    Patch 6:
> > >      - move all steps into vhost_vdpa_device_unrealize. [Stefano]
> > > 
> > > Changes RFC -> v2
> > >    Patch 1:
> > >      - rename 'pdev_id' to 'trans_devid'  [Michael]
> > >      - only use transitional device id for the devices
> > >        listed in the spec  [Michael]
> > >      - use macros to make the id_info table clearer  [Longpeng]
> > >      - add some modern devices in the id_info table  [Longpeng]
> > >    Patch 2:
> > >      - remove the GET_VECTORS_NUM command  [Jason]
> > >    Patch 4:
> > >      - expose vdpa_dev_fd as a QOM preperty  [Stefan]
> > >      - introduce vhost_vdpa_device_get_u32 as a common
> > >        function to make the code clearer  [Stefan]
> > >      - fix the misleading description of 'dc->desc'  [Stefano]
> > >    Patch 5:
> > >      - check returned number of virtqueues  [Stefan]
> > >    Patch 6:
> > >      - init s->num_queues  [Stefano]
> > >      - free s->dev.vqs  [Stefano]
> > > 
> > > 
> > > Longpeng (Mike) (4):
> > >    virtio: get class_id and pci device id by the virtio id
> > >    vdpa: add vdpa-dev support
> > >    vdpa: add vdpa-dev-pci support
> > >    docs: Add generic vhost-vdpa device documentation
> > > 
> > >   docs/system/devices/vhost-vdpa-device.rst |  43 +++
> > >   hw/virtio/Kconfig                         |   5 +
> > >   hw/virtio/meson.build                     |   2 +
> > >   hw/virtio/vdpa-dev-pci.c                  | 102 ++++++
> > >   hw/virtio/vdpa-dev.c                      | 377 ++++++++++++++++++++++
> > >   hw/virtio/virtio-pci.c                    |  88 +++++
> > >   include/hw/virtio/vdpa-dev.h              |  43 +++
> > >   include/hw/virtio/virtio-pci.h            |   5 +
> > >   8 files changed, 665 insertions(+)
> > >   create mode 100644 docs/system/devices/vhost-vdpa-device.rst
> > >   create mode 100644 hw/virtio/vdpa-dev-pci.c
> > >   create mode 100644 hw/virtio/vdpa-dev.c
> > >   create mode 100644 include/hw/virtio/vdpa-dev.h
> > > 
> > > -- 
> > > 2.23.0
> > 
> > .
Zhijian Li (Fujitsu)" via Nov. 6, 2022, 1:11 p.m. UTC | #4
在 2022/11/6 13:22, Michael S. Tsirkin 写道:
> On Sun, Nov 06, 2022 at 08:17:07AM +0800, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
>>
>>
>> 在 2022/11/6 0:43, Michael S. Tsirkin 写道:
>>> On Sat, Nov 05, 2022 at 04:36:25PM +0800, Longpeng(Mike) wrote:
>>>> From: Longpeng <longpeng2@huawei.com>
>>>>
>>>> Hi guys,
>>>>
>>>> With the generic vDPA device, QEMU won't need to touch the device
>>>> types any more, such like vfio.
>>>
>>> With this kind of passthrough migration is completely MIA right?
>>> Better add a blocker...
>>
>> Oh, I missed the "vdpa-dev: mark the device as unmigratable" since v4 and
>> I'll add it in the next version.
>>
>> We'll support passthrough migration in the next step. We have already
>> written a demo that can migrate between some offloading cards.
> 
> Hmm ok. Backend disconnect can't work though, can it? State
> is by necessity lost when backend crashes.
>Yes, it can't.

>>> And given this is there an advantage over VFIO?
>>
>> I think the answer is the same as "why we need vDPA" if we compare it with
>> VFIO.
> 
> The answer is mostly because you can migrate and support backend
> disconnect, no?
>
Migrating between different hardware is the first consideration in our 
requirement, supporting backend disconnect is a low priority.

>>>
>>>> We can use the generic vDPA device as follow:
>>>>     -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
>>>>     Or
>>>>     -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
>>>>     vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
>>>
>>>> Changes v6 -> v7:
>>>>       (v6: https://mail.gnu.org/archive/html/qemu-devel/2022-05/msg02821.html)
>>>>       - rebase. [Jason]
>>>>       - add documentation . [Stefan]
>>>>
>>>> Changes v5 -> v6:
>>>>     Patch 2:
>>>>       - Turn to the original approach in the RFC to initialize the
>>>>         virtio_pci_id_info array. [Michael]
>>>> 	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
>>>>     Patch 3:
>>>>       - Fix logical error of exception handler around the post_init.
>>>>         [Stefano]
>>>>       - Fix some coding style warnings. [Stefano]
>>>>     Patch 4:
>>>>       - Fix some coding style warnings. [Stefano]
>>>>
>>>> Changes v4 -> v5:
>>>>     Patch 3:
>>>>       - remove vhostfd [Jason]
>>>>       - support virtio-mmio [Jason]
>>>>
>>>> Changes v3 -> v4:
>>>>     v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
>>>>     - reorganize the series [Stefano]
>>>>     - fix some typos [Stefano]
>>>>     - fix logical error in vhost_vdpa_device_realize [Stefano]
>>>>
>>>> Changes v2 -> v3
>>>>     Patch 4 & 5:
>>>>       - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
>>>>       - s/VQS_NUM/VQS_COUNT  [Stefano]
>>>>       - check both vdpa_dev_fd and vdpa_dev [Stefano]
>>>>     Patch 6:
>>>>       - move all steps into vhost_vdpa_device_unrealize. [Stefano]
>>>>
>>>> Changes RFC -> v2
>>>>     Patch 1:
>>>>       - rename 'pdev_id' to 'trans_devid'  [Michael]
>>>>       - only use transitional device id for the devices
>>>>         listed in the spec  [Michael]
>>>>       - use macros to make the id_info table clearer  [Longpeng]
>>>>       - add some modern devices in the id_info table  [Longpeng]
>>>>     Patch 2:
>>>>       - remove the GET_VECTORS_NUM command  [Jason]
>>>>     Patch 4:
>>>>       - expose vdpa_dev_fd as a QOM preperty  [Stefan]
>>>>       - introduce vhost_vdpa_device_get_u32 as a common
>>>>         function to make the code clearer  [Stefan]
>>>>       - fix the misleading description of 'dc->desc'  [Stefano]
>>>>     Patch 5:
>>>>       - check returned number of virtqueues  [Stefan]
>>>>     Patch 6:
>>>>       - init s->num_queues  [Stefano]
>>>>       - free s->dev.vqs  [Stefano]
>>>>
>>>>
>>>> Longpeng (Mike) (4):
>>>>     virtio: get class_id and pci device id by the virtio id
>>>>     vdpa: add vdpa-dev support
>>>>     vdpa: add vdpa-dev-pci support
>>>>     docs: Add generic vhost-vdpa device documentation
>>>>
>>>>    docs/system/devices/vhost-vdpa-device.rst |  43 +++
>>>>    hw/virtio/Kconfig                         |   5 +
>>>>    hw/virtio/meson.build                     |   2 +
>>>>    hw/virtio/vdpa-dev-pci.c                  | 102 ++++++
>>>>    hw/virtio/vdpa-dev.c                      | 377 ++++++++++++++++++++++
>>>>    hw/virtio/virtio-pci.c                    |  88 +++++
>>>>    include/hw/virtio/vdpa-dev.h              |  43 +++
>>>>    include/hw/virtio/virtio-pci.h            |   5 +
>>>>    8 files changed, 665 insertions(+)
>>>>    create mode 100644 docs/system/devices/vhost-vdpa-device.rst
>>>>    create mode 100644 hw/virtio/vdpa-dev-pci.c
>>>>    create mode 100644 hw/virtio/vdpa-dev.c
>>>>    create mode 100644 include/hw/virtio/vdpa-dev.h
>>>>
>>>> -- 
>>>> 2.23.0
>>>
>>> .
> 
> 
> .
Michael S. Tsirkin Nov. 6, 2022, 1:47 p.m. UTC | #5
On Sun, Nov 06, 2022 at 09:11:39PM +0800, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
> 
> 
> 在 2022/11/6 13:22, Michael S. Tsirkin 写道:
> > On Sun, Nov 06, 2022 at 08:17:07AM +0800, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
> > > 
> > > 
> > > 在 2022/11/6 0:43, Michael S. Tsirkin 写道:
> > > > On Sat, Nov 05, 2022 at 04:36:25PM +0800, Longpeng(Mike) wrote:
> > > > > From: Longpeng <longpeng2@huawei.com>
> > > > > 
> > > > > Hi guys,
> > > > > 
> > > > > With the generic vDPA device, QEMU won't need to touch the device
> > > > > types any more, such like vfio.
> > > > 
> > > > With this kind of passthrough migration is completely MIA right?
> > > > Better add a blocker...
> > > 
> > > Oh, I missed the "vdpa-dev: mark the device as unmigratable" since v4 and
> > > I'll add it in the next version.
> > > 
> > > We'll support passthrough migration in the next step. We have already
> > > written a demo that can migrate between some offloading cards.
> > 
> > Hmm ok. Backend disconnect can't work though, can it? State
> > is by necessity lost when backend crashes.
> > Yes, it can't.
> 
> > > > And given this is there an advantage over VFIO?
> > > 
> > > I think the answer is the same as "why we need vDPA" if we compare it with
> > > VFIO.
> > 
> > The answer is mostly because you can migrate and support backend
> > disconnect, no?
> > 
> Migrating between different hardware is the first consideration in our
> requirement, supporting backend disconnect is a low priority.

I dislike non-orthogonal features though ...
And the advantage of keeping it out of process with qemu is
I presume security?

> > > > 
> > > > > We can use the generic vDPA device as follow:
> > > > >     -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
> > > > >     Or
> > > > >     -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
> > > > >     vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
> > > > 
> > > > > Changes v6 -> v7:
> > > > >       (v6: https://mail.gnu.org/archive/html/qemu-devel/2022-05/msg02821.html)
> > > > >       - rebase. [Jason]
> > > > >       - add documentation . [Stefan]
> > > > > 
> > > > > Changes v5 -> v6:
> > > > >     Patch 2:
> > > > >       - Turn to the original approach in the RFC to initialize the
> > > > >         virtio_pci_id_info array. [Michael]
> > > > > 	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
> > > > >     Patch 3:
> > > > >       - Fix logical error of exception handler around the post_init.
> > > > >         [Stefano]
> > > > >       - Fix some coding style warnings. [Stefano]
> > > > >     Patch 4:
> > > > >       - Fix some coding style warnings. [Stefano]
> > > > > 
> > > > > Changes v4 -> v5:
> > > > >     Patch 3:
> > > > >       - remove vhostfd [Jason]
> > > > >       - support virtio-mmio [Jason]
> > > > > 
> > > > > Changes v3 -> v4:
> > > > >     v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
> > > > >     - reorganize the series [Stefano]
> > > > >     - fix some typos [Stefano]
> > > > >     - fix logical error in vhost_vdpa_device_realize [Stefano]
> > > > > 
> > > > > Changes v2 -> v3
> > > > >     Patch 4 & 5:
> > > > >       - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
> > > > >       - s/VQS_NUM/VQS_COUNT  [Stefano]
> > > > >       - check both vdpa_dev_fd and vdpa_dev [Stefano]
> > > > >     Patch 6:
> > > > >       - move all steps into vhost_vdpa_device_unrealize. [Stefano]
> > > > > 
> > > > > Changes RFC -> v2
> > > > >     Patch 1:
> > > > >       - rename 'pdev_id' to 'trans_devid'  [Michael]
> > > > >       - only use transitional device id for the devices
> > > > >         listed in the spec  [Michael]
> > > > >       - use macros to make the id_info table clearer  [Longpeng]
> > > > >       - add some modern devices in the id_info table  [Longpeng]
> > > > >     Patch 2:
> > > > >       - remove the GET_VECTORS_NUM command  [Jason]
> > > > >     Patch 4:
> > > > >       - expose vdpa_dev_fd as a QOM preperty  [Stefan]
> > > > >       - introduce vhost_vdpa_device_get_u32 as a common
> > > > >         function to make the code clearer  [Stefan]
> > > > >       - fix the misleading description of 'dc->desc'  [Stefano]
> > > > >     Patch 5:
> > > > >       - check returned number of virtqueues  [Stefan]
> > > > >     Patch 6:
> > > > >       - init s->num_queues  [Stefano]
> > > > >       - free s->dev.vqs  [Stefano]
> > > > > 
> > > > > 
> > > > > Longpeng (Mike) (4):
> > > > >     virtio: get class_id and pci device id by the virtio id
> > > > >     vdpa: add vdpa-dev support
> > > > >     vdpa: add vdpa-dev-pci support
> > > > >     docs: Add generic vhost-vdpa device documentation
> > > > > 
> > > > >    docs/system/devices/vhost-vdpa-device.rst |  43 +++
> > > > >    hw/virtio/Kconfig                         |   5 +
> > > > >    hw/virtio/meson.build                     |   2 +
> > > > >    hw/virtio/vdpa-dev-pci.c                  | 102 ++++++
> > > > >    hw/virtio/vdpa-dev.c                      | 377 ++++++++++++++++++++++
> > > > >    hw/virtio/virtio-pci.c                    |  88 +++++
> > > > >    include/hw/virtio/vdpa-dev.h              |  43 +++
> > > > >    include/hw/virtio/virtio-pci.h            |   5 +
> > > > >    8 files changed, 665 insertions(+)
> > > > >    create mode 100644 docs/system/devices/vhost-vdpa-device.rst
> > > > >    create mode 100644 hw/virtio/vdpa-dev-pci.c
> > > > >    create mode 100644 hw/virtio/vdpa-dev.c
> > > > >    create mode 100644 include/hw/virtio/vdpa-dev.h
> > > > > 
> > > > > -- 
> > > > > 2.23.0
> > > > 
> > > > .
> > 
> > 
> > .
Zhijian Li (Fujitsu)" via Nov. 6, 2022, 2:45 p.m. UTC | #6
在 2022/11/6 21:47, Michael S. Tsirkin 写道:
> On Sun, Nov 06, 2022 at 09:11:39PM +0800, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
>>
>>
>> 在 2022/11/6 13:22, Michael S. Tsirkin 写道:
>>> On Sun, Nov 06, 2022 at 08:17:07AM +0800, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
>>>>
>>>>
>>>> 在 2022/11/6 0:43, Michael S. Tsirkin 写道:
>>>>> On Sat, Nov 05, 2022 at 04:36:25PM +0800, Longpeng(Mike) wrote:
>>>>>> From: Longpeng <longpeng2@huawei.com>
>>>>>>
>>>>>> Hi guys,
>>>>>>
>>>>>> With the generic vDPA device, QEMU won't need to touch the device
>>>>>> types any more, such like vfio.
>>>>>
>>>>> With this kind of passthrough migration is completely MIA right?
>>>>> Better add a blocker...
>>>>
>>>> Oh, I missed the "vdpa-dev: mark the device as unmigratable" since v4 and
>>>> I'll add it in the next version.
>>>>
>>>> We'll support passthrough migration in the next step. We have already
>>>> written a demo that can migrate between some offloading cards.
>>>
>>> Hmm ok. Backend disconnect can't work though, can it? State
>>> is by necessity lost when backend crashes.
>>> Yes, it can't.
>>
>>>>> And given this is there an advantage over VFIO?
>>>>
>>>> I think the answer is the same as "why we need vDPA" if we compare it with
>>>> VFIO.
>>>
>>> The answer is mostly because you can migrate and support backend
>>> disconnect, no?
>>>
>> Migrating between different hardware is the first consideration in our
>> requirement, supporting backend disconnect is a low priority.
> 
> I dislike non-orthogonal features though ...
> And the advantage of keeping it out of process with qemu is
> I presume security?
> 

Yes, this is one of the reasons. The TCB of the generic vdpa device is 
smaller than the existing vdpa device (needs to use the 
virtio-net/blk/scsi emulation codes).

Besides, the generic vdpa device can support any virtio device, but the 
existing vdpa device only supports virtio-net yet.

Though the existing vdpa device is more powerful and the generic vdpa 
device would miss some features, it can be an alternative for some users.


>>>>>
>>>>>> We can use the generic vDPA device as follow:
>>>>>>      -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
>>>>>>      Or
>>>>>>      -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
>>>>>>      vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
>>>>>
>>>>>> Changes v6 -> v7:
>>>>>>        (v6: https://mail.gnu.org/archive/html/qemu-devel/2022-05/msg02821.html)
>>>>>>        - rebase. [Jason]
>>>>>>        - add documentation . [Stefan]
>>>>>>
>>>>>> Changes v5 -> v6:
>>>>>>      Patch 2:
>>>>>>        - Turn to the original approach in the RFC to initialize the
>>>>>>          virtio_pci_id_info array. [Michael]
>>>>>> 	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
>>>>>>      Patch 3:
>>>>>>        - Fix logical error of exception handler around the post_init.
>>>>>>          [Stefano]
>>>>>>        - Fix some coding style warnings. [Stefano]
>>>>>>      Patch 4:
>>>>>>        - Fix some coding style warnings. [Stefano]
>>>>>>
>>>>>> Changes v4 -> v5:
>>>>>>      Patch 3:
>>>>>>        - remove vhostfd [Jason]
>>>>>>        - support virtio-mmio [Jason]
>>>>>>
>>>>>> Changes v3 -> v4:
>>>>>>      v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
>>>>>>      - reorganize the series [Stefano]
>>>>>>      - fix some typos [Stefano]
>>>>>>      - fix logical error in vhost_vdpa_device_realize [Stefano]
>>>>>>
>>>>>> Changes v2 -> v3
>>>>>>      Patch 4 & 5:
>>>>>>        - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
>>>>>>        - s/VQS_NUM/VQS_COUNT  [Stefano]
>>>>>>        - check both vdpa_dev_fd and vdpa_dev [Stefano]
>>>>>>      Patch 6:
>>>>>>        - move all steps into vhost_vdpa_device_unrealize. [Stefano]
>>>>>>
>>>>>> Changes RFC -> v2
>>>>>>      Patch 1:
>>>>>>        - rename 'pdev_id' to 'trans_devid'  [Michael]
>>>>>>        - only use transitional device id for the devices
>>>>>>          listed in the spec  [Michael]
>>>>>>        - use macros to make the id_info table clearer  [Longpeng]
>>>>>>        - add some modern devices in the id_info table  [Longpeng]
>>>>>>      Patch 2:
>>>>>>        - remove the GET_VECTORS_NUM command  [Jason]
>>>>>>      Patch 4:
>>>>>>        - expose vdpa_dev_fd as a QOM preperty  [Stefan]
>>>>>>        - introduce vhost_vdpa_device_get_u32 as a common
>>>>>>          function to make the code clearer  [Stefan]
>>>>>>        - fix the misleading description of 'dc->desc'  [Stefano]
>>>>>>      Patch 5:
>>>>>>        - check returned number of virtqueues  [Stefan]
>>>>>>      Patch 6:
>>>>>>        - init s->num_queues  [Stefano]
>>>>>>        - free s->dev.vqs  [Stefano]
>>>>>>
>>>>>>
>>>>>> Longpeng (Mike) (4):
>>>>>>      virtio: get class_id and pci device id by the virtio id
>>>>>>      vdpa: add vdpa-dev support
>>>>>>      vdpa: add vdpa-dev-pci support
>>>>>>      docs: Add generic vhost-vdpa device documentation
>>>>>>
>>>>>>     docs/system/devices/vhost-vdpa-device.rst |  43 +++
>>>>>>     hw/virtio/Kconfig                         |   5 +
>>>>>>     hw/virtio/meson.build                     |   2 +
>>>>>>     hw/virtio/vdpa-dev-pci.c                  | 102 ++++++
>>>>>>     hw/virtio/vdpa-dev.c                      | 377 ++++++++++++++++++++++
>>>>>>     hw/virtio/virtio-pci.c                    |  88 +++++
>>>>>>     include/hw/virtio/vdpa-dev.h              |  43 +++
>>>>>>     include/hw/virtio/virtio-pci.h            |   5 +
>>>>>>     8 files changed, 665 insertions(+)
>>>>>>     create mode 100644 docs/system/devices/vhost-vdpa-device.rst
>>>>>>     create mode 100644 hw/virtio/vdpa-dev-pci.c
>>>>>>     create mode 100644 hw/virtio/vdpa-dev.c
>>>>>>     create mode 100644 include/hw/virtio/vdpa-dev.h
>>>>>>
>>>>>> -- 
>>>>>> 2.23.0
>>>>>
>>>>> .
>>>
>>>
>>> .
> 
> 
> .