Current implementation has everything in userspace. The perf hit hasn't been compelling enough to make even minor perf improvements.
(Yet-another-Googler: I worked on this and spoke about it at KVM Forum)
(Yet-another-Googler: I worked on this and spoke about it at KVM Forum)
A couple years ago I measured a huge slowdown on userspace vmexits for guests spanning multiple NUMA nodes, because of cacheline bouncing on tsk->sighand->siglock. Maybe you're not using KVM_SET_SIGNAL_MASK.
(Steve, I suppose?)
We do very little that typically requires trapping MMIO, particularly in places that are performance sensitive (VIRTIO Net and VIRTIO SCSI do not, and honestly there's not too much that guests do inside GCE that isn't either disk or networking :).