From: Sean Christopherson <seanjc@google.com>
To: Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Kan Liang <kan.liang@linux.intel.com>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Jim Mattson <jmattson@google.com>,
Jinrong Liang <cloudliang@tencent.com>,
Aaron Lewis <aaronlewis@google.com>,
Like Xu <likexu@tencent.com>
Subject: [PATCH v10 00/29] KVM: x86/pmu: selftests: Fixes and new tests
Date: Tue, 9 Jan 2024 15:02:20 -0800 [thread overview]
Message-ID: <20240109230250.424295-1-seanjc@google.com> (raw)
Knock wood, _this_ is the final of fixes and tests for PMU counters. New
in v10 is a small refactor to treat FIXED as a value, not a flag, when
emulating RDPMC. Everything else is the same as v9 (although rebased, but
there were no conflicts).
v10:
- Collect review. [Dapeng]
- Treat the FIXED type in RDPMC's ECX as a value, not a flag. [Jim]
v9:
- https://lore.kernel.org/all/20231202000417.922113-1-seanjc@google.com
- Collect reviews. [Dapeng, Kan]
- Fix a 63:31 => 63:32 typo in a changelog. [Dapeng]
- Actually check that forced emulation is enabled before trying to force
emulation on RDPMC. [Jinrong]
- Fix the aformentioned priority inversion issue.
- Completely drop "support" for fast RDPMC, in quotes because KVM doesn't
actually support RDPMC for non-architectural PMUs. I had left the code
in v8 because I didn't fully grok what the early emulator check was
doing, i.e. wasn't 100% confident it was dead code.
v8:
- https://lore.kernel.org/all/20231110021306.1269082-1-seanjc@google.com
- Collect reviews. [Jim, Dapeng, Kan]
- Tweak names for the RDPMC flags in the selftests #defines.
- Get the event selectors used to virtualize fixed straight from perf
instead of hardcoding the (wrong) selectors in KVM. [Kan]
- Rename an "eventsel" field to "event" for a patch that gets blasted
away in the end anyways. [Jim]
- Add patches to fix RDPMC emulation and to test the behavior on Intel.
I spot tested on AMD and spent ~30 minutes trying to squeeze in the
bare minimum AMD support, but the PMU implementations between Intel
and AMD are juuuust different enough to make adding AMD support non-
trivial, and this series is already way too big.
v7:
- https://lore.kernel.org/all/20231108003135.546002-1-seanjc@google.com
- Drop patches that unnecessarily sanitized supported CPUID. [Jim]
- Purge the array of architectural event encodings. [Jim, Dapeng]
- Clean up pmu.h to remove useless macros, and make it easier to use the
new macros. [Jim]
- Port more of pmu_event_filter_test.c to pmu.h macros. [Jim, Jinrong]
- Clean up test comments and error messages. [Jim]
- Sanity check the value provided to vcpu_set_cpuid_property(). [Jim]
v6:
- https://lore.kernel.org/all/20231104000239.367005-1-seanjc@google.com
- Test LLC references/misses with CFLUSH{OPT}. [Jim]
- Make the tests play nice without PERF_CAPABILITIES. [Mingwei]
- Don't squash eventsels that happen to match an unsupported arch event. [Kan]
- Test PMC counters with forced emulation (don't ask how long it took me to
figure out how to read integer module params).
v5: https://lore.kernel.org/all/20231024002633.2540714-1-seanjc@google.com
v4: https://lore.kernel.org/all/20230911114347.85882-1-cloudliang@tencent.com
v3: https://lore.kernel.org/kvm/20230814115108.45741-1-cloudliang@tencent.com
Jinrong Liang (7):
KVM: selftests: Add vcpu_set_cpuid_property() to set properties
KVM: selftests: Add pmu.h and lib/pmu.c for common PMU assets
KVM: selftests: Test Intel PMU architectural events on gp counters
KVM: selftests: Test Intel PMU architectural events on fixed counters
KVM: selftests: Test consistency of CPUID with num of gp counters
KVM: selftests: Test consistency of CPUID with num of fixed counters
KVM: selftests: Add functional test for Intel's fixed PMU counters
Sean Christopherson (22):
KVM: x86/pmu: Always treat Fixed counters as available when supported
KVM: x86/pmu: Allow programming events that match unsupported arch
events
KVM: x86/pmu: Remove KVM's enumeration of Intel's architectural
encodings
KVM: x86/pmu: Setup fixed counters' eventsel during PMU initialization
KVM: x86/pmu: Get eventsel for fixed counters from perf
KVM: x86/pmu: Don't ignore bits 31:30 for RDPMC index on AMD
KVM: x86/pmu: Prioritize VMX interception over #GP on RDPMC due to bad
index
KVM: x86/pmu: Apply "fast" RDPMC only to Intel PMUs
KVM: x86/pmu: Disallow "fast" RDPMC for architectural Intel PMUs
KVM: x86/pmu: Treat "fixed" PMU type in RDPMC as index as a value, not
flag
KVM: x86/pmu: Explicitly check for RDPMC of unsupported Intel PMC
types
KVM: selftests: Drop the "name" param from KVM_X86_PMU_FEATURE()
KVM: selftests: Extend {kvm,this}_pmu_has() to support fixed counters
KVM: selftests: Expand PMU counters test to verify LLC events
KVM: selftests: Add a helper to query if the PMU module param is
enabled
KVM: selftests: Add helpers to read integer module params
KVM: selftests: Query module param to detect FEP in MSR filtering test
KVM: selftests: Move KVM_FEP macro into common library header
KVM: selftests: Test PMC virtualization with forced emulation
KVM: selftests: Add a forced emulation variation of KVM_ASM_SAFE()
KVM: selftests: Add helpers for safe and safe+forced RDMSR, RDPMC, and
XGETBV
KVM: selftests: Extend PMU counters test to validate RDPMC after WRMSR
arch/x86/include/asm/kvm-x86-pmu-ops.h | 3 +-
arch/x86/kvm/emulate.c | 2 +-
arch/x86/kvm/kvm_emulate.h | 2 +-
arch/x86/kvm/pmu.c | 20 +-
arch/x86/kvm/pmu.h | 5 +-
arch/x86/kvm/svm/pmu.c | 17 +-
arch/x86/kvm/vmx/pmu_intel.c | 178 +++--
arch/x86/kvm/x86.c | 9 +-
tools/testing/selftests/kvm/Makefile | 2 +
.../selftests/kvm/include/kvm_util_base.h | 4 +
tools/testing/selftests/kvm/include/pmu.h | 97 +++
.../selftests/kvm/include/x86_64/processor.h | 148 ++++-
tools/testing/selftests/kvm/lib/kvm_util.c | 62 +-
tools/testing/selftests/kvm/lib/pmu.c | 31 +
.../selftests/kvm/lib/x86_64/processor.c | 15 +-
.../selftests/kvm/x86_64/pmu_counters_test.c | 617 ++++++++++++++++++
.../kvm/x86_64/pmu_event_filter_test.c | 143 ++--
.../smaller_maxphyaddr_emulation_test.c | 2 +-
.../kvm/x86_64/userspace_msr_exit_test.c | 29 +-
.../selftests/kvm/x86_64/vmx_pmu_caps_test.c | 2 +-
20 files changed, 1097 insertions(+), 291 deletions(-)
create mode 100644 tools/testing/selftests/kvm/include/pmu.h
create mode 100644 tools/testing/selftests/kvm/lib/pmu.c
create mode 100644 tools/testing/selftests/kvm/x86_64/pmu_counters_test.c
base-commit: 1c6d984f523f67ecfad1083bb04c55d91977bb15
--
2.43.0.472.g3155946c3a-goog
next reply other threads:[~2024-01-09 23:02 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-09 23:02 Sean Christopherson [this message]
2024-01-09 23:02 ` [PATCH v10 01/29] KVM: x86/pmu: Always treat Fixed counters as available when supported Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 02/29] KVM: x86/pmu: Allow programming events that match unsupported arch events Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 03/29] KVM: x86/pmu: Remove KVM's enumeration of Intel's architectural encodings Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 04/29] KVM: x86/pmu: Setup fixed counters' eventsel during PMU initialization Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 05/29] KVM: x86/pmu: Get eventsel for fixed counters from perf Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 06/29] KVM: x86/pmu: Don't ignore bits 31:30 for RDPMC index on AMD Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 07/29] KVM: x86/pmu: Prioritize VMX interception over #GP on RDPMC due to bad index Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 08/29] KVM: x86/pmu: Apply "fast" RDPMC only to Intel PMUs Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 09/29] KVM: x86/pmu: Disallow "fast" RDPMC for architectural " Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 10/29] KVM: x86/pmu: Treat "fixed" PMU type in RDPMC as index as a value, not flag Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 11/29] KVM: x86/pmu: Explicitly check for RDPMC of unsupported Intel PMC types Sean Christopherson
2024-01-12 3:50 ` Mi, Dapeng
2024-01-09 23:02 ` [PATCH v10 12/29] KVM: selftests: Add vcpu_set_cpuid_property() to set properties Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 13/29] KVM: selftests: Drop the "name" param from KVM_X86_PMU_FEATURE() Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 14/29] KVM: selftests: Extend {kvm,this}_pmu_has() to support fixed counters Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 15/29] KVM: selftests: Add pmu.h and lib/pmu.c for common PMU assets Sean Christopherson
2024-01-10 9:21 ` Andrew Jones
2024-01-10 13:58 ` Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 16/29] KVM: selftests: Test Intel PMU architectural events on gp counters Sean Christopherson
2024-01-12 9:14 ` Mi, Dapeng
2024-01-12 21:37 ` Sean Christopherson
2024-01-15 2:03 ` Mi, Dapeng
2024-01-30 23:27 ` Sean Christopherson
2024-01-31 2:11 ` Mi, Dapeng
2024-01-31 15:31 ` Sean Christopherson
2024-02-01 1:51 ` Mi, Dapeng
2024-01-09 23:02 ` [PATCH v10 17/29] KVM: selftests: Test Intel PMU architectural events on fixed counters Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 18/29] KVM: selftests: Test consistency of CPUID with num of gp counters Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 19/29] KVM: selftests: Test consistency of CPUID with num of fixed counters Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 20/29] KVM: selftests: Add functional test for Intel's fixed PMU counters Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 21/29] KVM: selftests: Expand PMU counters test to verify LLC events Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 22/29] KVM: selftests: Add a helper to query if the PMU module param is enabled Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 23/29] KVM: selftests: Add helpers to read integer module params Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 24/29] KVM: selftests: Query module param to detect FEP in MSR filtering test Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 25/29] KVM: selftests: Move KVM_FEP macro into common library header Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 26/29] KVM: selftests: Test PMC virtualization with forced emulation Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 27/29] KVM: selftests: Add a forced emulation variation of KVM_ASM_SAFE() Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 28/29] KVM: selftests: Add helpers for safe and safe+forced RDMSR, RDPMC, and XGETBV Sean Christopherson
2024-01-09 23:02 ` [PATCH v10 29/29] KVM: selftests: Extend PMU counters test to validate RDPMC after WRMSR Sean Christopherson
2024-01-12 9:17 ` [PATCH v10 00/29] KVM: x86/pmu: selftests: Fixes and new tests Mi, Dapeng
2024-01-31 0:59 ` Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240109230250.424295-1-seanjc@google.com \
--to=seanjc@google.com \
--cc=aaronlewis@google.com \
--cc=cloudliang@tencent.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=jmattson@google.com \
--cc=kan.liang@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=likexu@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox