• Xiao Guangrong's avatar
    KVM: MMU: fast invalidate all pages · 5304b8d3
    Xiao Guangrong authored
    The current kvm_mmu_zap_all is really slow - it is holding mmu-lock to
    walk and zap all shadow pages one by one, also it need to zap all guest
    page's rmap and all shadow page's parent spte list. Particularly, things
    become worse if guest uses more memory or vcpus. It is not good for
    scalability
    
    In this patch, we introduce a faster way to invalidate all shadow pages.
    KVM maintains a global mmu invalid generation-number which is stored in
    kvm->arch.mmu_valid_gen and every shadow page stores the current global
    generation-number into sp->mmu_valid_gen when it is created
    
    When KVM need zap all shadow pages sptes, it just simply increase the
    global generation-number then reload root shadow pages on all vcpus.
    Vcpu will create a new shadow page table according to current kvm's
    generation-number. It ensures the old pages are not used any more.
    Then the obsolete pages (sp->mmu_valid_gen != kvm->arch.mmu_valid_gen)
    are zapped by using lock-break technique
    Signed-off-by: default avatarXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
    Reviewed-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
    5304b8d3
mmu.c 107 KB