From acd95361c4d5381320da5b6defda172f23169201 Mon Sep 17 00:00:00 2001 From: "lijindong (C)" <2220386943@qq.com> Date: Mon, 4 Aug 2025 15:38:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=9A=E6=AC=A1=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E5=AF=B9=E5=BA=94=E5=B1=9E=E6=80=A7=EF=BC=8C=E4=BC=9A?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E5=A4=9A=E6=AC=A1=E5=8A=A0=E8=BD=BD=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pmu/pfm/core.cpp | 26 ++++++++--------- python/modules/_libkperf/Pmu.py | 22 ++++++++++---- python/modules/_libkperf/Symbol.py | 47 +++++++++++++++++++++--------- 3 files changed, 64 insertions(+), 31 deletions(-) diff --git a/pmu/pfm/core.cpp b/pmu/pfm/core.cpp index df0809c..e946217 100644 --- a/pmu/pfm/core.cpp +++ b/pmu/pfm/core.cpp @@ -31,7 +31,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::ALIGNMENT_FAULTS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_STALLED_CYCLES_FRONTEND, + PERF_COUNT_SW_ALIGNMENT_FAULTS, KUNPENG_PMU::COMMON::ALIGNMENT_FAULTS } }; @@ -40,7 +40,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::BPF_OUTPUT, { PERF_TYPE_SOFTWARE, - 0xa, + PERF_COUNT_SW_BPF_OUTPUT, KUNPENG_PMU::COMMON::BPF_OUTPUT } }; @@ -50,7 +50,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::CONTEXT_SWITCHES, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_CACHE_MISSES, + PERF_COUNT_SW_CONTEXT_SWITCHES, KUNPENG_PMU::COMMON::CONTEXT_SWITCHES } }; @@ -59,7 +59,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::CS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_CACHE_MISSES, + PERF_COUNT_SW_CONTEXT_SWITCHES, KUNPENG_PMU::COMMON::CS } }; @@ -78,7 +78,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::CPU_MIGRATIONS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_BRANCH_INSTRUCTIONS, + PERF_COUNT_SW_CPU_MIGRATIONS, KUNPENG_PMU::COMMON::CPU_MIGRATIONS } }; @@ -87,7 +87,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::MIGRATIONS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_BRANCH_INSTRUCTIONS, + PERF_COUNT_SW_CPU_MIGRATIONS, KUNPENG_PMU::COMMON::MIGRATIONS } }; @@ -96,7 +96,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::DUMMY, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_REF_CPU_CYCLES, + PERF_COUNT_SW_DUMMY, KUNPENG_PMU::COMMON::DUMMY } }; @@ -105,7 +105,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::EMULATION_FAULTS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_STALLED_CYCLES_BACKEND, + PERF_COUNT_SW_EMULATION_FAULTS, KUNPENG_PMU::COMMON::EMULATION_FAULTS } }; @@ -114,7 +114,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::MAJOR_FAULTS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_BUS_CYCLES, + PERF_COUNT_SW_PAGE_FAULTS_MAJ, KUNPENG_PMU::COMMON::MAJOR_FAULTS } }; @@ -123,7 +123,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::MINOR_FAULTS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_BRANCH_MISSES, + PERF_COUNT_SW_PAGE_FAULTS_MIN, KUNPENG_PMU::COMMON::MINOR_FAULTS } }; @@ -132,7 +132,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::PAGE_FAULTS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_CACHE_REFERENCES, + PERF_COUNT_SW_PAGE_FAULTS, KUNPENG_PMU::COMMON::PAGE_FAULTS } }; @@ -141,7 +141,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::FAULTS, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_CACHE_REFERENCES, + PERF_COUNT_SW_PAGE_FAULTS, KUNPENG_PMU::COMMON::FAULTS } }; @@ -151,7 +151,7 @@ namespace SOFTWARE_EVENT { KUNPENG_PMU::COMMON::TASK_CLOCK, { PERF_TYPE_SOFTWARE, - PERF_COUNT_HW_INSTRUCTIONS, + PERF_COUNT_SW_TASK_CLOCK, KUNPENG_PMU::COMMON::TASK_CLOCK } }; diff --git a/python/modules/_libkperf/Pmu.py b/python/modules/_libkperf/Pmu.py index 63b06ee..fceec20 100644 --- a/python/modules/_libkperf/Pmu.py +++ b/python/modules/_libkperf/Pmu.py @@ -1287,7 +1287,7 @@ class CtypesPmuData(ctypes.Structure): class ImplPmuData: - __slots__ = ['__c_pmu_data'] + __slots__ = ['__c_pmu_data', '__stack', '__cpuTopo', '__ext', '__rawData'] def __init__(self, stack=None, @@ -1329,7 +1329,9 @@ class ImplPmuData: @property def stack(self): - return Stack.from_c_stack(self.c_pmu_data.stack.contents) if self.c_pmu_data.stack else None + if not self.__stack: + self.__stack = Stack.from_c_stack(self.c_pmu_data.stack.contents) if self.c_pmu_data.stack else None + return self.__stack @stack.setter def stack(self, stack): @@ -1385,7 +1387,9 @@ class ImplPmuData: @property def cpuTopo(self): - return CpuTopology.from_c_cpu_topo(self.c_pmu_data.cpuTopo.contents) if self.c_pmu_data.cpuTopo else None + if not self.__cpuTopo: + self.__cpuTopo = CpuTopology.from_c_cpu_topo(self.c_pmu_data.cpuTopo.contents) if self.c_pmu_data.cpuTopo else None + return self.__cpuTopo @cpuTopo.setter def cpuTopo(self, cpuTopo): @@ -1425,11 +1429,15 @@ class ImplPmuData: @property def ext(self): - return PmuDataExt.from_pmu_data_ext(self.c_pmu_data.ext.contents) if self.c_pmu_data.ext else None + if not self.__ext: + self.__ext = PmuDataExt.from_pmu_data_ext(self.c_pmu_data.ext.contents) if self.c_pmu_data.ext else None + return self.__ext @property def rawData(self): - return SampleRawData.from_sample_raw_data(self.c_pmu_data.rawData) if self.c_pmu_data.rawData else None + if not self.__rawData: + self.__rawData = SampleRawData.from_sample_raw_data(self.c_pmu_data.rawData) if self.c_pmu_data.rawData else None + return self.__rawData @ext.setter def ext(self, ext): @@ -1447,6 +1455,10 @@ class ImplPmuData: def from_c_pmu_data(cls, c_pmu_data): pmu_data = cls() pmu_data.__c_pmu_data = c_pmu_data + pmu_data.__stack = None + pmu_data.__ext = None + pmu_data.__cpuTopo = None + pmu_data.__rawData = None return pmu_data diff --git a/python/modules/_libkperf/Symbol.py b/python/modules/_libkperf/Symbol.py index f18b9e9..5f874c9 100644 --- a/python/modules/_libkperf/Symbol.py +++ b/python/modules/_libkperf/Symbol.py @@ -76,8 +76,8 @@ class CtypesSymbol(ctypes.Structure): class Symbol: - __slots__ = ['__c_sym'] - + __slots__ = ['__c_sym','__module', '__symbolName', '__mangleName', '__fileName'] + def __init__(self, addr= 0, module= '', @@ -116,7 +116,9 @@ class Symbol: @property def module(self): - return self.c_sym.module.decode(UTF_8) + if not self.__module: + self.__module = self.c_sym.module.decode(UTF_8) + return self.__module @module.setter def module(self, module): @@ -124,7 +126,9 @@ class Symbol: @property def symbolName(self): - return self.c_sym.symbolName.decode(UTF_8) + if not self.__symbolName: + self.__symbolName = self.c_sym.symbolName.decode(UTF_8) + return self.__symbolName @symbolName.setter def symbolName(self, symbolName): @@ -132,7 +136,9 @@ class Symbol: @property def mangleName(self): - return self.c_sym.mangleName.decode(UTF_8) + if not self.__mangleName: + self.__mangleName = self.c_sym.mangleName.decode(UTF_8) + return self.__mangleName @mangleName.setter def mangleName(self, mangleName): @@ -140,7 +146,9 @@ class Symbol: @property def fileName(self): - return self.c_sym.fileName.decode(UTF_8) + if not self.__fileName: + self.__fileName = self.c_sym.fileName.decode(UTF_8) + return self.__fileName @fileName.setter def fileName(self, fileName): @@ -190,6 +198,10 @@ class Symbol: def from_c_sym(cls, c_sym): symbol = cls() symbol.__c_sym = c_sym + symbol.__module = None + symbol.__symbolName = None + symbol.__mangleName = None + symbol.__fileName = None return symbol @@ -215,12 +227,12 @@ CtypesStack._fields_ = [ class Stack(object): - __slots__ = ['__c_stack'] + __slots__ = ['__c_stack', '__symbol', '__next', '__prev'] - def __init__(self, + def __init__(self, symbol= None, - next = None, - prev = None, + next= None, + prev= None, count= 0): self.__c_stack = CtypesStack( symbol=symbol.c_sym if symbol else None, @@ -235,7 +247,9 @@ class Stack(object): @property def symbol(self): - return Symbol.from_c_sym(self.c_stack.symbol.contents) if self.c_stack.symbol else None + if not self.__symbol: + self.__symbol = Symbol.from_c_sym(self.c_stack.symbol.contents) if self.c_stack.symbol else None + return self.__symbol @symbol.setter def symbol(self, symbol): @@ -244,7 +258,9 @@ class Stack(object): @property def next(self): - return self.from_c_stack(self.c_stack.next.contents) if self.c_stack.next else None + if not self.__next: + self.__next = self.from_c_stack(self.c_stack.next.contents) if self.c_stack.next else None + return self.__next @next.setter def next(self, next): @@ -253,7 +269,9 @@ class Stack(object): @property def prev(self): - return self.from_c_stack(self.c_stack.prev.contents) if self.c_stack.prev else None + if not self.__prev: + self.__prev = self.from_c_stack(self.c_stack.prev.contents) if self.c_stack.prev else None + return self.__prev @prev.setter def prev(self, prev): @@ -271,6 +289,9 @@ class Stack(object): def from_c_stack(cls, c_stack): stack = cls() stack.__c_stack = c_stack + stack.__symbol = None + stack.__next = None + stack.__prev = None return stack -- Gitee