[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1432983566-15773-1-git-send-email-guangrong.xiao@linux.intel.com>
Date: Sat, 30 May 2015 18:59:11 +0800
From: Xiao Guangrong <guangrong.xiao@...ux.intel.com>
To: pbonzini@...hat.com
Cc: gleb@...nel.org, mtosatti@...hat.com, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org,
Xiao Guangrong <guangrong.xiao@...ux.intel.com>
Subject: [PATCH 00/15] KVM: x86: fully implement vMTRR
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 linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists