From ac98fb8eb5ebc765737c64972d4b51e1ddd6b0b4 Mon Sep 17 00:00:00 2001 From: Junyi Ye <294572668@qq.com> Date: Fri, 26 Apr 2024 09:59:17 +0800 Subject: [PATCH 1/3] Improve event querying in pfm module. --- include/pmu.h | 2 +- pmu/pfm/core.cpp | 229 +++++++++++++++++++++++++++-------------- pmu/pfm/core.h | 2 + pmu/pfm/pfm.cpp | 72 ++++--------- pmu/pfm/trace.cpp | 1 + pmu/pmu_event_list.cpp | 58 +++++++++-- pmu/pmu_list.cpp | 1 + 7 files changed, 230 insertions(+), 135 deletions(-) diff --git a/include/pmu.h b/include/pmu.h index 92c1c54..45508c3 100644 --- a/include/pmu.h +++ b/include/pmu.h @@ -143,7 +143,7 @@ const char** PmuEventList(enum PmuEventType eventType, unsigned *numEvt); * @param eventList event list * @param numEvt length of event list */ -void PmuEventListFree(const char** eventList, unsigned *numEvt); +void PmuEventListFree(); /** * @brief diff --git a/pmu/pfm/core.cpp b/pmu/pfm/core.cpp index aa7dd54..f00995d 100644 --- a/pmu/pfm/core.cpp +++ b/pmu/pfm/core.cpp @@ -14,15 +14,19 @@ ******************************************************************************/ #include #include -#include -#include "pmu.h" +#include +#include "pmu_event.h" #include "core.h" +#include "common.h" + +using namespace std; +static CHIP_TYPE g_chipType = UNDEFINED_TYPE; const std::unordered_map HIP_A_CORE_PMU_MAP{ { KUNPENG_PMU::HIP_A::CORE::BRANCH_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x5, KUNPENG_PMU::HIP_A::CORE::BRANCH_MISSES } @@ -30,7 +34,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::BUS_CYCLES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x6, KUNPENG_PMU::HIP_A::CORE::BUS_CYCLES } @@ -38,7 +42,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::CACHE_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x3, KUNPENG_PMU::HIP_A::CORE::CACHE_MISSES } @@ -46,7 +50,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::CACHE_REFERENCES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x2, KUNPENG_PMU::HIP_A::CORE::CACHE_REFERENCES } @@ -54,7 +58,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::CPU_CYCLES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x11, KUNPENG_PMU::HIP_A::CORE::CPU_CYCLES } @@ -62,7 +66,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::CYCLES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x11, KUNPENG_PMU::HIP_A::CORE::CYCLES } @@ -70,7 +74,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::INSTRUCTIONS, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x1, KUNPENG_PMU::HIP_A::CORE::INSTRUCTIONS } @@ -78,7 +82,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::STALLED_CYCLES_BACKEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x8, KUNPENG_PMU::HIP_A::CORE::STALLED_CYCLES_BACKEND } @@ -86,7 +90,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::STALLED_CYCLES_FRONTEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x7, KUNPENG_PMU::HIP_A::CORE::STALLED_CYCLES_FRONTEND } @@ -94,7 +98,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1_DCACHE_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10000, KUNPENG_PMU::HIP_A::CORE::L1_DCACHE_LOAD_MISSES } @@ -102,7 +106,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::IDLE_CYCLES_BACKEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x8, KUNPENG_PMU::HIP_A::CORE::IDLE_CYCLES_BACKEND } @@ -110,7 +114,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1_ICACHE_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10001, KUNPENG_PMU::HIP_A::CORE::L1_ICACHE_LOAD_MISSES } @@ -118,7 +122,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::IDLE_CYCLES_FRONTEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x7, KUNPENG_PMU::HIP_A::CORE::IDLE_CYCLES_FRONTEND } @@ -126,7 +130,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1_ICACHE_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x1, KUNPENG_PMU::HIP_A::CORE::L1_ICACHE_LOADS } @@ -134,7 +138,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::LLC_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10002, KUNPENG_PMU::HIP_A::CORE::LLC_LOAD_MISSES } @@ -142,7 +146,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::LLC_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x2, KUNPENG_PMU::HIP_A::CORE::LLC_LOADS } @@ -150,7 +154,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::BRANCH_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10005, KUNPENG_PMU::HIP_A::CORE::BRANCH_LOAD_MISSES } @@ -158,7 +162,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::BRANCH_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x5, KUNPENG_PMU::HIP_A::CORE::BRANCH_LOADS } @@ -166,7 +170,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::DTLB_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10003, KUNPENG_PMU::HIP_A::CORE::DTLB_LOAD_MISSES } @@ -174,7 +178,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::DTLB_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x3, KUNPENG_PMU::HIP_A::CORE::DTLB_LOADS } @@ -182,7 +186,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::ITLB_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10004, KUNPENG_PMU::HIP_A::CORE::ITLB_LOAD_MISSES } @@ -190,7 +194,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::ITLB_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x4, KUNPENG_PMU::HIP_A::CORE::ITLB_LOADS } @@ -198,7 +202,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_RD, { - PERF_TYPE_RAW, + 8, 0x40, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_RD } @@ -206,7 +210,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WR, { - PERF_TYPE_RAW, + 8, 0x41, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WR } @@ -214,7 +218,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_RD, { - PERF_TYPE_RAW, + 8, 0x42, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_RD } @@ -222,7 +226,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_WR, { - PERF_TYPE_RAW, + 8, 0x43, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_WR } @@ -230,7 +234,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_VICTIM, { - PERF_TYPE_RAW, + 8, 0x46, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_VICTIM } @@ -238,7 +242,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_CLEAN, { - PERF_TYPE_RAW, + 8, 0x47, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_CLEAN } @@ -246,7 +250,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_INVAL, { - PERF_TYPE_RAW, + 8, 0x48, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_INVAL } @@ -254,7 +258,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_RD, { - PERF_TYPE_RAW, + 8, 0x4c, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_RD } @@ -262,7 +266,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_WR, { - PERF_TYPE_RAW, + 8, 0x4d, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_WR } @@ -270,7 +274,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_RD, { - PERF_TYPE_RAW, + 8, 0x4e, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_RD } @@ -278,7 +282,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_WR, { - PERF_TYPE_RAW, + 8, 0x4f, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_WR } @@ -286,7 +290,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_RD, { - PERF_TYPE_RAW, + 8, 0x50, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_RD } @@ -294,7 +298,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WR, { - PERF_TYPE_RAW, + 8, 0x51, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WR } @@ -302,7 +306,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_RD, { - PERF_TYPE_RAW, + 8, 0x52, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_RD } @@ -310,7 +314,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_WR, { - PERF_TYPE_RAW, + 8, 0x53, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_WR } @@ -318,7 +322,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_VICTIM, { - PERF_TYPE_RAW, + 8, 0x56, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_VICTIM } @@ -326,7 +330,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_CLEAN, { - PERF_TYPE_RAW, + 8, 0x57, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_CLEAN } @@ -334,7 +338,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_INVAL, { - PERF_TYPE_RAW, + 8, 0x58, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_INVAL } @@ -342,7 +346,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF, { - PERF_TYPE_RAW, + 8, 0x102e, KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF } @@ -350,7 +354,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF_REFILL, { - PERF_TYPE_RAW, + 8, 0x102f, KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF_REFILL } @@ -358,7 +362,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::IQ_IS_EMPTY, { - PERF_TYPE_RAW, + 8, 0x1043, KUNPENG_PMU::HIP_A::CORE::IQ_IS_EMPTY } @@ -366,7 +370,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::IF_IS_STALL, { - PERF_TYPE_RAW, + 8, 0x1044, KUNPENG_PMU::HIP_A::CORE::IF_IS_STALL } @@ -374,7 +378,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::FETCH_BUBBLE, { - PERF_TYPE_RAW, + 8, 0x2014, KUNPENG_PMU::HIP_A::CORE::FETCH_BUBBLE } @@ -382,7 +386,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::PRF_REQ, { - PERF_TYPE_RAW, + 8, 0x6013, KUNPENG_PMU::HIP_A::CORE::PRF_REQ } @@ -390,7 +394,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::HIT_ON_PRF, { - PERF_TYPE_RAW, + 8, 0x6014, KUNPENG_PMU::HIP_A::CORE::HIT_ON_PRF } @@ -398,7 +402,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::EXE_STALL_CYCLE, { - PERF_TYPE_RAW, + 8, 0x7001, KUNPENG_PMU::HIP_A::CORE::EXE_STALL_CYCLE } @@ -406,7 +410,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::MEM_STALL_ANYLOAD, { - PERF_TYPE_RAW, + 8, 0x7004, KUNPENG_PMU::HIP_A::CORE::MEM_STALL_ANYLOAD } @@ -414,7 +418,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L1MISS, { - PERF_TYPE_RAW, + 8, 0x7006, KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L1MISS } @@ -422,7 +426,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L2MISS, { - PERF_TYPE_RAW, + 8, 0x7007, KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L2MISS } @@ -433,7 +437,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::BRANCH_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x5, KUNPENG_PMU::HIP_B::CORE::BRANCH_MISSES } @@ -441,7 +445,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::CACHE_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x3, KUNPENG_PMU::HIP_B::CORE::CACHE_MISSES } @@ -449,7 +453,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::CACHE_REFERENCES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x2, KUNPENG_PMU::HIP_B::CORE::CACHE_REFERENCES } @@ -457,7 +461,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::CPU_CYCLES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x11, KUNPENG_PMU::HIP_B::CORE::CPU_CYCLES } @@ -465,7 +469,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::CYCLES, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x11, KUNPENG_PMU::HIP_B::CORE::CYCLES } @@ -473,7 +477,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::INSTRUCTIONS, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x1, KUNPENG_PMU::HIP_B::CORE::INSTRUCTIONS } @@ -481,7 +485,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::STALLED_CYCLES_BACKEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x8, KUNPENG_PMU::HIP_B::CORE::STALLED_CYCLES_BACKEND } @@ -489,7 +493,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::STALLED_CYCLES_FRONTEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x7, KUNPENG_PMU::HIP_B::CORE::STALLED_CYCLES_FRONTEND } @@ -497,7 +501,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::L1_DCACHE_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10000, KUNPENG_PMU::HIP_B::CORE::L1_DCACHE_LOAD_MISSES } @@ -505,7 +509,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::IDLE_CYCLES_BACKEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x8, KUNPENG_PMU::HIP_B::CORE::IDLE_CYCLES_BACKEND } @@ -513,7 +517,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::L1_ICACHE_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10001, KUNPENG_PMU::HIP_B::CORE::L1_ICACHE_LOAD_MISSES } @@ -521,7 +525,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::IDLE_CYCLES_FRONTEND, { - PERF_TYPE_RAW, + PERF_TYPE_HARDWARE, 0x7, KUNPENG_PMU::HIP_B::CORE::IDLE_CYCLES_FRONTEND } @@ -529,7 +533,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::L1_ICACHE_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x1, KUNPENG_PMU::HIP_B::CORE::L1_ICACHE_LOADS } @@ -537,7 +541,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::LLC_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10002, KUNPENG_PMU::HIP_B::CORE::LLC_LOAD_MISSES } @@ -545,7 +549,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::LLC_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x2, KUNPENG_PMU::HIP_B::CORE::LLC_LOADS } @@ -553,7 +557,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::BRANCH_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10005, KUNPENG_PMU::HIP_B::CORE::BRANCH_LOAD_MISSES } @@ -561,7 +565,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::BRANCH_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x5, KUNPENG_PMU::HIP_B::CORE::BRANCH_LOADS } @@ -569,7 +573,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::DTLB_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10003, KUNPENG_PMU::HIP_B::CORE::DTLB_LOAD_MISSES } @@ -577,7 +581,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::DTLB_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x3, KUNPENG_PMU::HIP_B::CORE::DTLB_LOADS } @@ -585,7 +589,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::ITLB_LOAD_MISSES, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x10004, KUNPENG_PMU::HIP_B::CORE::ITLB_LOAD_MISSES } @@ -593,7 +597,7 @@ const std::unordered_map HIP_B_CORE_PMU_MA { KUNPENG_PMU::HIP_B::CORE::ITLB_LOADS, { - PERF_TYPE_RAW, + PERF_TYPE_HW_CACHE, 0x4, KUNPENG_PMU::HIP_B::CORE::ITLB_LOADS } @@ -603,4 +607,79 @@ const std::unordered_map HIP_B_CORE_PMU_MA const KUNPENG_PMU::CORE_EVT_MAP KUNPENG_PMU::CORE_EVENT_MAP = { {CHIP_TYPE::HIPA, HIP_A_CORE_PMU_MAP}, {CHIP_TYPE::HIPB, HIP_B_CORE_PMU_MAP}, -}; \ No newline at end of file +}; + +static struct PmuEvt* ConstructPmuEvtFromCore(KUNPENG_PMU::CoreConfig config, int collectType) +{ + auto* pmuEvtPtr = new PmuEvt; + pmuEvtPtr->config = config.config; + pmuEvtPtr->name = config.eventName; + pmuEvtPtr->type = config.type; + pmuEvtPtr->pmuType = KUNPENG_PMU::CORE_TYPE; + pmuEvtPtr->collectType = collectType; + pmuEvtPtr->cpumask = -1; + return pmuEvtPtr; +} + +static int64_t GetKernelCoreEventConfig(const string &name) +{ + string eventPath = "/sys/devices/armv8_pmuv3_0/events/" + name; + string realPath = GetRealPath(eventPath); + if (!IsValidPath(realPath)) { + return -1; + } + ifstream typeIn(realPath); + if (!typeIn.is_open()) { + return -1; + } + string typeStr; + typeIn >> typeStr; + return stoi(typeStr, nullptr, 16); +} + +static int64_t GetKernelCoreEventType() +{ + string eventPath = "/sys/devices/armv8_pmuv3_0/type"; + string realPath = GetRealPath(eventPath); + if (!IsValidPath(realPath)) { + return -1; + } + ifstream typeIn(realPath); + if (!typeIn.is_open()) { + return -1; + } + string typeStr; + typeIn >> typeStr; + + return stoi(typeStr); +} + +static struct PmuEvt* ConstructPmuEvtFromKernel(const char* pmuName, int collectType) +{ + int64_t config = GetKernelCoreEventConfig(pmuName); + int64_t type = GetKernelCoreEventType(); + if (config == -1 || type == -1) { + return nullptr; + } + auto* pmuEvtPtr = new PmuEvt; + pmuEvtPtr->config = config; + pmuEvtPtr->name = pmuName; + pmuEvtPtr->type = type; + pmuEvtPtr->pmuType = KUNPENG_PMU::CORE_TYPE; + pmuEvtPtr->collectType = collectType; + pmuEvtPtr->cpumask = -1; + return pmuEvtPtr; +} + +struct PmuEvt* GetCoreEvent(const char* pmuName, int collectType) +{ + g_chipType = GetCpuType(); + if (g_chipType == UNDEFINED_TYPE) { + return nullptr; + } + auto coreMap = KUNPENG_PMU::CORE_EVENT_MAP.at(g_chipType); + if (coreMap.find(pmuName) != coreMap.end()) { + return ConstructPmuEvtFromCore(KUNPENG_PMU::CORE_EVENT_MAP.at(g_chipType).at(pmuName), collectType); + } + return ConstructPmuEvtFromKernel(pmuName, collectType); +} \ No newline at end of file diff --git a/pmu/pfm/core.h b/pmu/pfm/core.h index 1e0ca22..4c7809b 100644 --- a/pmu/pfm/core.h +++ b/pmu/pfm/core.h @@ -22,5 +22,7 @@ namespace KUNPENG_PMU { extern const CORE_EVT_MAP CORE_EVENT_MAP; } +struct PmuEvt* GetCoreEvent(const char* pmuName, int collectType); + #endif diff --git a/pmu/pfm/pfm.cpp b/pmu/pfm/pfm.cpp index 4b46838..ba4f703 100644 --- a/pmu/pfm/pfm.cpp +++ b/pmu/pfm/pfm.cpp @@ -38,7 +38,6 @@ using namespace pcerr; using namespace KUNPENG_PMU; static constexpr int MAX_STRING_LEN = 2048; -static CHIP_TYPE g_chipType = UNDEFINED_TYPE; static struct PmuEvt* GetRawEvent(const char* pmuName, int collectType) { @@ -49,35 +48,14 @@ static struct PmuEvt* GetRawEvent(const char* pmuName, int collectType) if (*endPtr != '\0') { return nullptr; } - struct PmuEvt* pmuEvtPtr = new PmuEvt; + auto* pmuEvtPtr = new PmuEvt; pmuEvtPtr->config = config; pmuEvtPtr->name = pmuName; pmuEvtPtr->type = PERF_TYPE_RAW; pmuEvtPtr->pmuType = CORE_TYPE; pmuEvtPtr->collectType = collectType; pmuEvtPtr->cpumask = -1; - return std::move(pmuEvtPtr); -} - -static struct PmuEvt* ConstructPmuEvtFromCore(KUNPENG_PMU::CoreConfig config, int collectType) -{ - struct PmuEvt* pmuEvtPtr = new PmuEvt; - pmuEvtPtr->config = config.config; - pmuEvtPtr->name = config.eventName; - pmuEvtPtr->type = config.type; - pmuEvtPtr->pmuType = CORE_TYPE; - pmuEvtPtr->collectType = collectType; - pmuEvtPtr->cpumask = -1; - return std::move(pmuEvtPtr); -} - -static struct PmuEvt* GetCoreEvent(const char* pmuName, int collectType) -{ - return KUNPENG_PMU::CORE_EVENT_MAP.at(g_chipType).find(pmuName) != - KUNPENG_PMU::CORE_EVENT_MAP.at(g_chipType).end() - ? ConstructPmuEvtFromCore( - KUNPENG_PMU::CORE_EVENT_MAP.at(g_chipType).at(pmuName), collectType) - : nullptr; + return pmuEvtPtr; } static int GetSpeType(void) @@ -112,37 +90,36 @@ static const std::unordered_map EvtMap{ {KUNPENG_PMU::TRACE_TYPE, GetKernelTraceEvent}, }; -static int GetEventType(const char *pmuName, string &evtName) +static bool CheckEventInList(enum PmuEventType eventType, const char *pmuName) +{ + unsigned numEvt; + auto eventList = PmuEventList(eventType, &numEvt); + for (int j=0;jcollectType = collectType; return evt; } - string evtName; - g_chipType = GetCpuType(); - if (g_chipType == UNDEFINED_TYPE) { - return nullptr; - } - auto type = GetEventType(pmuName, evtName); + auto type = GetEventType(pmuName); if (type == -1) { return nullptr; } struct PmuEvt* evt = (EvtMap.find(type) != EvtMap.end()) ? - EvtMap.at(type)(evtName.c_str(), collectType) : nullptr; + EvtMap.at(type)(pmuName, collectType) : nullptr; if (evt == nullptr) { return evt; } diff --git a/pmu/pfm/trace.cpp b/pmu/pfm/trace.cpp index 9e2c77a..9ae3844 100644 --- a/pmu/pfm/trace.cpp +++ b/pmu/pfm/trace.cpp @@ -51,6 +51,7 @@ struct PmuEvt* GetKernelTraceEvent(const char* pmuName, int collectType) pmuEvtPtr->config = config; pmuEvtPtr->name = pmuName; pmuEvtPtr->type = PERF_TYPE_TRACEPOINT; + pmuEvtPtr->pmuType = TRACE_TYPE; pmuEvtPtr->collectType = collectType; pmuEvtPtr->cpumask = -1; return pmuEvtPtr; diff --git a/pmu/pmu_event_list.cpp b/pmu/pmu_event_list.cpp index 7088388..168008c 100644 --- a/pmu/pmu_event_list.cpp +++ b/pmu/pmu_event_list.cpp @@ -11,9 +11,11 @@ #include #include #include +#include #include "core.h" #include "pcerr.h" #include "pmu.h" +#include "common.h" using namespace pcerr; using namespace std; @@ -30,6 +32,7 @@ static std::mutex pmuEventListMtx; static vector uncoreEventList; static vector traceEventList; +static vector coreEventList; static void GetEventName(const string& devName, vector& eventList) { @@ -50,7 +53,7 @@ static void GetEventName(const string& devName, vector& eventList) eventName += SLASH; char* eventNameCopy = new char[eventName.length() + 1]; strcpy(eventNameCopy, eventName.c_str()); - eventList.push_back(eventNameCopy); + eventList.emplace_back(eventNameCopy); } closedir(dir); } @@ -74,7 +77,7 @@ static void GetTraceSubFolder(const string& devName, vector& eventL eventName += COLON + folderName; char* eventNameCopy = new char[eventName.length() + 1]; strcpy(eventNameCopy, eventName.c_str()); - eventList.push_back(eventNameCopy); + eventList.emplace_back(eventNameCopy); } } closedir(dir); @@ -82,20 +85,43 @@ static void GetTraceSubFolder(const string& devName, vector& eventL const char** QueryCoreEvent(unsigned *numEvt) { - static vector eventList; + if (!coreEventList.empty()) { + *numEvt = coreEventList.size(); + return coreEventList.data(); + } auto coreEventMap = KUNPENG_PMU::CORE_EVENT_MAP.at(GetCpuType()); for (auto& pair : coreEventMap) { auto eventName = pair.first; char* eventNameCopy = new char[eventName.length() + 1]; strcpy(eventNameCopy, eventName.c_str()); - eventList.push_back(eventNameCopy); + coreEventList.emplace_back(eventNameCopy); + } + DIR* dir; + struct dirent* entry; + string path = "/sys/devices/armv8_pmuv3_0/events/"; + if ((dir = opendir(path.c_str())) == nullptr) { + New(LIBPERF_ERR_FOLDER_PATH_INACCESSIBLE, "Could not open " + path); + return nullptr; } - *numEvt = eventList.size(); - return eventList.data(); + while ((entry = readdir(dir)) != nullptr) { + if (entry->d_type == DT_REG) { + string evtName = entry->d_name; + char* eventNameCopy = new char[evtName.length() + 1]; + strcpy(eventNameCopy, evtName.c_str()); + coreEventList.emplace_back(eventNameCopy); + } + } + closedir(dir); + *numEvt = coreEventList.size(); + return coreEventList.data(); } const char** QueryUncoreEvent(unsigned *numEvt) { + if (!uncoreEventList.empty()) { + *numEvt = uncoreEventList.size(); + return uncoreEventList.data(); + } DIR* dir; struct dirent* entry; dir = opendir(SYS_DEVICES.c_str()); @@ -115,6 +141,10 @@ const char** QueryUncoreEvent(unsigned *numEvt) const char** QueryTraceEvent(unsigned *numEvt) { + if (!traceEventList.empty()) { + *numEvt = traceEventList.size(); + return traceEventList.data(); + } DIR* dir; struct dirent* entry; dir = opendir(TRACE_FOLDER.c_str()); @@ -173,12 +203,22 @@ const char** PmuEventList(enum PmuEventType eventType, unsigned *numEvt) return eventList; } -void PmuEventListFree(const char** eventList, unsigned *numEvt) +void PmuEventListFree() { lock_guard lg(pmuEventListMtx); - for (unsigned i = 0; i < *numEvt; i++) { - delete[] eventList[i]; + for (auto evt : coreEventList) { + if (evt != nullptr && evt[0] != '\0') + delete[] evt; + } + for (auto evt : uncoreEventList) { + if (evt != nullptr && evt[0] != '\0') + delete[] evt; + } + for (auto evt : traceEventList) { + if (evt != nullptr && evt[0] != '\0') + delete[] evt; } + coreEventList.clear(); uncoreEventList.clear(); traceEventList.clear(); New(SUCCESS); diff --git a/pmu/pmu_list.cpp b/pmu/pmu_list.cpp index acdaab0..2db23f9 100644 --- a/pmu/pmu_list.cpp +++ b/pmu/pmu_list.cpp @@ -232,6 +232,7 @@ namespace KUNPENG_PMU { EraseSpeCpu(pd); EraseParentEventMap(); SymResolverDestroy(); + PmuEventListFree(); } int PmuList::NewPd() -- Gitee From 52ca37bcecdb86338da903d8f5fc2f0384df9145 Mon Sep 17 00:00:00 2001 From: Junyi Ye <294572668@qq.com> Date: Fri, 26 Apr 2024 11:32:26 +0800 Subject: [PATCH 2/3] Cleancode --- pmu/pfm/core.cpp | 22 +++++++++++++++------- pmu/pfm/trace.cpp | 1 + pmu/pmu_event_list.cpp | 25 +++++++++++-------------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/pmu/pfm/core.cpp b/pmu/pfm/core.cpp index f00995d..acdf759 100644 --- a/pmu/pfm/core.cpp +++ b/pmu/pfm/core.cpp @@ -626,15 +626,23 @@ static int64_t GetKernelCoreEventConfig(const string &name) string eventPath = "/sys/devices/armv8_pmuv3_0/events/" + name; string realPath = GetRealPath(eventPath); if (!IsValidPath(realPath)) { - return -1; + return -1; } - ifstream typeIn(realPath); - if (!typeIn.is_open()) { - return -1; + ifstream evtIn(realPath); + if (!evtIn.is_open()) { + return -1; } - string typeStr; - typeIn >> typeStr; - return stoi(typeStr, nullptr, 16); + string configStr; + int64_t config; + evtIn >> configStr; + auto findEq = configStr.find('='); + if (findEq == string::npos) { + return -1; + } + auto subStr = configStr.substr(findEq + 1, configStr.size() - findEq); + std::istringstream iss(subStr); + iss >> std::hex >> config; + return config; } static int64_t GetKernelCoreEventType() diff --git a/pmu/pfm/trace.cpp b/pmu/pfm/trace.cpp index 9ae3844..e083e59 100644 --- a/pmu/pfm/trace.cpp +++ b/pmu/pfm/trace.cpp @@ -14,6 +14,7 @@ ******************************************************************************/ #include #include "common.h" +#include "pfm_event.h" #include "pmu_event.h" #include "trace.h" diff --git a/pmu/pmu_event_list.cpp b/pmu/pmu_event_list.cpp index 168008c..b16b1d7 100644 --- a/pmu/pmu_event_list.cpp +++ b/pmu/pmu_event_list.cpp @@ -203,23 +203,20 @@ const char** PmuEventList(enum PmuEventType eventType, unsigned *numEvt) return eventList; } -void PmuEventListFree() +static void PmuEventListFreeSingle(vector& eventList) { - lock_guard lg(pmuEventListMtx); - for (auto evt : coreEventList) { + for (auto evt : eventList) { if (evt != nullptr && evt[0] != '\0') delete[] evt; } - for (auto evt : uncoreEventList) { - if (evt != nullptr && evt[0] != '\0') - delete[] evt; - } - for (auto evt : traceEventList) { - if (evt != nullptr && evt[0] != '\0') - delete[] evt; - } - coreEventList.clear(); - uncoreEventList.clear(); - traceEventList.clear(); + eventList.clear(); +} + +void PmuEventListFree() +{ + lock_guard lg(pmuEventListMtx); + PmuEventListFreeSingle(coreEventList); + PmuEventListFreeSingle(uncoreEventList); + PmuEventListFreeSingle(traceEventList); New(SUCCESS); } \ No newline at end of file -- Gitee From fa564f0e2848e015ebfc89506fb8c2f97055de84 Mon Sep 17 00:00:00 2001 From: Junyi Ye <294572668@qq.com> Date: Fri, 26 Apr 2024 17:08:41 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pmu/pfm/core.cpp | 63 +++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/pmu/pfm/core.cpp b/pmu/pfm/core.cpp index acdf759..c3174d4 100644 --- a/pmu/pfm/core.cpp +++ b/pmu/pfm/core.cpp @@ -202,7 +202,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_RD, { - 8, + PERF_TYPE_RAW, 0x40, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_RD } @@ -210,7 +210,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WR, { - 8, + PERF_TYPE_RAW, 0x41, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WR } @@ -218,7 +218,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_RD, { - 8, + PERF_TYPE_RAW, 0x42, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_RD } @@ -226,7 +226,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_WR, { - 8, + PERF_TYPE_RAW, 0x43, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_REFILL_WR } @@ -234,7 +234,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_VICTIM, { - 8, + PERF_TYPE_RAW, 0x46, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_VICTIM } @@ -242,7 +242,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_CLEAN, { - 8, + PERF_TYPE_RAW, 0x47, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_WB_CLEAN } @@ -250,7 +250,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_INVAL, { - 8, + PERF_TYPE_RAW, 0x48, KUNPENG_PMU::HIP_A::CORE::L1D_CACHE_INVAL } @@ -258,7 +258,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_RD, { - 8, + PERF_TYPE_RAW, 0x4c, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_RD } @@ -266,7 +266,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_WR, { - 8, + PERF_TYPE_RAW, 0x4d, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_REFILL_WR } @@ -274,7 +274,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_RD, { - 8, + PERF_TYPE_RAW, 0x4e, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_RD } @@ -282,7 +282,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1D_TLB_WR, { - 8, + PERF_TYPE_RAW, 0x4f, KUNPENG_PMU::HIP_A::CORE::L1D_TLB_WR } @@ -290,7 +290,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_RD, { - 8, + PERF_TYPE_RAW, 0x50, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_RD } @@ -298,7 +298,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WR, { - 8, + PERF_TYPE_RAW, 0x51, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WR } @@ -306,7 +306,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_RD, { - 8, + PERF_TYPE_RAW, 0x52, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_RD } @@ -314,7 +314,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_WR, { - 8, + PERF_TYPE_RAW, 0x53, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_REFILL_WR } @@ -322,7 +322,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_VICTIM, { - 8, + PERF_TYPE_RAW, 0x56, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_VICTIM } @@ -330,7 +330,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_CLEAN, { - 8, + PERF_TYPE_RAW, 0x57, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_WB_CLEAN } @@ -338,7 +338,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_INVAL, { - 8, + PERF_TYPE_RAW, 0x58, KUNPENG_PMU::HIP_A::CORE::L2D_CACHE_INVAL } @@ -346,7 +346,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF, { - 8, + PERF_TYPE_RAW, 0x102e, KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF } @@ -354,7 +354,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF_REFILL, { - 8, + PERF_TYPE_RAW, 0x102f, KUNPENG_PMU::HIP_A::CORE::L1I_CACHE_PRF_REFILL } @@ -362,7 +362,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::IQ_IS_EMPTY, { - 8, + PERF_TYPE_RAW, 0x1043, KUNPENG_PMU::HIP_A::CORE::IQ_IS_EMPTY } @@ -370,7 +370,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::IF_IS_STALL, { - 8, + PERF_TYPE_RAW, 0x1044, KUNPENG_PMU::HIP_A::CORE::IF_IS_STALL } @@ -378,7 +378,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::FETCH_BUBBLE, { - 8, + PERF_TYPE_RAW, 0x2014, KUNPENG_PMU::HIP_A::CORE::FETCH_BUBBLE } @@ -386,7 +386,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::PRF_REQ, { - 8, + PERF_TYPE_RAW, 0x6013, KUNPENG_PMU::HIP_A::CORE::PRF_REQ } @@ -394,7 +394,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::HIT_ON_PRF, { - 8, + PERF_TYPE_RAW, 0x6014, KUNPENG_PMU::HIP_A::CORE::HIT_ON_PRF } @@ -402,7 +402,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::EXE_STALL_CYCLE, { - 8, + PERF_TYPE_RAW, 0x7001, KUNPENG_PMU::HIP_A::CORE::EXE_STALL_CYCLE } @@ -410,7 +410,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::MEM_STALL_ANYLOAD, { - 8, + PERF_TYPE_RAW, 0x7004, KUNPENG_PMU::HIP_A::CORE::MEM_STALL_ANYLOAD } @@ -418,7 +418,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L1MISS, { - 8, + PERF_TYPE_RAW, 0x7006, KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L1MISS } @@ -426,7 +426,7 @@ const std::unordered_map HIP_A_CORE_PMU_MA { KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L2MISS, { - 8, + PERF_TYPE_RAW, 0x7007, KUNPENG_PMU::HIP_A::CORE::MEM_STALL_L2MISS } @@ -633,16 +633,13 @@ static int64_t GetKernelCoreEventConfig(const string &name) return -1; } string configStr; - int64_t config; evtIn >> configStr; auto findEq = configStr.find('='); if (findEq == string::npos) { return -1; } auto subStr = configStr.substr(findEq + 1, configStr.size() - findEq); - std::istringstream iss(subStr); - iss >> std::hex >> config; - return config; + return stoi(subStr, nullptr, 16); } static int64_t GetKernelCoreEventType() -- Gitee