[v2,3/4] eal/x86: support reading Intel PMU events in runtime
Checks
Commit Message
Add support for reading Intel PMU events in runtime.
Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
---
app/test/test_pmu.c | 2 ++
lib/eal/include/rte_pmu.h | 2 +-
lib/eal/x86/include/meson.build | 1 +
lib/eal/x86/include/rte_pmu_pmc.h | 33 +++++++++++++++++++++++++++++++
4 files changed, 37 insertions(+), 1 deletion(-)
create mode 100644 lib/eal/x86/include/rte_pmu_pmc.h
@@ -15,6 +15,8 @@ test_pmu_read(void)
#if defined(RTE_ARCH_ARM64)
event = rte_pmu_add_event("cpu_cycles");
+#elif defined(RTE_ARCH_X86_64)
+ event = rte_pmu_add_event("cpu-cycles");
#endif
while (tries--)
@@ -20,7 +20,7 @@ extern "C" {
#include <rte_branch_prediction.h>
#include <rte_lcore.h>
#include <rte_log.h>
-#if defined(RTE_ARCH_ARM64)
+#if defined(RTE_ARCH_ARM64) || defined(RTE_ARCH_X86_64)
#include <rte_pmu_pmc.h>
#endif
@@ -9,6 +9,7 @@ arch_headers = files(
'rte_io.h',
'rte_memcpy.h',
'rte_pause.h',
+ 'rte_pmu_pmc.h',
'rte_power_intrinsics.h',
'rte_prefetch.h',
'rte_rtm.h',
new file mode 100644
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2022 Marvell.
+ */
+
+#ifndef _RTE_PMU_PMC_X86_H_
+#define _RTE_PMU_PMC_X86_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rte_common.h>
+
+static __rte_always_inline uint64_t
+rte_pmu_pmc_read(int index)
+{
+ uint32_t high, low;
+
+ asm volatile(
+ "rdpmc\n"
+ : "=a" (low), "=d" (high)
+ : "c" (index)
+ );
+
+ return ((uint64_t)high << 32) | (uint64_t)low;
+}
+#define rte_pmu_pmc_read rte_pmu_pmc_read
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTE_PMU_PMC_X86_H_ */