Messages in this thread |  | | From | Xiao Guangrong <> | Subject | [PATCH 00/15] KVM: x86: fully implement vMTRR | Date | Sat, 30 May 2015 18:59:11 +0800 |
| |
Currently guest MTRR is completely prohibited if cache snoop is supported on IOMMU (!noncoherent_dma) and host does the emulation based on the knowledge from host side, however, host side is not the good point to know what the purpose of guest is. A good example is that pass-throughed VGA frame buffer is not always UC as host expected
Besides that, there is a bugs in current code if noncoherent_dma is detected: KVM still uses hugepage even if the 4K pages in that ranges span between on different memory types and uses the cache type of first page to do memory mapping
This patchset enables full MTRR virtualization and currently only works on Intel EPT architecture
There is the code will be attached in this thread is used to check the effect of this patchset: [12834.843439] __INIT__. [12835.909109] Running in preload MTRR_TYPE_UNCACHABLE 4753900 ns. [12835.915232] Running in MTRR_TYPE_UNCACHABLE 5257522 ns. [12838.083948] Running in preload MTRR_TYPE_WRBACK 13266 ns. [12838.084998] Running in MTRR_TYPE_WRBACK 13099 ns.
There is the kernel compiling test result in guest which has 16 vcpus and 10G memory: before the patchset: 4m48.162s after the patchset: 4m49.014s no performance regression is detected
Xiao Guangrong (15): KVM: x86: move MTRR related code to a separate file KVM: MTRR: handle MSR_MTRRcap in kvm_mtrr_get_msr KVM: MTRR: remove mtrr_state.have_fixed KVM: MTRR: exactly define the size of variable MTRRs KVM: MTRR: clean up mtrr default type KVM: MTRR: do not split 64 bits MSR content KVM: MTRR: improve kvm_mtrr_get_guest_memory_type KVM: MTRR: introduce fixed_mtrr_segment table KVM: MTRR: introduce var_mtrr_range KVM: MTRR: sort variable MTRRs KVM: MTRR: introduce fixed_mtrr_addr_* functions KVM: MTRR: introduce mtrr_for_each_mem_type KVM: MTRR: simplify kvm_mtrr_get_guest_memory_type KVM: MTRR: do not map huage page for non-consistent range KVM: VMX: fully implement guest MTRR virtualization
arch/x86/include/asm/kvm_host.h | 29 +- arch/x86/kvm/Makefile | 2 +- arch/x86/kvm/mmu.c | 126 ++------ arch/x86/kvm/mtrr.c | 671 ++++++++++++++++++++++++++++++++++++++++ arch/x86/kvm/svm.c | 2 +- arch/x86/kvm/vmx.c | 28 +- arch/x86/kvm/x86.c | 219 +------------ arch/x86/kvm/x86.h | 5 + 8 files changed, 731 insertions(+), 351 deletions(-) create mode 100644 arch/x86/kvm/mtrr.c
-- 2.1.0
|  |