From 054aedc0c6d495be4916150dc86f4fd8daf1ef35 Mon Sep 17 00:00:00 2001 From: Xudong Hao Date: Mon, 22 Dec 2025 10:26:37 +0800 Subject: [PATCH] KVM: Add CWF PMU test cases for KVM CWF PMU features: Arch PEBS, Arch PerfMon v6, 3 new fix coutners Signed-off-by: Xudong Hao --- BM/pmu/tests_3fix_counters | 4 ++++ BM/pmu/tests_arch_pebs | 8 ++++++++ BM/pmu/tests_arch_perfmon_v6 | 6 ++++++ KVM/qemu/feature_test.cfg | 21 ++++++++++++++++++++ KVM/qemu/tests/feature_test.py | 36 +++++++++++++++++++++++++++++++++- 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 BM/pmu/tests_3fix_counters create mode 100644 BM/pmu/tests_arch_pebs create mode 100644 BM/pmu/tests_arch_perfmon_v6 diff --git a/BM/pmu/tests_3fix_counters b/BM/pmu/tests_3fix_counters new file mode 100644 index 00000000..a915d986 --- /dev/null +++ b/BM/pmu/tests_3fix_counters @@ -0,0 +1,4 @@ +# This file collects the CWF 3 new Fix counters test cases +pmu_tests.sh -t counting +pmu_tests.sh -t sampling +pmu_tests.sh -t counting_multi diff --git a/BM/pmu/tests_arch_pebs b/BM/pmu/tests_arch_pebs new file mode 100644 index 00000000..bd69b622 --- /dev/null +++ b/BM/pmu/tests_arch_pebs @@ -0,0 +1,8 @@ +# This file collects the ARCH PBES test cases +pmu_tests.sh -t arch_pebs_cpuid +pmu_tests.sh -t arch_pebs_gp_reg_group +pmu_tests.sh -t arch_pebs_xer_group +pmu_tests.sh -t arch_pebs_counter_group +pmu_tests.sh -t arch_pebs_counter_group_stress +pmu_tests.sh -t arch_pebs_gp_counter +pmu_tests.sh -t arch_pebs_basic_group diff --git a/BM/pmu/tests_arch_perfmon_v6 b/BM/pmu/tests_arch_perfmon_v6 new file mode 100644 index 00000000..74b36a84 --- /dev/null +++ b/BM/pmu/tests_arch_perfmon_v6 @@ -0,0 +1,6 @@ +# This file collects the ARCH PerfMon v6 test cases +pmu_tests.sh -t bitmap_6 +pmu_tests.sh -t umask2_cpuid +pmu_tests.sh -t zbit_cpuid +pmu_tests.sh -t umask2 +pmu_tests.sh -t zbit diff --git a/KVM/qemu/feature_test.cfg b/KVM/qemu/feature_test.cfg index 2c351c9c..762b95c9 100644 --- a/KVM/qemu/feature_test.cfg +++ b/KVM/qemu/feature_test.cfg @@ -8,6 +8,27 @@ auto_cpu_model = "no" cpu_model = host variants: + - arch_pebs: + no tdvm + feature_dir_names = "pmu" + disable_parallel_run = yes + pre_command = 'echo 0 > /proc/sys/kernel/nmi_watchdog && modprobe -r kvm_intel && modprobe kvm_intel enable_mediated_pmu=Y' + post_command = 'echo 1 > /proc/sys/kernel/nmi_watchdog && modprobe -r kvm_intel && modprobe kvm_intel' + test_scen = "tests_arch_pebs" + - arch_perfmon_v6: + no tdvm + feature_dir_names = "pmu" + disable_parallel_run = yes + pre_command = 'echo 0 > /proc/sys/kernel/nmi_watchdog && modprobe -r kvm_intel && modprobe kvm_intel enable_mediated_pmu=Y' + post_command = 'echo 1 > /proc/sys/kernel/nmi_watchdog && modprobe -r kvm_intel && modprobe kvm_intel' + test_scen = "tests_arch_perfmon_v6" + - 3_fix_counters: + no tdvm + feature_dir_names = "pmu" + disable_parallel_run = yes + pre_command = 'echo 0 > /proc/sys/kernel/nmi_watchdog && modprobe -r kvm_intel && modprobe kvm_intel enable_mediated_pmu=Y' + post_command = 'echo 1 > /proc/sys/kernel/nmi_watchdog && modprobe -r kvm_intel && modprobe kvm_intel' + test_scen = "tests_3fix_counters" - cmpccxadd: feature_dir_names = "cmpccxadd" - lam: diff --git a/KVM/qemu/tests/feature_test.py b/KVM/qemu/tests/feature_test.py index 4d04f549..f061287c 100644 --- a/KVM/qemu/tests/feature_test.py +++ b/KVM/qemu/tests/feature_test.py @@ -22,6 +22,9 @@ def prepare_test_suite(test, vm_test_path, session): :param vm_test_path: The absolute path of test suite in guest :param session: Guest session """ + if not os.path.exists(os.path.join(vm_test_path, 'Makefile')): + return + if not utils_package.package_install("gcc", session): test.cancel("Failed to install package gcc.") @@ -61,6 +64,29 @@ def avocado_install(test, params, guest_bm_path, vm, session): raise exceptions.TestError("Dependence test tool compile failed.") +def disable_parallel_run(test, session): + """ + Disable parallel execution in guest. + :param test: QEMU test object + :param session: Guest session + """ + conf_file = "/etc/avocado/avocado.conf" + cmd = "ls %s" % conf_file + if session.cmd_status(cmd): + cmd = "mkdir -p /etc/avocado && touch %s" % conf_file + status, output = session.cmd_status_output(cmd) + if status: + test.error("Fail to create config file in guest: %s" % output) + + cmd = "cat %s | grep max_parallel_tasks=1" % conf_file + if session.cmd_status(cmd): + conf_content = "[run]\\nmax_parallel_tasks=1" + cmd = "echo -e '%s' > %s" % (conf_content, conf_file) + status, output = session.cmd_status_output(cmd) + if status: + test.error("Fail to add configurations in guest file: %s" % output) + + def get_test_results(test, output, vm, session): """ Install test framework avocado in guest. @@ -104,6 +130,9 @@ def run(test, params, env): vm.copy_files_to(bm_dir, test_dir) guest_bm_path = os.path.join(test_dir, "BM") avocado_install(test, params, guest_bm_path, vm, session) + vm_config = params.get_boolean("disable_parallel_run") + if vm_config: + disable_parallel_run(test, session) try: for feature_dir_name in feature_dir_names.split(): @@ -112,8 +141,11 @@ def run(test, params, env): cmd_timeout = params.get_numeric("cmd_timeout", 240) if params.get("cmd_timeout"): cmd_timeout = params.get_numeric("cmd_timeout") + cases_file = params.get("test_scen") + if cases_file is None: + cases_file = "tests" #run_cmd = "cd %s && ./runtests -f %s/tests" % (guest_bm_path, feature_dir_name) - run_cmd = "cd %s && ./runtests.py -f %s -t %s/tests" % (guest_bm_path, feature_dir_name, feature_dir_name) + run_cmd = "cd %s && ./runtests.py -f %s -t %s/%s " % (guest_bm_path, feature_dir_name, feature_dir_name, cases_file) s, o = session.cmd_status_output(run_cmd, timeout=cmd_timeout) get_test_results(test, o, vm, session) @@ -129,4 +161,6 @@ def run(test, params, env): test.log.info("Guest feature %s test pass." % feature_dir_name) finally: session.cmd("rm %s -rf" % guest_bm_path, ignore_all_errors=True) + if vm_config: + session.cmd("rm /etc/avocado -rf", ignore_all_errors=True) session.close()