• David Matlack's avatar
    KVM: selftests: Introduce access_tracking_perf_test · c33e05d9
    David Matlack authored
    This test measures the performance effects of KVM's access tracking.
    Access tracking is driven by the MMU notifiers test_young, clear_young,
    and clear_flush_young. These notifiers do not have a direct userspace
    API, however the clear_young notifier can be triggered by marking a
    pages as idle in /sys/kernel/mm/page_idle/bitmap. This test leverages
    that mechanism to enable access tracking on guest memory.
    
    To measure performance this test runs a VM with a configurable number of
    vCPUs that each touch every page in disjoint regions of memory.
    Performance is measured in the time it takes all vCPUs to finish
    touching their predefined region.
    
    Example invocation:
    
      $ ./access_tracking_perf_test -v 8
      Testing guest mode: PA-bits:ANY, VA-bits:48,  4K pages
      guest physical test memory offset: 0xffdfffff000
    
      Populating memory             : 1.337752570s
      Writing to populated memory   : 0.010177640s
      Reading from populated memory : 0.009548239s
      Mark memory idle              : 23.973131748s
      Writing to idle memory        : 0.063584496s
      Mark memory idle              : 24.924652964s
      Reading from idle memory      : 0.062042814s
    
    Breaking down the results:
    
     * "Populating memory": The time it takes for all vCPUs to perform the
       first write to every page in their region.
    
     * "Writing to populated memory" / "Reading from populated memory": The
       time it takes for all vCPUs to write and read to every page in their
       region after it has been populated. This serves as a control for the
       later results.
    
     * "Mark memory idle": The time it takes for every vCPU to mark every
       page in their region as idle through page_idle.
    
     * "Writing to idle memory" / "Reading from idle memory": The time it
       takes for all vCPUs to write and read to every page in their region
       after it has been marked idle.
    
    This test should be portable across architectures but it is only enabled
    for x86_64 since that's all I have tested.
    Reviewed-by: default avatarBen Gardon <bgardon@google.com>
    Signed-off-by: default avatarDavid Matlack <dmatlack@google.com>
    Message-Id: <20210713220957.3493520-7-dmatlack@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    c33e05d9
access_tracking_perf_test.c 11.8 KB