[virglrenderer-devel] coherent memory access for virgl

Tomeu Vizoso tomeu.vizoso at collabora.com
Thu Aug 30 16:02:40 UTC 2018


On 08/07/2018 12:23 PM, Gerd Hoffmann wrote:
>    Hi,
> 
> [ just back from summer vacation ]
> [ adding paolo to Cc: ]
> 
> On Tue, Jul 31, 2018 at 06:28:23AM +1000, Dave Airlie wrote:
>> I think we've pretty much nailed GL4.3 + GLES3.1/2 in terms of
>> features, which leads us to the next big milestones.
>>
>> a) GL 4.4 - specifically GL_ARB_buffer_storage
>> b) vulkan.
>>
>> Both of these are going to require coherent memory access from the
>> guest to resources on the host.
> 
> [ ... ]
> 
>> I expect we need to use a PCI BAR for this behaviour,
> 
> Layering violation.
> 
> But given that virtio is designed to have the guest allocate the buffers
> and it simply has no methods to allow the guest access host-allocated
> ressources that is still the best option we have I guess.
> 
> Paolo?  Any better suggestions?
> 
>> I'm not sure how
>> large or many objects implementations expect to be able to map
>> consistent and persistent
>> at the same time, so having a restricted BAR side could be quite
>> limiting here, I suppose we could make a 64-bit BAR and have it quite
>> large in order to accomodate
>> this.
> 
> Also: how frequently will these objects be allocated/freed?
> 
> I suspect GL_ARB_buffer_storage not so often.
> 
> But vulkan?  It probably wants pretty much everything allocated that
> way.  I expect it to be designed with the memory management capabilities
> of modern GPUs in mind.  Don't know much about vulkan though ...

It's a good practice to suballocate because allocation is considered 
expensive, but I guess that doesn't automatically mean that we can make 
allocations 10x slower...

> Beside that I expect once we have that people will find other uses for
> it.  Using it for dumb drm buffers to avoid memcpy for display updates
> for example.
> 
>> However if we have a BAR space we will need to memory manage it
>> and add eviction of objects in it (they can always be paged back on on
>> next access).
> 
> Yes.  I see basically two ways to do that:
> 
>    (1) Use qemu memory regions for objects.  Easy to implement.  But any
>        object allocation will result in a kvm slots update then (object
>        releases can be done lazy to batch them), so I suspect it is not
>        the best choice performance-wise.
>    (2) Grab a block of qemu process address space as backing storage for
>        the bar, then manage it with mmap(MAP_FIXED, ...).
> 
> Comments?  Other suggestions?

Both options sound good to me.

>> Anyone got any better/worse/pitfalls. I'm also not sure if I'm the
>> best person to work on this, so if someone is really interested and
>> has bandwidth I think it would
>> definitely be a thing to get moving on.
> 
> I can look into this once I'm done with the vacation backlog.

Do you want any help with prototyping this?

Regards,

Tomeu


More information about the virglrenderer-devel mailing list