qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: RFC: use VFIO over a UNIX domain socket to implement device offloadi


From: Thanos Makatos
Subject: RE: RFC: use VFIO over a UNIX domain socket to implement device offloading
Date: Thu, 30 Apr 2020 11:23:34 +0000

> > > I've just shared with you the Google doc we've working on with John
> > where we've
> > > been drafting the protocol specification, we think it's time for some 
> > > first
> > > comments. Please feel free to comment/edit and suggest more people
> to
> > be on the
> > > reviewers list.
> > >
> > > You can also find the Google doc here:
> > >
> > >
> > https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__docs.google.com_document_d_1FspkL0hVEnZqHbdoqGLUpyC38rSk-
> 5F&d=DwIFAw&c=s883GpUCOChKOHiocYtGcg&r=XTpYsh5Ps2zJvtw6ogtti46a
> tk736SI4vgsJiUKIyDE&m=lJC7YeMMsAaVsr99tmTYncQdjEfOXiJQkRkJW7NMg
> Rg&s=RyyhgVrLX2bBTqpXZnBmllqkCg_wyalxwZKkfcYt50c&e=
> > 7HhY471TsVwyK8/edit?usp=sharing
> > >
> > > If a Google doc doesn't work for you we're open to suggestions.
> >
> > I can't add comments to the document so I've inlined them here:
> >
> > The spec assumes the reader is already familiar with VFIO and does not
> > explain concepts like the device lifecycle, regions, interrupts, etc.
> > We don't need to duplicate detailed VFIO information, but I think the
> > device model should be explained so that anyone can start from the
> > VFIO-user spec and begin working on an implementation.  Right now I
> > think they would have to do some serious investigation of VFIO first in
> > order to be able to write code.
> 
> I've added a high-level overview of how VFIO is used in this context.
> 
> > "only the source header files are used"
> > I notice the current <linux/vfio.h> header is licensed "GPL-2.0 WITH
> > Linux-syscall-note".  I'm not a lawyer but I guess this means there are
> > some restrictions on using this header file.  The <linux/virtio*.h>
> > header files were explicitly licensed under the BSD license to make it
> > easy to use the non __KERNEL__ parts.
> 
> My impression is that this note actually relaxes the licensing requirements, 
> so
> that proprietary software can use the system call headers and run on Linux
> without being considered derived work. In any case I'll double check with our
> legal team.
> 
> > VFIO-user Command Types: please indicate for each request type whether
> > it is client->server, server->client, or both.  Also is it a "command"
> > or "request"?
> 
> Will do. It's a command.
> 
> 
> > vfio_user_req_type <-- is this an extension on top of <linux/vfio.h>?
> > Please make it clear what is part of the base <linux/vfio.h> protocol
> > and what is specific to vfio-user.
> 
> Correct, it's an extension over <linux/vfio.h>. I've clarified the two symbol
> namespaces.
> 
> 
> > VFIO_USER_READ/WRITE serve completely different purposes depending
> on
> > whether they are sent client->server or server->client.  I suggest
> > defining separate request type constants instead of overloading them.
> 
> Fixed.
> 
> > What is the difference between VFIO_USER_MAP_DMA and
> > VFIO_USER_REG_MEM?
> > They both seem to be client->server messages for setting up memory but
> > I'm not sure why two request types are needed.
> 
> John will provide more information on this.
> 
> > struct vfio_user_req->data.  Is this really a union so that every
> > message has the same size, regardless of how many parameters are
> passed
> > in the data field?
> 
> Correct, it's a union so that every message has the same length.
> 
> > "a framebuffer where the guest does multiple stores to the virtual
> > device."  Do you mean in SMP guests?  Or even in a single CPU guest?
> 
> @John
> 
> > Also, is there any concurrency requirement on the client and server
> > side?  Can I implement a client/server that processes requests
> > sequentially and completes them before moving on to the next request or
> > would that deadlock for certain message types?
> 
> I believe that this might also depend on the device semantics, will need to
> think about it in greater detail.

I've looked at this but can't provide a definitive answer yet. I believe the
safest thing to do is for the server to process requests in order.

> More importantly, considering:
> a) Marc-André's comments about data alignment etc., and
> b) the possibility to run the server on another guest or host,
> we won't be able to use native VFIO types. If we do want to support that
> then
> we'll have to redefine all data formats, similar to
> https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__github.com_qemu_qemu_blob_master_docs_interop_vhost-
> 2Duser.rst&d=DwIFAw&c=s883GpUCOChKOHiocYtGcg&r=XTpYsh5Ps2zJvtw6
> ogtti46atk736SI4vgsJiUKIyDE&m=lJC7YeMMsAaVsr99tmTYncQdjEfOXiJQkRkJ
> W7NMgRg&s=1d_kB7VWQ-8d4t6Ikga5KSVwws4vwiVMvTyWVaS6PRU&e= .
> 
> So the protocol will be more like an enhanced version of the Vhost-user
> protocol
> than VFIO. I'm fine with either direction (VFIO vs. enhanced Vhost-user),
> so we need to decide before proceeding as the request format is
> substantially
> different.

Regarding the ability to use the protocol on non-AF_UNIX sockets, we can 
support this future use case without unnecessarily complicating the protocol by
defining the C structs and stating that data alignment and endianness for the 
non AF_UNIX case must be the one used by GCC on a x86_64 bit machine, or can 
be overridden as required.

We've polished the document a bit more with the help of Marc-André,
Raphael, and Swapnil.

The major outstanding issue is agreeing on the having a pair of commands for
registering/unregistering guest memory and another pair of commands to map/unmap
DMA regions, similar to QEMU.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]