I am a total newbie with KVM and I need your insight on a couple of issues.
We are designing a system for a research project, where applications running on one or more VMs can call an agent listening on the host to accelerate specific tasks on GPGPU and FPGAs. This involves transferring input data from the application to the agent, which will then perform DMA to devices running on PCIe. Using IP network sockets introduces considerable latency - and I am not sure if virtio fares considerably better.
I was wondering what would be the approach to take to transfer data from the guest to the host and minimise the latency overhead to support large data transfers (2-5GB). We do not wish to use any hardware virtualisation technology such as SR-IOV - as we do not want applications to access directly the PCIe bus.
Is there a possibility to avoid any copy, and allow the host to access the user space of a virtual machine? This way we could pass some kind of address to allow the host to DMA directly?