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(+)
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(+) -- 2.44.0
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 >
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 > > >
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 > > > > >
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 > > > > > > > >
© 2016 - 2024 Red Hat, Inc.