[PATCH 00/15] KVM: x86: fully implement vMTRR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux