diff --git a/docs/C_C++_API.md b/docs/C_C++_API.md index 2ad83e8b7bc58787a997da7c6b9a22cf356250c6..d9782a6e145e264341f4fa20ed05dc6e12246f90 100644 --- a/docs/C_C++_API.md +++ b/docs/C_C++_API.md @@ -155,6 +155,8 @@ * unsigned long pa 物理地址 * unsigned long va 虚拟地址 * unsigned long event 事件ID + * unsigned short lat 调度操作到执行操作的周期数 + * unsigned short source 记录加载或存储操作的数据来源 * unsigned short branchRecords brbe数据 * struct * unsigned long nr branchRecords的数量 @@ -321,6 +323,7 @@ 目前该文件只支持SAMPLING模式,只支持基本信息的输出,比如id, tid, pid, addr,也包含brbe的数据。 * path: 文件路径 * pattr: 采集任务的PmuAttr +* addIdHdr: 为属于非PERF_RECORD_SAMPLE采样的ID * 返回值: 文件句柄,用于下面两个API的调用 ### int PmuWriteData(PmuFile file, struct PmuData *data, int len); diff --git a/docs/Details_Usage.md b/docs/Details_Usage.md index 6cff99953cf3d8edd43a25105536adc9c1143ac5..494ea73de265d66a96a87ca6de296ead0fb7e22c 100644 --- a/docs/Details_Usage.md +++ b/docs/Details_Usage.md @@ -618,6 +618,7 @@ struct PmuDataExt { unsigned long va; // virtual address unsigned long event; // event id, which is a bit map of mixed events, event bit is defined in SPE_EVENTS. unsigned short lat; // latency, Number of cycles between the time when an operation is dispatched and the time when the operation is executed. + unsigned short source; // data source, used to record the source of data accessed by a load operation, it can distinguish whether false sharing occurs. }; ``` 其中,物理地址pa需要在启用PA_ENABLE的情况下才能采集。 @@ -640,6 +641,25 @@ enum SPE_EVENTS { SPE_EV_EMPTY_PRED = 1 << 18, }; ``` +对于PmuDataExt中的source字段,以下记录不同加载或存储操作对应的bit值 +```c++ +enum HIP_DATA_SOURCE { + HIP_PEER_CPU = 0, + HIP_PEER_CPU_HITM = 1, + HIP_L3 = 2, + HIP_L3_HITM = 3, + HIP_PEER_CLUSTER = 4, + HIP_PEER_CLUSTER_HITM = 5, + HIP_REMOTE_SOCKET = 6, + HIP_REMOTE_SOCKET_HITM = 7, + HIP_LOCAL_MEM = 8, + HIP_REMOTE_MEM = 9, + HIP_NC_DEV = 13, + HIP_L2 = 16, + HIP_L2_HITM = 17, + HIP_L1 = 18, +}; +``` ### 获取符号信息 结构体PmuData里提供了采样数据的调用栈信息,包含调用栈的地址、符号名称等。 ```c++ @@ -1990,3 +2010,40 @@ func main() { kperf.PmuEndWrite(file) } ``` + + +### 通过pmu_datasrc定位falsesharing问题 +```shell +cd example +g++ -o pmu_datasrc pmu_datasrc.cpp -L ../output/lib -I ../output/include -lsym -lkperf +cd case +gcc -o falsesharing_demo -g falsesharing_demo.c -lpthread +./pmu_datasrc -d 2 case/falsesharing_demo +# 如果数据结果中带有HITM标志则表示对应的加载操作发生了虚假共享。 +# HIP_PEER_CPU = 0, +# HIP_PEER_CPU_HITM = 1, +# HIP_L3 = 2, +# HIP_L3_HITM = 3, +# HIP_PEER_CLUSTER = 4, +# HIP_PEER_CLUSTER_HITM = 5, +# HIP_REMOTE_SOCKET = 6, +# HIP_REMOTE_SOCKET_HITM = 7, +# HIP_LOCAL_MEM = 8, +# HIP_REMOTE_MEM = 9, +# HIP_NC_DEV = 13, +# HIP_L2 = 16, +# HIP_L2_HITM = 17, +# HIP_L1 = 18, +HIP_H2_HITM 190 + |——4009cc sum_a(void*)+0x1c8 /home/test/libkperf/example/case/falsesharing_long.c:33 [77] + |——400bbc inc_b(void*)+0x1cc /home/test/libkperf/example/case/falsesharing_long.c:59 [70] + |——400bbc sum_a(void*)+0x1b8 /home/test/libkperf/example/case/falsesharing_long.c:32 [27] + |——400bbc inc_b(void*)+0x1bc /home/test/libkperf/example/case/falsesharing_long.c:58 [16] +HIP_L1 1952 + |——400bd0 inc_b(void*)+0x1e0 /home/test/libkperf/example/case/falsesharing_long.c:57 [491] + |——4009e0 sum_a(void*)+0x1dc /home/test/libkperf/example/case/falsesharing_long.c:31 [489] + |——4009bc sum_a(void*)+0x1b8 /home/test/libkperf/example/case/falsesharing_long.c:32 [352] + |——400bac inc_b(void*)+0x1bc /home/test/libkperf/example/case/falsesharing_long.c:58 [349] + |——4009cc sum_a(void*)+0x1c8 /home/test/libkperf/example/case/falsesharing_long.c:33 [151] + |——400bbc inc_b(void*)+0x1cc /home/test/libkperf/example/case/falsesharing_long.c:59 [114] +``` diff --git a/docs/Go_API.md b/docs/Go_API.md index f22ef11fbb51f24284487bf876f351855e87c0ce..6f471d02d284404d78e427058e386dfba628ed76 100644 --- a/docs/Go_API.md +++ b/docs/Go_API.md @@ -162,6 +162,7 @@ func PmuRead(fd int) (PmuDataVo, error) * Va uint64 虚拟地址 * Event uint64 混合事件的比特位 * Lat uint16 调度操作到执行操作的周期数 + * Source uint16 记录加载或存储操作的数据来源 * cgroupName cgroup名称 ```go diff --git a/docs/Python_API.md b/docs/Python_API.md index cf6e3df366b6a844613d03bb15ef8dfeaffbf61d..cdccfb6dc9af838b59133fd5e923029fd54b3896 100644 --- a/docs/Python_API.md +++ b/docs/Python_API.md @@ -166,6 +166,8 @@ pd为kperf.open返回值 * pa 物理地址 * va 虚拟地址 * event 事件ID + * lat 调度操作到执行操作的周期数 + * source 记录加载或存储操作的数据来源 * branchRecords brbe数据 * iter brbe数据迭代器 * len brbe数据长度