mbox series

[v4,0/9] KVM: selftests: Test the consistency of the PMU's CPUID and its features

Message ID 20230911114347.85882-1-cloudliang@tencent.com (mailing list archive)
Headers show
Series KVM: selftests: Test the consistency of the PMU's CPUID and its features | expand

Message

Jinrong Liang Sept. 11, 2023, 11:43 a.m. UTC
Hi,

The KVM selftests show advantages over KUT in terms of finding defects through
flexible and varied guest settings from the KVM user space.

This patchset tests whether the Intel vPMU works properly with different Intel
CPUID.0xA configurations. It also provides test scaffolding and a sufficient
number of PMU test cases to subsequently offer adequate code coverage of AMD
vPMU or Intel complex features, such as LBR or PEBS, in selftests.

These patches have been tested and have passed all test cases. AMD related tests
will be completed in the future, please consider merge these patches before that.

Any feedback or suggestions are greatly appreciated.

Sincerely,
Jinrong Liang

Changelog:

v4:
- Rebased to e2013f46ee2e(tag: kvm-x86-next-2023.08.25)
- Separate AMD-related tests.
- Moved static arrays to a new file lib/pmu.c and used more descriptive names
  like intel_pmu_arch_events, intel_pmu_fixed_pmc_events, and
  amd_pmu_arch_events. (Sean)
- Clean up pmu_event_filter_test.c by including pmu.h and removing
  unnecessary macros.
- Modified the "anti-feature" framework to extend this_pmu_has() and
  kvm_pmu_has() functions. (Sean)
- Refactor guest_measure_loop() function to simplify logic and improve
  readability. (Sean)
- Refactor guest_wr_and_rd_msrs() function to simplify logic and improve
  readability. (Sean)
- Use GUEST_ASSERT_EQ() directly instead of passing the counter to ucall and
  back to the host. (Sean)
- Refactor test_intel_oob_fixed_ctr() test method. (Sean)
- Avoid using half-baked helpers and optimize the code structure. (Sean)
- Update variable names for better readability and consistency. (Sean)
- Rename functions to better reflect their purpose. (Sean)

v3:
https://lore.kernel.org/kvm/20230814115108.45741-1-cloudliang@tencent.com/T/

Jinrong Liang (9):
  KVM: selftests: Add vcpu_set_cpuid_property() to set properties
  KVM: selftests: Extend this_pmu_has() and kvm_pmu_has() to check arch
    events
  KVM: selftests: Add pmu.h for PMU events and common masks
  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: Test Intel supported fixed counters bit mask
  KVM: selftests: Test consistency of PMU MSRs with Intel PMU version

 tools/testing/selftests/kvm/Makefile          |   2 +
 tools/testing/selftests/kvm/include/pmu.h     |  96 ++++
 .../selftests/kvm/include/x86_64/processor.h  |  42 +-
 tools/testing/selftests/kvm/lib/pmu.c         |  38 ++
 .../selftests/kvm/lib/x86_64/processor.c      |  14 +
 .../selftests/kvm/x86_64/pmu_counters_test.c  | 431 ++++++++++++++++++
 .../kvm/x86_64/pmu_event_filter_test.c        |  34 +-
 7 files changed, 623 insertions(+), 34 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: e2013f46ee2e721567783557c301e5c91d0b74ff

Comments

Jinrong Liang Oct. 11, 2023, 8:32 a.m. UTC | #1
Gentle ping.

Jinrong Liang <ljr.kernel@gmail.com> 于2023年9月11日周一 19:44写道:
>
> Hi,
>
> The KVM selftests show advantages over KUT in terms of finding defects through
> flexible and varied guest settings from the KVM user space.
>
> This patchset tests whether the Intel vPMU works properly with different Intel
> CPUID.0xA configurations. It also provides test scaffolding and a sufficient
> number of PMU test cases to subsequently offer adequate code coverage of AMD
> vPMU or Intel complex features, such as LBR or PEBS, in selftests.
>
> These patches have been tested and have passed all test cases. AMD related tests
> will be completed in the future, please consider merge these patches before that.
>
> Any feedback or suggestions are greatly appreciated.
>
> Sincerely,
> Jinrong Liang
>
> Changelog:
>
> v4:
> - Rebased to e2013f46ee2e(tag: kvm-x86-next-2023.08.25)
> - Separate AMD-related tests.
> - Moved static arrays to a new file lib/pmu.c and used more descriptive names
>   like intel_pmu_arch_events, intel_pmu_fixed_pmc_events, and
>   amd_pmu_arch_events. (Sean)
> - Clean up pmu_event_filter_test.c by including pmu.h and removing
>   unnecessary macros.
> - Modified the "anti-feature" framework to extend this_pmu_has() and
>   kvm_pmu_has() functions. (Sean)
> - Refactor guest_measure_loop() function to simplify logic and improve
>   readability. (Sean)
> - Refactor guest_wr_and_rd_msrs() function to simplify logic and improve
>   readability. (Sean)
> - Use GUEST_ASSERT_EQ() directly instead of passing the counter to ucall and
>   back to the host. (Sean)
> - Refactor test_intel_oob_fixed_ctr() test method. (Sean)
> - Avoid using half-baked helpers and optimize the code structure. (Sean)
> - Update variable names for better readability and consistency. (Sean)
> - Rename functions to better reflect their purpose. (Sean)
>
> v3:
> https://lore.kernel.org/kvm/20230814115108.45741-1-cloudliang@tencent.com/T/
>
> Jinrong Liang (9):
>   KVM: selftests: Add vcpu_set_cpuid_property() to set properties
>   KVM: selftests: Extend this_pmu_has() and kvm_pmu_has() to check arch
>     events
>   KVM: selftests: Add pmu.h for PMU events and common masks
>   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: Test Intel supported fixed counters bit mask
>   KVM: selftests: Test consistency of PMU MSRs with Intel PMU version
>
>  tools/testing/selftests/kvm/Makefile          |   2 +
>  tools/testing/selftests/kvm/include/pmu.h     |  96 ++++
>  .../selftests/kvm/include/x86_64/processor.h  |  42 +-
>  tools/testing/selftests/kvm/lib/pmu.c         |  38 ++
>  .../selftests/kvm/lib/x86_64/processor.c      |  14 +
>  .../selftests/kvm/x86_64/pmu_counters_test.c  | 431 ++++++++++++++++++
>  .../kvm/x86_64/pmu_event_filter_test.c        |  34 +-
>  7 files changed, 623 insertions(+), 34 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: e2013f46ee2e721567783557c301e5c91d0b74ff
> --
> 2.39.3
>
Sean Christopherson Oct. 20, 2023, 12:28 a.m. UTC | #2
On Mon, Sep 11, 2023, Jinrong Liang wrote:
> Jinrong Liang (9):
>   KVM: selftests: Add vcpu_set_cpuid_property() to set properties
>   KVM: selftests: Extend this_pmu_has() and kvm_pmu_has() to check arch
>     events
>   KVM: selftests: Add pmu.h for PMU events and common masks
>   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: Test Intel supported fixed counters bit mask
>   KVM: selftests: Test consistency of PMU MSRs with Intel PMU version

I've pushed a modified version to 

  https://github.com/sean-jc/linux/branches x86/pmu_counter_tests

which also has fixes for KVM's funky handling of fixed counters.  I'll wait for
you to respond, but will tentatively plan on posting the above branch as v5
some time next week.
Jinrong Liang Oct. 20, 2023, 9:11 a.m. UTC | #3
Sean Christopherson <seanjc@google.com> 于2023年10月20日周五 08:28写道:
>
> On Mon, Sep 11, 2023, Jinrong Liang wrote:
> > Jinrong Liang (9):
> >   KVM: selftests: Add vcpu_set_cpuid_property() to set properties
> >   KVM: selftests: Extend this_pmu_has() and kvm_pmu_has() to check arch
> >     events
> >   KVM: selftests: Add pmu.h for PMU events and common masks
> >   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: Test Intel supported fixed counters bit mask
> >   KVM: selftests: Test consistency of PMU MSRs with Intel PMU version
>
> I've pushed a modified version to
>
>   https://github.com/sean-jc/linux/branches x86/pmu_counter_tests
>
> which also has fixes for KVM's funky handling of fixed counters.  I'll wait for
> you to respond, but will tentatively plan on posting the above branch as v5
> some time next week.

I truly appreciate your time and effort in reviewing my patches and
making the necessary modifications. I've carefully examined the
updated code in the branch you kindly provided:

https://github.com/sean-jc/linux/branches x86/pmu_counter_tests

I completely agree with the changes you made. Please feel free to post
the modified branch as v5 next week. I will add AMD counters related
selftests after this patch set is merged.

Thank you once again for your time and guidance.