• Sean Christopherson's avatar
    KVM: selftests: Add test to populate a VM with the max possible guest mem · b58c55d5
    Sean Christopherson authored
    Add a selftest that enables populating a VM with the maximum amount of
    guest memory allowed by the underlying architecture.  Abuse KVM's
    memslots by mapping a single host memory region into multiple memslots so
    that the selftest doesn't require a system with terabytes of RAM.
    
    Default to 512gb of guest memory, which isn't all that interesting, but
    should work on all MMUs and doesn't take an exorbitant amount of memory
    or time.  E.g. testing with ~64tb of guest memory takes the better part
    of an hour, and requires 200gb of memory for KVM's page tables when using
    4kb pages.
    
    To inflicit maximum abuse on KVM' MMU, default to 4kb pages (or whatever
    the not-hugepage size is) in the backing store (memfd).  Use memfd for
    the host backing store to ensure that hugepages are guaranteed when
    requested, and to give the user explicit control of the size of hugepage
    being tested.
    
    By default, spin up as many vCPUs as there are available to the selftest,
    and distribute the work of dirtying each 4kb chunk of memory across all
    vCPUs.  Dirtying guest memory forces KVM to populate its page tables, and
    also forces KVM to write back accessed/dirty information to struct page
    when the guest memory is freed.
    
    On x86, perform two passes with a MMU context reset between each pass to
    coerce KVM into dropping all references to the MMU root, e.g. to emulate
    a vCPU dropping the last reference.  Perform both passes and all
    rendezvous on all architectures in the hope that arm64 and s390x can gain
    similar shenanigans in the future.
    
    Measure and report the duration of each operation, which is helpful not
    only to verify the test is working as intended, but also to easily
    evaluate the performance differences different page sizes.
    
    Provide command line options to limit the amount of guest memory, set the
    size of each slot (i.e. of the host memory region), set the number of
    vCPUs, and to enable usage of hugepages.
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20220226001546.360188-29-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    b58c55d5
max_guest_memory_test.c 7.73 KB