From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Stefano Garzarella" <sgarzare@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@gmail.com>,
"Roman Kiryanov" <rkir@google.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
alex.bennee@linaro.org, "QEMU Developers" <qemu-devel@nongnu.org>,
"JP Cottin" <jpcottin@google.com>,
"Erwin Jansen" <jansene@google.com>,
"Mehdi Alizadeh" <mett@google.com>
Subject: Re: Hermetic virtio-vsock in QEMU
Date: Wed, 8 May 2024 13:51:33 +0100 [thread overview]
Message-ID: <Zjt1VdKQ3KIZChg9@redhat.com> (raw)
In-Reply-To: <30baeb56-64d2-4ea3-8e53-6a5c50999979@redhat.com>
On Wed, May 08, 2024 at 02:37:52PM +0200, Paolo Bonzini wrote:
> On 5/8/24 11:38, Stefano Garzarella wrote:
> > On Wed, May 08, 2024 at 01:13:09PM GMT, Marc-André Lureau wrote:
> > > Hi
> > >
> > > On Wed, May 8, 2024 at 11:50 AM Stefano Garzarella
> > > <sgarzare@redhat.com> wrote:
> > > >
> > > > Hi Roman,
> > > >
> > > > On Tue, May 07, 2024 at 11:20:50PM GMT, Roman Kiryanov wrote:
> > > > >Hi Stefano,
> > > > >
> > > > >On Tue, May 7, 2024 at 1:10 AM Stefano Garzarella
> > > > <sgarzare@redhat.com> wrote:
> > > > >> I have no experience with Windows, but what we need for
> > > > vhost-user is:
> > > > >>
> > > > >> - AF_UNIX and be able to send file descriptors using ancillary data
> > > > >> (i.e. SCM_RIGHTS)
> > > > >
> > > > >As far as I understand, Windows does NOT support SCM_RIGHTS
> > > > over AF_UNIX.
> > > >
> > > > Thank you for the information. This is unfortunate and does not allow
> > > > us to use vhost-user as it is on Windows.
> > > >
> > >
> > > fwiw, Windows has other mechanisms to share resources between processes.
> > >
> > > To share/pass sockets, you can use WSADuplicateSocket. For shared
> > > memory and other resources, DuplicateHandle API.
> >
> > Cool, thanks for sharing that. So it could be done, but I think we need
> > to extend the vhost-user protocol to work with Windows.
>
> It would be possible to implement the memfd backend for Windows, using the
> CreateFileMapping() API.
>
> However, the vhost-user protocol's VHOST_USER_SET_MEM_TABLE requests do not
> have any padding that can be used to pass the handle to the target. An
> extended version would be necessary.
>
> One difference between Unix and Windows is that, if the vhost-server messes
> up the handling of messages from the socket, and therefore it does not close
> the handle, it is leaked forever. This is not a huge deal per se, but I
> think it means that QEMU is not allowed to "open" a privileged vhost-user
> server process with PROCESS_DUP_HANDLE rights (translation: QEMU cannot
> provide duplicate handles to a privileged vhost-user server process).
>
> Also I'm not sure what the cost of DuplicateHandle() is, and whether it's a
> good idea to do it for every region on every VHOST_USER_SET_MEM_TABLE
> request. But VHOST_USER_SET_MEM_TABLE is not a fast path, so perhaps it's
> okay.
>
> I think a virtio-vsock implementation in QEMU would be easier, lacking
> another usecase for vhost-user on Windows.
>
> The main design question is whether multiple virtio-vsock devices for the
> same guest should share the CID space or not (I think it should, but I'm not
> 100% sure). To connect host<->guest you could have a QOM object, here I am
> naming it vsock-forward as an example:
Designwise, a native VSOCK backend in QEMU really should implement the
same approach defined by firecracker, so that we have interoperability
with systemd, firecracker and cloud-hypervisor. See
https://gitlab.com/qemu-project/qemu/-/issues/2095
https://github.com/firecracker-microvm/firecracker/blob/main/docs/vsock.md#firecracker-virtio-vsock-design
This involves multiple UNIX sockets on the host
1 * /some/path - QEMU listens on this, and accepts connections
from other host processes. The client sends
"PORT <num>" to indicate that guest port it
is connecting to
n * /some/path_$PORT - QEMU connect to this for outgoing connections
from the guest. Other host processes need
to listen on whatever path_$PORT need to be
serviced
IOW, from a CLI pov, QEMU should need nothing more than
-object vsock-forward,prefix=/some/path
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2024-05-08 12:51 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-03 21:30 Hermetic virtio-vsock in QEMU Roman Kiryanov
2024-04-15 11:20 ` Daniel P. Berrangé
2024-04-17 19:31 ` Roman Kiryanov
2024-04-18 9:34 ` Daniel P. Berrangé
2024-05-07 8:10 ` Stefano Garzarella
2024-05-08 6:20 ` Roman Kiryanov
2024-05-08 7:49 ` Stefano Garzarella
2024-05-08 9:13 ` Marc-André Lureau
2024-05-08 9:38 ` Stefano Garzarella
2024-05-08 12:37 ` Paolo Bonzini
2024-05-08 12:51 ` Daniel P. Berrangé [this message]
2024-05-08 13:00 ` Paolo Bonzini
2024-05-08 13:32 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zjt1VdKQ3KIZChg9@redhat.com \
--to=berrange@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=jansene@google.com \
--cc=jpcottin@google.com \
--cc=marcandre.lureau@gmail.com \
--cc=mett@google.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rkir@google.com \
--cc=sgarzare@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.