|
From: | Anthony Liguori |
Subject: | Re: [Qemu-devel] Ideas wiki for GSoC 2010 |
Date: | Mon, 15 Mar 2010 20:21:54 -0500 |
User-agent: | Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0 |
On 03/15/2010 10:06 AM, Avi Kivity wrote:
On 03/15/2010 03:23 PM, Anthony Liguori wrote:On 03/15/2010 08:11 AM, Avi Kivity wrote:On 03/15/2010 03:03 PM, Joerg Roedel wrote:Really? I did a small test with virtio-blk in a nested guest (disk read with dd, so not a real benchmark) and got a reasonable read-performanceI will add another project - iommu emulation. Could be very useful for doing device assignment to nested guests, which could make testing a lot easier.Our experiments show that nested device assignment is pretty much required for I/O performance in nested scenarios.of around 25MB/s from the disk in the l2-guest.Your guest wasn't doing a zillion VMREADs and VMWRITEs every exit.I plan to reduce VMREAD/VMWRITE overhead for kvm, but not much we can do for other guests.VMREAD/VMWRITEs are generally optimized by hypervisors as they tend to be costly. KVM is a bit unusual in terms of how many times the instructions are executed per exit.Do you know offhand of any unnecessary read/writes? There's update_cr8_intercept(), but on normal exits, I don't see what else we can remove.
Yeah, there are a number of examples.vmcs_clear_bits() and vmcs_set_bits() read a field of the VMCS and then immediately writes it. This is unnecessary as the same information could be kept in a shadow variable. In vmx_fpu_activate, we call vmcs_clear_bits() followed immediately by vmcs_set_bits(). which means we're reading GUEST_CR0 twice and writing it twice.
vmx_get_rflags() reads from the VMCS and we frequently call get_rflags() followed by a set_rflags() to update a bit. We also don't cache the value between calls and there's a few spots in the code that make multiple calls.
Regards, Anthony Liguori
[Prev in Thread] | Current Thread | [Next in Thread] |