Xen 3.3 Feature: Optimized HVM Video Memory Tracking

From Samuel Thibault:

When having a look at how much CPU time is used when an HVM guest is idle, one can notice that the ioemu process used to permanently take something like 7%. This is because ioemu used to keep checking the content of the HVM video RAM for modifications, because setting up a trap on each guest video write would slow guest video operations awfully down.  In Xen 3.3, ioemu requests the hypervisor to track video memory modification.  The hypervisor can do it more efficiently since it has access to the dirty bit that the processor automatically sets in the page table flags on write accesses to pages.  As a result, instead of regularly comparing 8MB of video memory, ioemu just makes a hypercall to read the list of dirty pages.  As an additional optimization, if no modification has occurred for two seconds, the entire video memory write access is dropped until the guest writes to video memory again, hence saving the page table walk itself.

The result is that the CPU time goes down around 0.3%!