incorrect perf counters
Josh Stone
jistone@redhat.com
Mon Jul 25 19:45:00 GMT 2016
On 07/25/2016 12:15 PM, riya khanna wrote:
> Hi,
>
> I'm trying to collect perf counters using systemtap. I followed
> systemtap/EXAMPLES/profiling/perf.stp to create a script to monitor a
> user process, enable counters on function entry, and spew out counters
> on function return. Please find the script (perf.stp) attached.
>
> I use the stap script described above to monitor function func()'s
> entry and exit.
>
> void func(void)
> {
> printf("Measuring instruction count for this printf\n");
> }
>
> Just to verify systemtap reported counters, I created a program
> (test.c) that uses perf_event_open() syscall to monitor func()'s
> entry/exit and spew out counters. Please find it attached as well.
>
> However, the counters reported by perf.stp are very different from
> what is reported by test.c. For example, instruction count reported by
> test.c and perf.stp are 593 and 10610-10690.
>
> This is how I launch perf.stp to monitor func() in test.c:
>
> sudo /usr/local/bin/stap -s1 perf.stp test func
>
> Why such a difference? Am I missing something?
I suspect it's because your calls set exclude_kernel and exclude_hv, and
systemtap doesn't do this.
Perhaps we should do this for the .process variant, or at least make it
an option to count only userspace.
More information about the Systemtap
mailing list