don't call adjust_vmx_controls() second time
PATCH 1/1 don't call adjust_vmx_controls() second time
Don't call adjust_vmx_controls() two times for the same control. It restores options that was dropped earlier.
arch/x86/kvm/vmx.c +3 -6
@@ -1262,12 +1262,9 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf)if (_cpu_based_2nd_exec_control &SECONDARY_EXEC_ENABLE_EPT ) {/* CR3 accesses and invlpg don't need to cause VM Exits when EPT enabled */ - min &= ~(CPU_BASED_CR3_LOAD_EXITING | -CPU_BASED_CR3_STORE_EXITING | -CPU_BASED_INVLPG_EXITING ); -if (adjust_vmx_controls (min, opt,MSR_IA32_VMX_PROCBASED_CTLS , - &_cpu_based_exec_control) <0 ) -return -EIO ; + _cpu_based_exec_control &= ~(CPU_BASED_CR3_LOAD_EXITING | +CPU_BASED_CR3_STORE_EXITING | +CPU_BASED_INVLPG_EXITING );rdmsr (MSR_IA32_VMX_EPT_VPID_CAP , vmx_capability.ept, vmx_capability.vpid); }
--
Gleb.
Avi Kivity
AppliedQuoted 3 lines · Gleb Natapov
Don't call
adjust_vmx_controls()two times for the same control. It restores options that was dropped earlier.
Applied, thanks. Andrew, if you rerun your benchmark atop kvm.git 'next' branch, I believe you will see dramatically better results.
Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.
Quoted 7 lines · Avi Kivity
Quoted 3 lines · Gleb Natapov
Don't call
adjust_vmx_controls()two times for the same control. It restores options that was dropped earlier.Applied, thanks. Andrew, if you rerun your benchmark atop kvm.git 'next' branch, I believe you will see dramatically better results.
Yes! CPU is much lower: user nice system irq softirq guest idle iowait 5.81 0.00 9.48 0.08 1.04 21.32 57.86 4.41
previous CPU:
user nice system irq softirq guest idle iowait
5.67 0.00 11.64 0.09 1.05 31.90 46.06 3.59
new oprofile:
Quoted 34 lines
samples % app name symbol name 885444 53.2905 kvm-intel.ko vmx_vcpu_run 38090 2.2924 qemu-system-x86_64 cpu_physical_memory_rw 34764 2.0923 qemu-system-x86_64 phys_page_find_alloc 25278 1.5214 vmlinux-2.6.31-rc5-autokern1 native_write_msr_safe 18205 1.0957 libc-2.5.so memcpy 14730 0.8865 qemu-system-x86_64 qemu_get_ram_ptr 14189 0.8540 kvm.ko kvm_arch_vcpu_ioctl_run 12380 0.7451 vmlinux-2.6.31-rc5-autokern1 native_set_debugreg 12278 0.7390 vmlinux-2.6.31-rc5-autokern1 native_read_msr_safe 10871 0.6543 qemu-system-x86_64 virtqueue_get_head 10814 0.6508 vmlinux-2.6.31-rc5-autokern1 copy_user_generic_string 9080 0.5465 vmlinux-2.6.31-rc5-autokern1 fget_light 9015 0.5426 vmlinux-2.6.31-rc5-autokern1 schedule 8557 0.5150 qemu-system-x86_64 virtqueue_avail_bytes 7805 0.4697 vmlinux-2.6.31-rc5-autokern1 do_select 7173 0.4317 qemu-system-x86_64 lduw_phys 7019 0.4224 qemu-system-x86_64 main_loop_wait 6979 0.4200 vmlinux-2.6.31-rc5-autokern1 audit_syscall_exit 5571 0.3353 vmlinux-2.6.31-rc5-autokern1 kfree 5170 0.3112 vmlinux-2.6.31-rc5-autokern1 audit_syscall_entry 5086 0.3061 vmlinux-2.6.31-rc5-autokern1 fput 4631 0.2787 vmlinux-2.6.31-rc5-autokern1 mwait_idle 4584 0.2759 kvm.ko kvm_load_guest_fpu 4491 0.2703 vmlinux-2.6.31-rc5-autokern1 system_call 4461 0.2685 vmlinux-2.6.31-rc5-autokern1 __switch_to 4431 0.2667 kvm.ko kvm_put_guest_fpu 4371 0.2631 vmlinux-2.6.31-rc5-autokern1 __down_read 4290 0.2582 qemu-system-x86_64 kvm_run 4218 0.2539 vmlinux-2.6.31-rc5-autokern1 getnstimeofday 4129 0.2485 libpthread-2.5.so pthread_mutex_lock 4122 0.2481 qemu-system-x86_64 ldl_phys 4100 0.2468 vmlinux-2.6.31-rc5-autokern1 do_vfs_ioctl 3811 0.2294 kvm.ko find_highest_vector
Quoted 9 lines
3593 0.2162 vmlinux-2.6.31-rc5-autokern1 unroll_tree_refs 3560 0.2143 vmlinux-2.6.31-rc5-autokern1 try_to_wake_up 3550 0.2137 vmlinux-2.6.31-rc5-autokern1 native_get_debugreg 3506 0.2110 kvm-intel.ko vmcs_writel 3487 0.2099 vmlinux-2.6.31-rc5-autokern1 task_rq_lock 3434 0.2067 vmlinux-2.6.31-rc5-autokern1 __up_read 3368 0.2027 librt-2.5.so clock_gettime 3339 0.2010 qemu-system-x86_64 virtqueue_num_heads
Thanks very much for the fix!
-Andrew
Quoted 11 lines · Andrew Theurer
Quoted 9 lines · Avi Kivity
Quoted 4 lines · Gleb Natapov
Don't call
adjust_vmx_controls()two times for the same control. It restores options that was dropped earlier.Applied, thanks. Andrew, if you rerun your benchmark atop kvm.git 'next' branch, I believe you will see dramatically better results.
Quoted 9 lines
Yes! CPU is much lower: user nice system irq softirq guest idle iowait 5.81 0.00 9.48 0.08 1.04 21.32 57.86 4.41previous CPU:
user nice system irq softirq guest idle iowait
5.67 0.00 11.64 0.09 1.05 31.90 46.06 3.59
How does it compare to the other hypervisor now?
Quoted 6 lines
new oprofile:
Quoted 3 lines
samples % app name symbol name 885444 53.2905 kvm-intel.ko vmx_vcpu_run
guest mode = good
Quoted 4 lines
Quoted 4 lines
38090 2.2924 qemu-system-x86_64 cpu_physical_memory_rw 34764 2.0923 qemu-system-x86_64 phys_page_find_alloc 14730 0.8865 qemu-system-x86_64 qemu_get_ram_ptr 10814 0.6508 vmlinux-2.6.31-rc5-autokern1 copy_user_generic_string
Quoted 8 lines
Quoted 8 lines
10871 0.6543 qemu-system-x86_64 virtqueue_get_head 8557 0.5150 qemu-system-x86_64 virtqueue_avail_bytes 7173 0.4317 qemu-system-x86_64 lduw_phys 4122 0.2481 qemu-system-x86_64 ldl_phys 3339 0.2010 qemu-system-x86_64 virtqueue_num_heads 4129 0.2485 libpthread-2.5.so pthread_mutex_lock
virtio and related qemu overhead: 8.2%.
Quoted 3 lines
Quoted 3 lines
25278 1.5214 vmlinux-2.6.31-rc5-autokern1 native_write_msr_safe 12278 0.7390 vmlinux-2.6.31-rc5-autokern1 native_read_msr_safe
This will be reduced to if we move virtio to kernel context.
Quoted 3 lines
Quoted 3 lines
12380 0.7451 vmlinux-2.6.31-rc5-autokern1 native_set_debugreg 3550 0.2137 vmlinux-2.6.31-rc5-autokern1 native_get_debugreg
A lot less than before, but still annoying.
Quoted 2 lines
Quoted 2 lines
4631 0.2787 vmlinux-2.6.31-rc5-autokern1
mwait_idle
idle=halt may improve this, mwait is slow.
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 16 lines · Avi Kivity
Quoted 15 lines · Andrew Theurer
Quoted 9 lines · Avi Kivity
Quoted 4 lines · Gleb Natapov
Don't call
adjust_vmx_controls()two times for the same control. It restores options that was dropped earlier.Applied, thanks. Andrew, if you rerun your benchmark atop kvm.git 'next' branch, I believe you will see dramatically better results.
Yes! CPU is much lower: user nice system irq softirq guest idle iowait 5.81 0.00 9.48 0.08 1.04 21.32 57.86 4.41
Quoted 7 lines
Quoted 5 lines
previous CPU:
user nice system irq softirq guest idle iowait
5.67 0.00 11.64 0.09 1.05 31.90 46.06 3.59How does it compare to the other hypervisor now?
My original results for other hypervisor were a little inaccurate. They mistakenly used 2 vcpu guests. New runs with 1 vcpu guests (as used in kvm) have slightly lower CPU utilization. Anyway, here's the breakdown:
CPU percent more CPU kvm-master/qemu-kvm-87: 50.15 78% kvm-next/qemu-kvm-87: 37.73 34%
Quoted 23 lines
Quoted 7 lines
new oprofile:
Quoted 3 lines
samples % app name symbol name 885444 53.2905 kvm-intel.ko vmx_vcpu_runguest mode = good
Quoted 4 lines
Quoted 4 lines
38090 2.2924 qemu-system-x86_64 cpu_physical_memory_rw 34764 2.0923 qemu-system-x86_64 phys_page_find_alloc 14730 0.8865 qemu-system-x86_64 qemu_get_ram_ptr 10814 0.6508 vmlinux-2.6.31-rc5-autokern1 copy_user_generic_stringQuoted 8 lines
Quoted 8 lines
10871 0.6543 qemu-system-x86_64 virtqueue_get_head 8557 0.5150 qemu-system-x86_64 virtqueue_avail_bytes 7173 0.4317 qemu-system-x86_64 lduw_phys 4122 0.2481 qemu-system-x86_64 ldl_phys 3339 0.2010 qemu-system-x86_64 virtqueue_num_heads 4129 0.2485 libpthread-2.5.so pthread_mutex_lock
Quoted 7 lines
virtio and related qemu overhead: 8.2%.
Quoted 3 lines
Quoted 3 lines
25278 1.5214 vmlinux-2.6.31-rc5-autokern1 native_write_msr_safe 12278 0.7390 vmlinux-2.6.31-rc5-autokern1 native_read_msr_safeThis will be reduced to if we move virtio to kernel context.
Are there plans to move that to kernel for disk, too?
Quoted 11 lines
Quoted 3 lines
Quoted 3 lines
12380 0.7451 vmlinux-2.6.31-rc5-autokern1 native_set_debugreg 3550 0.2137 vmlinux-2.6.31-rc5-autokern1 native_get_debugregA lot less than before, but still annoying.
Quoted 3 lines
Quoted 3 lines
4631 0.2787 vmlinux-2.6.31-rc5-autokern1
mwait_idleidle=halt may improve this, mwait is slow.
I can try idle-halt on the host. I actually assumed it would be using that, but I'll check.
Thanks,
-Andrew
Quoted 9 lines · Andrew Theurer
Quoted 1 line
How does it compare to the other hypervisor now?
My original results for other hypervisor were a little inaccurate. They mistakenly used 2 vcpu guests. New runs with 1 vcpu guests (as used in kvm) have slightly lower CPU utilization. Anyway, here's the breakdown:
CPU percent more CPU kvm-master/qemu-kvm-87: 50.15 78% kvm-next/qemu-kvm-87: 37.73 34%
Much better, though still a lot of work to do.
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines
Quoted 2 lines
25278 1.5214 vmlinux-2.6.31-rc5-autokern1 native_write_msr_safe 12278 0.7390 vmlinux-2.6.31-rc5-autokern1 native_read_msr_safeThis will be reduced to if we move virtio to kernel context.
Are there plans to move that to kernel for disk, too?
We don't know if disk or net contributed to this. If it turns out that vhost-blk makes sense, we'll do it.
Signature · 1 line
error compiling committee.c: too many arguments to function