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 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html