From afe48250642cc1d82b1254719cc8027cea4f05ae Mon Sep 17 00:00:00 2001 From: "lijindong (C)" <2220386943@qq.com> Date: Mon, 8 Sep 2025 14:19:08 +0800 Subject: [PATCH] =?UTF-8?q?fix=20go=E5=AF=B9=E4=BA=8EPmuWriteData=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=BC=BA=E5=B0=91=E5=8F=82=E6=95=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/C_C++_API.md | 2 +- docs/Go_API.md | 1 + go/src/libkperf/kperf/kperf.go | 5 +++-- python/modules/_libkperf/Pmu.py | 5 +++-- python/modules/kperf/pmu.py | 4 ++-- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/C_C++_API.md b/docs/C_C++_API.md index 03f1482..2ad83e8 100644 --- a/docs/C_C++_API.md +++ b/docs/C_C++_API.md @@ -316,7 +316,7 @@ ### void PmuCloseCpuFreqSampling(); 关闭cpu频率采集 -### PmuFile PmuBeginWrite(const char *path, const struct PmuAttr *pattr); +### PmuFile PmuBeginWrite(const char *path, const struct PmuAttr *pattr, const int addIdHdr); 用于把性能数据输出为perf.data格式的文件。该函数用于初始化该文件。 目前该文件只支持SAMPLING模式,只支持基本信息的输出,比如id, tid, pid, addr,也包含brbe的数据。 * path: 文件路径 diff --git a/docs/Go_API.md b/docs/Go_API.md index 30e38e9..f22ef11 100644 --- a/docs/Go_API.md +++ b/docs/Go_API.md @@ -562,6 +562,7 @@ func main() { 目前该文件只支持SAMPLING模式,只支持基本信息的输出,比如id, tid, pid, addr,也包含brbe的数据。 * path: 文件路径 * pattr: 采集任务的PmuAttr +* addIdHdr: 为属于非PERF_RECORD_SAMPLE采样的ID * 返回值: 文件句柄,用于下面两个API的调用 ### kperf.PmuWriteData diff --git a/go/src/libkperf/kperf/kperf.go b/go/src/libkperf/kperf/kperf.go index 3c0812a..04de53a 100644 --- a/go/src/libkperf/kperf/kperf.go +++ b/go/src/libkperf/kperf/kperf.go @@ -1351,15 +1351,16 @@ func (data *PmuData) appendBranchRecords(pmuData C.struct_PmuData) { // It is a simplified perf.data only include basic fields for perf sample, // including id, cpu, tid, pid, addr and branch stack. // It also includes sample like mmap, mmap2, comm, fork. -func PmuBeginWrite(path string, attr PmuAttr) (C.PmuFile, error) { +func PmuBeginWrite(path string, attr PmuAttr, addIdHdr int) (C.PmuFile, error) { cAttr, err := ToCPmuAttr(attr) defer FreePmuAttr(cAttr) if err != 0 { return nil, errors.New(C.GoString(C.Perror())) } cFilePath := C.CString(path) + cAddIdHrd := C.int(addIdHdr) - file := C.PmuBeginWrite(cFilePath, cAttr) + file := C.PmuBeginWrite(cFilePath, cAttr, cAddIdHrd) return file, errors.New(C.GoString(C.Perror())) } diff --git a/python/modules/_libkperf/Pmu.py b/python/modules/_libkperf/Pmu.py index d90039a..cc42c50 100644 --- a/python/modules/_libkperf/Pmu.py +++ b/python/modules/_libkperf/Pmu.py @@ -2219,7 +2219,7 @@ def PmuCloseCpuFreqSampling(): c_PmuCloseCpuFreqSampling = kperf_so.PmuCloseCpuFreqSampling c_PmuCloseCpuFreqSampling() -def PmuBeginWrite(path, pattr): +def PmuBeginWrite(path, pattr, addIdHdr): """ PmuFile PmuBeginWrite(const char *path, const PmuAttr *pattr) """ @@ -2228,8 +2228,9 @@ def PmuBeginWrite(path, pattr): c_func.restype = ctypes.c_void_p c_filepath = ctypes.c_char_p(path.encode(UTF_8)) + c_addIdHdr = ctypes.c_int(addIdHdr) - return c_func(c_filepath, ctypes.byref(pattr.c_pmu_attr)) + return c_func(c_filepath, ctypes.byref(pattr.c_pmu_attr), c_addIdHdr) def PmuWriteData(file, data): """ diff --git a/python/modules/kperf/pmu.py b/python/modules/kperf/pmu.py index 73a25b6..dfc1d44 100644 --- a/python/modules/kperf/pmu.py +++ b/python/modules/kperf/pmu.py @@ -593,8 +593,8 @@ def close_cpu_freq_sampling(): def read_cpu_freq_detail(): return _libkperf.PmuReadCpuFreqDetail() -def begin_write(path, pattr): - return _libkperf.PmuBeginWrite(path, pattr) +def begin_write(path, pattr, addIdHdr): + return _libkperf.PmuBeginWrite(path, pattr, addIdHdr) def write_data(file, data): return _libkperf.PmuWriteData(file, data) -- Gitee