根据其他事件的发生情况,是否有可能获得事件计数器的值?
例如:如果我想知道每次特定计数器达到特定值时性能计数器的值。

最佳答案

您可以使用perf_event_open来实现这一点,但afaik不能直接使用当前版本的perf record
我想知道每次特定计数器达到特定值时性能计数器的值。
使用一组事件,“特定计数器”是组长。对于此事件,您设置:

struct perf_event_attr leader;
leader.sample_type = PERF_SAMPLE_TIME | PERF_SAMPLE_READ;
leader.sample_period = specific_value;
// set type/config accordingly
leader.read_format = PERF_FORMAT_GROUP;
group_fd = syscall(__NR_perf_event_open, &leader, tid, cpu, -1, 0);
...

struct perf_event_attr other;
other.sample_period = 0; // doesn't trigger overflows
// set type/config accordingly
syscall(__NR_perf_event_open, &other, tid, cpu, group_fd, 0);

// do the mmap dance, ioctl etc. with the fd you get for the leader
// read values from both leader and other counters in your mmap buffer.

09-28 01:17