[virglrenderer-devel] multiprocess model and GL

Gerd Hoffmann kraxel at redhat.com
Fri Jan 17 07:28:56 UTC 2020


On Thu, Jan 16, 2020 at 12:33:25PM -0800, Chia-I Wu wrote:
> On Thu, Jan 16, 2020 at 4:58 AM Gerd Hoffmann <kraxel at redhat.com> wrote:
> >
> > On Mon, Jan 13, 2020 at 01:03:22PM -0800, Chia-I Wu wrote:
> > > Sorry I missed this email.
> > >
> > > On Thu, Jan 9, 2020 at 12:54 PM Dave Airlie <airlied at gmail.com> wrote:
> > > >
> > > > This is just an aside to the issue discussion, but I was wondering
> > > > before we heavily consider a vulkan multi-process model, could
> > > > we/should we prove a GL multi-process model first?
> > >
> > > I think there will just be the qemu process at first, with many GL
> > > contexts and one VkInstance for each guest VkInstance.  Then there
> > > will be a switch to run different VkInstance in different processes
> > > (unlikely, but I wonder if this can be a vk layer).  I did not plan
> > > for a multi-process GL model.  Do you have anything you want to prove
> > > from it?
> >
> > Right now we have two models:
> >   - Everything in qemu.
> >   - Separate virgl process (see contrib/vhost-user-gpu/ in qemu),
> >     but still all gl contexts in a single process.
> >
> > We could try to switch vhost-user-gpu to a one-process-per-context
> > model.  I think it makes sense to at least think about the resource
> > management implications this would have (it would make virgl work
> > simliar to vulkan):
> >
> >  - We would need a master process.  It runs the virtqueues and manages
> >    the resources.
> 
> In the distant feature where we will be Vulkan-only, we will not want
> GL-specific paths.  If we are to do multi-process GL now,

[ Note; I don't think it buys us much to actually do that now, we have
        enough to do even without that.  But we should keep that in mind
        when designing things ... ]

> I think we should follow the multi-process Vulkan model, in the sense
> that GL resources should also be created in the per-context processes

Yep, that would be good, we would not need a dma-buf for each and every
resource then.  Problem here is backward compatibility.  We simply can't
do that without changing the virtio protocol.

So, I guess the options we have are:
 (1) keep virgl mostly as-is and live with the downsides (which should
     not be that much of a problem as long as one process manages all
     GL contexts), or
 (2) create virgl_v2, where resource management works very simliar to
     the vulkan way of doing things, require the guest using that to
     run gl+vk side-by-side.  Old guests without vk support could
     continue to use virgl_v1

> >  - We would need a per-context process.
> >  - VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE would make master dma-buf export a
> >    resource and the per-context process import it.  Sharing resources
> >    works by calling VIRTIO_GPU_CMD_CTX_ATTACH_RESOURCE multipe times for
> >    different contexts, and therefore master passing the dma-buf to
> >    multiple per-context processes.
> 
> I would like to see the export and import parts to be separated out
> and executed by other commands, but all three commands can be sent
> together by the guest kernel when it makes senses.  Especially the
> import part, the guest vulkan wants to pass some metadata and specify
> an object id for the imported driver object.

I don't want call this import/export, that term is overloaded too much
already.  Also the "export" is needed for more than just export.  It is
needed for everything the guest needs a gem bo for (mmap, scanout, ...).

I guess something along the lines of OBJECT_TO_RESOURCE (add virtio
resource for vulkan object, aka "export") and RESOURCE_TO_OBJECT
("import") would be better.

Does GL have object IDs too?

cheers,
  Gerd



More information about the virglrenderer-devel mailing list