我正在读取perf的源代码,并试图理解如何获取触发perf计数的目标进程的指令的虚拟内存地址(例如perf record
的虚拟地址,它是由call test
的注释监视的汇编代码)。perf使用什么数据结构来存储使perf事件发生的指令的虚拟地址和触发计数器?
最佳答案
为了获得样本的指令指针,必须在PERF_SAMPLE_IP
调用中包含perf_attr.sample_type
。这将在perf_event_open
事件的结构中包含ip
字段,您可以从PERF_RECORD_SAMPLE
环形缓冲区读取该字段。有关详细信息,请参阅手册页。
PERF_RECORD_SAMPLE
This record indicates a sample.
struct {
struct perf_event_header header;
u64 sample_id; /* if PERF_SAMPLE_IDENTIFIER */
u64 ip; /* if PERF_SAMPLE_IP */
u32 pid, tid; /* if PERF_SAMPLE_TID */
u64 time; /* if PERF_SAMPLE_TIME */
...
关于c - 性能记录如何获取目标进程的指令的虚拟内存地址以及性能用于存储的数据结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47846868/