Hi Gerd,
I was in a discussion with the AGL folks today talking about approaches to achieving zero-copy when running VirGL virtio guests. AIUI (which is probably not very much) the reasons for copy can be due to a number of reasons:
- the GPA not being mapped to a HPA that is accessible to the final HW - the guest allocation of a buffer not meeting stride/alignment requirements - data needing to be transformed for consumption by the real hardware?
any others? Is there an impedance between different buffer resource allocators in the guest and the guest? Is that just a problem for non-FLOSS blob drivers in the kernel?
I'm curious if it's possible to measure the effect of these extra copies and where do they occur? Do all resources get copied from the guest buffer to host or does this only occur when there is a mismatch in the buffer requirements?
Are there any functions where I could add trace points to measure this? If this occurs in the kernel I wonder if I could use an eBPF probe to count the number of bytes copied?
Apologies for the wall of questions I'm still very new to the 3D side of things ;-)