> The downside of PVM is the shadow paging that can take on a significant performance hit if the guest application is frequently modifying the page table.
By codesign of the guest and host kernels, it may be possible to unify the guest, shadow, and host page tables into a single set of host page tables.
You may want to have a try on virtio-user to avoid your user space code calling recvmsg/sendmsg, instead, a (or severals) vhost kthread(s) will do that for you. Unfortunately, there is a proper virtio-net driver in Go.
By codesign of the guest and host kernels, it may be possible to unify the guest, shadow, and host page tables into a single set of host page tables.