lkml.org 
[lkml]   [2020]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[RFC V2 0/9] x86/mmu:Introduce parallel memory virtualization to boost performance
    Date
    From: Yulei Zhang <yulei.kernel@gmail.com>

    Currently in KVM memory virtulization we relay on mmu_lock to
    synchronize the memory mapping update, which make vCPUs work
    in serialize mode and slow down the execution, especially after
    migration to do substantial memory mapping will cause visible
    performance drop, and it can get worse if guest has more vCPU
    numbers and memories.

    The idea we present in this patch set is to mitigate the issue
    with pre-constructed memory mapping table. We will fast pin the
    guest memory to build up a global memory mapping table according
    to the guest memslots changes and apply it to cr3, so that after
    guest starts up all the vCPUs would be able to update the memory
    simultaneously without page fault exception, thus the performance
    improvement is expected.

    We use memory dirty pattern workload to test the initial patch
    set and get positive result even with huge page enabled. For example,
    we create guest with 32 vCPUs and 64G memories, and let the vcpus
    dirty the entire memory region concurrently, as the initial patch
    eliminate the overhead of mmu_lock, in 2M/1G huge page mode we would
    get the job done in about 50% faster.

    We only validate this feature on Intel x86 platform. And as Ben
    pointed out in RFC V1, so far we disable the SMM for resource
    consideration, drop the mmu notification as in this case the
    memory is pinned.

    V1->V2:
    * Rebase the code to kernel version 5.9.0-rc1.

    Yulei Zhang (9):
    Introduce new fields in kvm_arch/vcpu_arch struct for direct build EPT
    support
    Introduce page table population function for direct build EPT feature
    Introduce page table remove function for direct build EPT feature
    Add release function for direct build ept when guest VM exit
    Modify the page fault path to meet the direct build EPT requirement
    Apply the direct build EPT according to the memory slots change
    Add migration support when using direct build EPT
    Introduce kvm module parameter global_tdp to turn on the direct build
    EPT mode
    Handle certain mmu exposed functions properly while turn on direct
    build EPT mode

    arch/mips/kvm/mips.c | 13 +
    arch/powerpc/kvm/powerpc.c | 13 +
    arch/s390/kvm/kvm-s390.c | 13 +
    arch/x86/include/asm/kvm_host.h | 13 +-
    arch/x86/kvm/mmu/mmu.c | 533 ++++++++++++++++++++++++++++++--
    arch/x86/kvm/svm/svm.c | 2 +-
    arch/x86/kvm/vmx/vmx.c | 7 +-
    arch/x86/kvm/x86.c | 55 ++--
    include/linux/kvm_host.h | 7 +-
    virt/kvm/kvm_main.c | 43 ++-
    10 files changed, 639 insertions(+), 60 deletions(-)

    --
    2.17.1

    \
     
     \ /
      Last update: 2020-09-01 14:06    [W:3.499 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site