Source :
http://dtrace.org/blogs/brendan/2013/01/11/virtualization-performance-zones-kvm-xen/
With Xen, the hypervisor performs CPU scheduling for the
domains, and then each domain has its own OS kernel for thread
scheduling. The hypervisor supports different CPU scheduling classes,
including Borrowed Virtual Time (BVT), Simple Earliest Deadline First
(SEDF), and Credit-Based. The domains use the OS kernel scheduler, and
whatever regular scheduler classes and policies they provide.
The extra overhead of multiple schedulers costs performance. Having
multiple schedulers can also create complex issues with how they
interact, adding CPU latency in the wrong situations. Debugging this can
be very difficult, especially since the Xen hypervisor is running out
of reach of the usual OS performance tools (try xentrace instead).
Sending I/O via the I/O proxy processes (which are usually qemu)
involves context-switching and more overhead. There has been lots of
work to minimize this, including shared memory transports, buffering,
I/O coalescing, and paravirtualization drivers.
With KVM, the hypervisor is a kernel module (kvm) which is
scheduled by the OS scheduler. It can be tuned using the usual OS kernel
scheduler classes, policies and priorities. The I/O path takes fewer
steps than Xen. (The original Qumranet KVM paper described it as five steps vs ten, although this description isn’t including paravirtualization.)
Source :
https://major.io/2014/06/22/performance-benchmarks-kvm-vs-xen/
No comments:
Post a Comment