mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
KVM: MMU: large page support
Create large pages mappings if the guest PTE's are marked as such and the underlying memory is hugetlbfs backed. If the largepage contains write-protected pages, a large pte is not used. Gives a consistent 2% improvement for data copies on ram mounted filesystem, without NPT/EPT. Anthony measures a 4% improvement on 4-way kernbench, with NPT. Signed-off-by: Marcelo Tosatti <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
This commit is contained in:
parent
2e53d63acb
commit
05da45583d
6 changed files with 262 additions and 32 deletions
|
|
@ -39,6 +39,13 @@
|
|||
#define INVALID_PAGE (~(hpa_t)0)
|
||||
#define UNMAPPED_GVA (~(gpa_t)0)
|
||||
|
||||
/* shadow tables are PAE even on non-PAE hosts */
|
||||
#define KVM_HPAGE_SHIFT 21
|
||||
#define KVM_HPAGE_SIZE (1UL << KVM_HPAGE_SHIFT)
|
||||
#define KVM_HPAGE_MASK (~(KVM_HPAGE_SIZE - 1))
|
||||
|
||||
#define KVM_PAGES_PER_HPAGE (KVM_HPAGE_SIZE / PAGE_SIZE)
|
||||
|
||||
#define DE_VECTOR 0
|
||||
#define UD_VECTOR 6
|
||||
#define NM_VECTOR 7
|
||||
|
|
@ -230,6 +237,7 @@ struct kvm_vcpu_arch {
|
|||
struct {
|
||||
gfn_t gfn; /* presumed gfn during guest pte update */
|
||||
struct page *page; /* page corresponding to that gfn */
|
||||
int largepage;
|
||||
} update_pte;
|
||||
|
||||
struct i387_fxsave_struct host_fx_image;
|
||||
|
|
@ -307,6 +315,7 @@ struct kvm_vm_stat {
|
|||
u32 mmu_recycled;
|
||||
u32 mmu_cache_miss;
|
||||
u32 remote_tlb_flush;
|
||||
u32 lpages;
|
||||
};
|
||||
|
||||
struct kvm_vcpu_stat {
|
||||
|
|
|
|||
Loading…
Reference in a new issue