|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 0/4] Expose HW APIC virtualization support to HVM guests
Version 2:
* Added ability to specify hypervisor CPUID leaves in config file (this requires
new sysctl)
* Use 2 bits to indicate what is supported --- one for APIC memory access and
the
other for x2APIC. Still not sure whether virtual interrupt delivery should be
exposed as well.
HVM guests running on HW that supports HW APIC virtualization features
(APIC-register virtualization, virtual interrupt delivery, etc) may
want to use APIC instead of hvm_pirqs. Since we are not guaranteed to
have these features on VMX (for example, there is a boot option to
turn it off) and there is no such support on SVM we need to make the
guest aware that its APIC accesses may not be so bad.
CPUID seems to be a good way to provide this info to the guest.
Having a guest switch to APIC shows fairly good impact on number of
VMEXITs. For example, with a pass-through NIC, netperf sees almost
half as many. Here are results for 'xentrace -e 0x00083fff -c 2 -D -T 2'
(The guest here essentially turned off XENFEAT_hvm_pirqs but we may
want to use APIC for MSI interrupts only and leave pirqs for gsi).
[root@ovs105 virt]# cat orig |xentrace_format ~/xen/tools/xentrace/formats |
awk '{print $5}' | sort | uniq -c
94 cpu_change
13944 HLT
26341 INJ_VIRQ
12054 INTR
30784 INTR_WINDOW
10126 TRAP
124783 VMENTRY
124782 VMEXIT
59217 VMMCALL
35 wrap_buffer
[root@ovs105 virt]# cat apicv |xentrace_format ~/xen/tools/xentrace/formats
| awk '{print $5}' | sort | uniq -c
49 cpu_change
16157 HLT
31 INJ_VIRQ
10652 INTR
38 INTR_WINDOW
10 NPF
10286 TRAP
71269 VMENTRY
71269 VMEXIT
34129 VMMCALL
15 wrap_buffer
The difference is even larger when the guest is busy.
These results are in line with what has been reported for KVM. For example
http://events.linuxfoundation.org/sites/events/files/cojp13_natapov.pdf
http://www.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/2012-lpc-virt-intel-vt-feat-nakajima.pdf
I am also not sure whether (cpu_has_vmx_apic_reg_virt &
cpu_has_vmx_virtualize_x2apic_mode) is sufficient to declare full HW
APIC support to a guest. The tests show ~95K VMEXITs when virtual
interrupt delivery and posted interrupts are turned off so there
appears to still be some benefit. I suppose we can use another CPUID
bit for these two (although I am not particularly eager to do this).
Boris Ostrovsky (4):
xen/libxc: Allow changes to hypervisor CPUID leaf from config file
x86/hvm: Revert 80ecb40362365ba77e68fc609de8bd3b7208ae19
x86/hvm: Add HVM-specific hypervisor CPUID leaf
x86/hvm: Indicate avaliability of HW support of APIC virtualization
to HVM guests
tools/libxc/xc_cpuid_x86.c | 23 ++++++++++++++++++++++-
tools/libxc/xc_misc.c | 18 ++++++++++++++++++
tools/libxc/xenctrl.h | 2 ++
xen/arch/x86/domain.c | 19 ++++++++++++++++---
xen/arch/x86/hvm/hvm.c | 16 ++++++++++++++++
xen/arch/x86/hvm/vmx/vmx.c | 12 ++++++++++++
xen/arch/x86/sysctl.c | 17 +++++++++++++++++
xen/arch/x86/traps.c | 18 +++++++++---------
xen/include/asm-x86/domain.h | 7 +++++++
xen/include/asm-x86/hvm/hvm.h | 7 +++++++
xen/include/public/arch-x86/cpuid.h | 10 ++++++++++
xen/include/public/sysctl.h | 18 ++++++++++++++++++
12 files changed, 154 insertions(+), 13 deletions(-)
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |