mbox series

[RFC,0/1] vhost-user: Add SHMEM_MAP/UNMAP requests

Message ID 20240530152223.780232-1-aesteve@redhat.com (mailing list archive)
Headers show
Series vhost-user: Add SHMEM_MAP/UNMAP requests | expand

Message

Albert Esteve May 30, 2024, 3:22 p.m. UTC
Hi all,

This is an early attempt to have backends
support dynamic fd mapping into shared
memory regions. As such, there are a few
things that need settling, so I wanted to
post this first to have some early feedback.

The usecase for this is, e.g., to support
vhost-user-gpu RESOURCE_BLOB operations,
or DAX Window request for virtio-fs. In
general, any operation where a backend
would need to mmap an fd to a shared
memory so that the guest can access it.
The request will be processed by the VMM,
that will, in turn, trigger a mmap with
the instructed parameters (i.e., shmid,
shm_offset, fd_offset, fd, lenght).

As there are already a couple devices
that could benefit of such a feature,
and more could require it in the future,
my intention was to make it generic.

To that end, I declared the shared
memory region list in `VirtIODevice`.
I could add a couple commodity
functions to add new regions to the list,
so that the devices can use them. But
I wanted to gather some feedback before
refining it further, as I am probably
missing some required steps/or security
concerns that I am not taking into account.

Albert Esteve (1):
  vhost-user: add shmem mmap request

 docs/interop/vhost-user.rst |  23 ++++++++
 hw/virtio/vhost-user.c      | 106 ++++++++++++++++++++++++++++++++++++
 hw/virtio/virtio.c          |   2 +
 include/hw/virtio/virtio.h  |   3 +
 4 files changed, 134 insertions(+)

Comments

Stefan Hajnoczi June 4, 2024, 6:16 p.m. UTC | #1
On Thu, May 30, 2024 at 05:22:22PM +0200, Albert Esteve wrote:
> Hi all,
> 
> This is an early attempt to have backends
> support dynamic fd mapping into shared
> memory regions. As such, there are a few
> things that need settling, so I wanted to
> post this first to have some early feedback.
> 
> The usecase for this is, e.g., to support
> vhost-user-gpu RESOURCE_BLOB operations,
> or DAX Window request for virtio-fs. In
> general, any operation where a backend
> would need to mmap an fd to a shared
> memory so that the guest can access it.

I wanted to mention that this sentence confuses me because:

- The frontend will mmap an fd into the guest's memory space so that a
  VIRTIO Shared Memory Region is exposed to the guest. The backend
  requests the frontend to perform this operation. The backend does not
  invoke mmap itself.

- "Shared memory" is ambiguous. Please call it VIRTIO Shared Memory
  Region to differentiate from vhost-user shared memory tables/regions.

> The request will be processed by the VMM,
> that will, in turn, trigger a mmap with
> the instructed parameters (i.e., shmid,
> shm_offset, fd_offset, fd, lenght).
> 
> As there are already a couple devices
> that could benefit of such a feature,
> and more could require it in the future,
> my intention was to make it generic.
> 
> To that end, I declared the shared
> memory region list in `VirtIODevice`.
> I could add a couple commodity
> functions to add new regions to the list,
> so that the devices can use them. But
> I wanted to gather some feedback before
> refining it further, as I am probably
> missing some required steps/or security
> concerns that I am not taking into account.
> 
> Albert Esteve (1):
>   vhost-user: add shmem mmap request
> 
>  docs/interop/vhost-user.rst |  23 ++++++++
>  hw/virtio/vhost-user.c      | 106 ++++++++++++++++++++++++++++++++++++
>  hw/virtio/virtio.c          |   2 +
>  include/hw/virtio/virtio.h  |   3 +
>  4 files changed, 134 insertions(+)
> 
> -- 
> 2.44.0
>
Albert Esteve June 5, 2024, 7:24 a.m. UTC | #2
On Tue, Jun 4, 2024 at 8:16 PM Stefan Hajnoczi <stefanha@redhat.com> wrote:

> On Thu, May 30, 2024 at 05:22:22PM +0200, Albert Esteve wrote:
> > Hi all,
> >
> > This is an early attempt to have backends
> > support dynamic fd mapping into shared
> > memory regions. As such, there are a few
> > things that need settling, so I wanted to
> > post this first to have some early feedback.
> >
> > The usecase for this is, e.g., to support
> > vhost-user-gpu RESOURCE_BLOB operations,
> > or DAX Window request for virtio-fs. In
> > general, any operation where a backend
> > would need to mmap an fd to a shared
> > memory so that the guest can access it.
>
> I wanted to mention that this sentence confuses me because:
>
> - The frontend will mmap an fd into the guest's memory space so that a
>   VIRTIO Shared Memory Region is exposed to the guest. The backend
>   requests the frontend to perform this operation. The backend does not
>   invoke mmap itself.
>

Sorry for the confused wording. It is true that the backend does not
do the mmap, but requests it to be done. One point of confusion for
me from your sentence is that I refer to the driver as the frontend,
and the mapping is done by the VMM (i.e., QEMU).

But yeah, I agree and the scenario you describe is what
I had in mind. Thanks for pointing it out. I will rephrase it
in follow-up patches.


>
> - "Shared memory" is ambiguous. Please call it VIRTIO Shared Memory
>   Region to differentiate from vhost-user shared memory tables/regions.
>

Ok!


>
> > The request will be processed by the VMM,
> > that will, in turn, trigger a mmap with
> > the instructed parameters (i.e., shmid,
> > shm_offset, fd_offset, fd, lenght).
> >
> > As there are already a couple devices
> > that could benefit of such a feature,
> > and more could require it in the future,
> > my intention was to make it generic.
> >
> > To that end, I declared the shared
> > memory region list in `VirtIODevice`.
> > I could add a couple commodity
> > functions to add new regions to the list,
> > so that the devices can use them. But
> > I wanted to gather some feedback before
> > refining it further, as I am probably
> > missing some required steps/or security
> > concerns that I am not taking into account.
> >
> > Albert Esteve (1):
> >   vhost-user: add shmem mmap request
> >
> >  docs/interop/vhost-user.rst |  23 ++++++++
> >  hw/virtio/vhost-user.c      | 106 ++++++++++++++++++++++++++++++++++++
> >  hw/virtio/virtio.c          |   2 +
> >  include/hw/virtio/virtio.h  |   3 +
> >  4 files changed, 134 insertions(+)
> >
> > --
> > 2.44.0
> >
>
Stefan Hajnoczi June 5, 2024, 11:16 a.m. UTC | #3
On Wed, Jun 05, 2024 at 09:24:36AM +0200, Albert Esteve wrote:
> On Tue, Jun 4, 2024 at 8:16 PM Stefan Hajnoczi <stefanha@redhat.com> wrote:
> 
> > On Thu, May 30, 2024 at 05:22:22PM +0200, Albert Esteve wrote:
> > > Hi all,
> > >
> > > This is an early attempt to have backends
> > > support dynamic fd mapping into shared
> > > memory regions. As such, there are a few
> > > things that need settling, so I wanted to
> > > post this first to have some early feedback.
> > >
> > > The usecase for this is, e.g., to support
> > > vhost-user-gpu RESOURCE_BLOB operations,
> > > or DAX Window request for virtio-fs. In
> > > general, any operation where a backend
> > > would need to mmap an fd to a shared
> > > memory so that the guest can access it.
> >
> > I wanted to mention that this sentence confuses me because:
> >
> > - The frontend will mmap an fd into the guest's memory space so that a
> >   VIRTIO Shared Memory Region is exposed to the guest. The backend
> >   requests the frontend to perform this operation. The backend does not
> >   invoke mmap itself.
> >
> 
> Sorry for the confused wording. It is true that the backend does not
> do the mmap, but requests it to be done. One point of confusion for
> me from your sentence is that I refer to the driver as the frontend,

They are different concepts. Frontend is defined in the vhost-user spec
and driver is defined in the VIRTIO spec.

The frontend is the application that uses vhost-user protocol messages
to communicate with the backend.

The driver uses VIRTIO device model interfaces like virtqueues to
communicate with the device.

> and the mapping is done by the VMM (i.e., QEMU).
> 
> But yeah, I agree and the scenario you describe is what
> I had in mind. Thanks for pointing it out. I will rephrase it
> in follow-up patches.

Thanks!

> 
> 
> >
> > - "Shared memory" is ambiguous. Please call it VIRTIO Shared Memory
> >   Region to differentiate from vhost-user shared memory tables/regions.
> >
> 
> Ok!
> 
> 
> >
> > > The request will be processed by the VMM,
> > > that will, in turn, trigger a mmap with
> > > the instructed parameters (i.e., shmid,
> > > shm_offset, fd_offset, fd, lenght).
> > >
> > > As there are already a couple devices
> > > that could benefit of such a feature,
> > > and more could require it in the future,
> > > my intention was to make it generic.
> > >
> > > To that end, I declared the shared
> > > memory region list in `VirtIODevice`.
> > > I could add a couple commodity
> > > functions to add new regions to the list,
> > > so that the devices can use them. But
> > > I wanted to gather some feedback before
> > > refining it further, as I am probably
> > > missing some required steps/or security
> > > concerns that I am not taking into account.
> > >
> > > Albert Esteve (1):
> > >   vhost-user: add shmem mmap request
> > >
> > >  docs/interop/vhost-user.rst |  23 ++++++++
> > >  hw/virtio/vhost-user.c      | 106 ++++++++++++++++++++++++++++++++++++
> > >  hw/virtio/virtio.c          |   2 +
> > >  include/hw/virtio/virtio.h  |   3 +
> > >  4 files changed, 134 insertions(+)
> > >
> > > --
> > > 2.44.0
> > >
> >
Albert Esteve June 5, 2024, 11:50 a.m. UTC | #4
On Wed, Jun 5, 2024 at 1:16 PM Stefan Hajnoczi <stefanha@redhat.com> wrote:

> On Wed, Jun 05, 2024 at 09:24:36AM +0200, Albert Esteve wrote:
> > On Tue, Jun 4, 2024 at 8:16 PM Stefan Hajnoczi <stefanha@redhat.com>
> wrote:
> >
> > > On Thu, May 30, 2024 at 05:22:22PM +0200, Albert Esteve wrote:
> > > > Hi all,
> > > >
> > > > This is an early attempt to have backends
> > > > support dynamic fd mapping into shared
> > > > memory regions. As such, there are a few
> > > > things that need settling, so I wanted to
> > > > post this first to have some early feedback.
> > > >
> > > > The usecase for this is, e.g., to support
> > > > vhost-user-gpu RESOURCE_BLOB operations,
> > > > or DAX Window request for virtio-fs. In
> > > > general, any operation where a backend
> > > > would need to mmap an fd to a shared
> > > > memory so that the guest can access it.
> > >
> > > I wanted to mention that this sentence confuses me because:
> > >
> > > - The frontend will mmap an fd into the guest's memory space so that a
> > >   VIRTIO Shared Memory Region is exposed to the guest. The backend
> > >   requests the frontend to perform this operation. The backend does not
> > >   invoke mmap itself.
> > >
> >
> > Sorry for the confused wording. It is true that the backend does not
> > do the mmap, but requests it to be done. One point of confusion for
> > me from your sentence is that I refer to the driver as the frontend,
>
> They are different concepts. Frontend is defined in the vhost-user spec
> and driver is defined in the VIRTIO spec.
>

Ah! I see. Then you may probably want to ignore some of my responses to
other mail of this series :P

Thanks for the clarification.


>
> The frontend is the application that uses vhost-user protocol messages
> to communicate with the backend.
>
> The driver uses VIRTIO device model interfaces like virtqueues to
> communicate with the device.
>
> > and the mapping is done by the VMM (i.e., QEMU).
> >
> > But yeah, I agree and the scenario you describe is what
> > I had in mind. Thanks for pointing it out. I will rephrase it
> > in follow-up patches.
>
> Thanks!
>
> >
> >
> > >
> > > - "Shared memory" is ambiguous. Please call it VIRTIO Shared Memory
> > >   Region to differentiate from vhost-user shared memory tables/regions.
> > >
> >
> > Ok!
> >
> >
> > >
> > > > The request will be processed by the VMM,
> > > > that will, in turn, trigger a mmap with
> > > > the instructed parameters (i.e., shmid,
> > > > shm_offset, fd_offset, fd, lenght).
> > > >
> > > > As there are already a couple devices
> > > > that could benefit of such a feature,
> > > > and more could require it in the future,
> > > > my intention was to make it generic.
> > > >
> > > > To that end, I declared the shared
> > > > memory region list in `VirtIODevice`.
> > > > I could add a couple commodity
> > > > functions to add new regions to the list,
> > > > so that the devices can use them. But
> > > > I wanted to gather some feedback before
> > > > refining it further, as I am probably
> > > > missing some required steps/or security
> > > > concerns that I am not taking into account.
> > > >
> > > > Albert Esteve (1):
> > > >   vhost-user: add shmem mmap request
> > > >
> > > >  docs/interop/vhost-user.rst |  23 ++++++++
> > > >  hw/virtio/vhost-user.c      | 106
> ++++++++++++++++++++++++++++++++++++
> > > >  hw/virtio/virtio.c          |   2 +
> > > >  include/hw/virtio/virtio.h  |   3 +
> > > >  4 files changed, 134 insertions(+)
> > > >
> > > > --
> > > > 2.44.0
> > > >
> > >
>