mbox series

[v2,0/2] KVM: Split huge pages mapped by the TDP MMU on fault

Message ID 20221019234050.3919566-1-dmatlack@google.com (mailing list archive)
Headers show
Series KVM: Split huge pages mapped by the TDP MMU on fault | expand

Message

David Matlack Oct. 19, 2022, 11:40 p.m. UTC
Now that the TDP MMU has a mechanism to split huge pages, it is trivial
to use it in the fault path whenever a huge page needs to be replaced
with a mapping at a lower level.

The main beneficiary of this change is NX HugePages, which now no longer
unmaps huge pages when instructions are fetched from them. This means
that the VM does not have to take faults when accessing other parts of
the huge page (for whatever reason). The other beneficiary of this
change is workloads that set eage_page_split=N, which can be desirable
for read-heavy workloads. The performance impacts are discussed in more
detail in PATCH 3.

To validate the performance impact on NX HugePages, this series
introduces a new selftest that leverages perf_test_util.c to execute
from a given region of memory across a variable number of vCPUS.

This new selftest is short but contains a lot of duplicate code with
access_tracking_perf_test.c, and the changes to perf_test_util.c to
support execution are a bit gross. I'd be fine with deferring this test
to a later series, but I want to include it here to demonstrate how I
tested the TDP MMU patch.

Tested: Ran all kvm-unit-tests and KVM selftests.

Cc: Mingwei Zhang <mizhang@google.com>

v2:
 - Rebased on top of Sean's precise NX series
   (https://lore.kernel.org/kvm/20221019165618.927057-1-seanjc@google.com/)

David Matlack (2):
  KVM: selftests: Introduce a selftest to measure execution performance
  KVM: x86/mmu: Split huge pages mapped by the TDP MMU on fault

 arch/x86/kvm/mmu/tdp_mmu.c                    |  72 ++++---
 tools/testing/selftests/kvm/.gitignore        |   1 +
 tools/testing/selftests/kvm/Makefile          |   1 +
 .../testing/selftests/kvm/execute_perf_test.c | 185 ++++++++++++++++++
 .../selftests/kvm/include/perf_test_util.h    |   2 +
 .../selftests/kvm/lib/perf_test_util.c        |  25 ++-
 6 files changed, 246 insertions(+), 40 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/execute_perf_test.c


base-commit: e18d6152ff0f41b7f01f9817372022df04e0d354
prerequisite-patch-id: 6ac49676365593be76e374e5954bf496629f6f22
prerequisite-patch-id: 0244295d523e3b3658e1fa3a56b7e8604d574e34
prerequisite-patch-id: 0504728c79c7dee21f6692cd884b86be3fb2b618
prerequisite-patch-id: 177194a755adc0088726343fc813eb0cd71205fc
prerequisite-patch-id: 0feb2a75d346d2281c101bec2b9a6b495c85bae4
prerequisite-patch-id: 2bef32f68d262787e2c6de8ae4491abe6b8dd1c3
prerequisite-patch-id: ba643d747ba284b823180729e2070058358172bf
prerequisite-patch-id: 983d17cf1db03290802035b21de80852c6d370c9