All of lore.kernel.org
 help / color / mirror / Atom feed
* Ideas to measure kernel function execution time using perf
@ 2016-04-19  1:42 Qu Wenruo
  2016-04-19 23:37 ` Masami Hiramatsu
  2016-04-20 13:09 ` Andi Kleen
  0 siblings, 2 replies; 5+ messages in thread
From: Qu Wenruo @ 2016-04-19  1:42 UTC (permalink / raw)
  To: linux-perf-users

Hi,

Is there any method to measure kernel function execution time for 
specific functions using perf?

Current ftrace events can only record the timestamp when hitting the 
trace point (along with some other info).

I'm OK adding new ftrace events into kernel, but even after adding such 
ftrace events, is it possible to use perf to calculate the function 
execution time?

Any advice is welcomed.

Thanks,
Qu

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Ideas to measure kernel function execution time using perf
  2016-04-19  1:42 Ideas to measure kernel function execution time using perf Qu Wenruo
@ 2016-04-19 23:37 ` Masami Hiramatsu
  2016-04-20  0:52   ` Qu Wenruo
  2016-04-20  2:02   ` Arnaldo Carvalho de Melo
  2016-04-20 13:09 ` Andi Kleen
  1 sibling, 2 replies; 5+ messages in thread
From: Masami Hiramatsu @ 2016-04-19 23:37 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-perf-users

On Tue, 19 Apr 2016 09:42:49 +0800
Qu Wenruo <quwenruo@cn.fujitsu.com> wrote:

> Hi,
> 
> Is there any method to measure kernel function execution time for 
> specific functions using perf?
> 
> Current ftrace events can only record the timestamp when hitting the 
> trace point (along with some other info).
> 
> I'm OK adding new ftrace events into kernel, but even after adding such 
> ftrace events, is it possible to use perf to calculate the function 
> execution time?

Would you mean "perf probe"? :)

Actually, kprobes on the function entry point (on x86) automatically
use ftrace and also you can get function parameters, e.g.

# perf probe -a 'YOUR_TARGET_FUNCTION $params'

And with using ftrace, you can get function duration and parameters,
for example,

# perf probe -a 'vfs_read $params'
Added new event:
  probe:vfs_read       (on vfs_read with $params)

You can now use it in all perf tools, such as:

	perf record -e probe:vfs_read -aR sleep 1

# cd /sys/kernel/debug/tracing/
# echo vfs_read > set_ftrace_filter
# echo 1 > events/probe/vfs_read/enable
# echo function_graph > current_tracer
# echo 0 > trace
# less trace
# tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
 2)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff88036a959200 buf=0x7ffe460abb70 count=0x10 pos=0xffff880052d1bf20 */
 3)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff88024524b900 buf=0x7ffcdee7ec57 count=0x1 pos=0xffff88023942ff20 */
 2)   0.538 us    |  vfs_read();
 3)               |  vfs_read() {
 2)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff8803c24ba400 buf=0xd8efdc count=0x1ff0 pos=0xffff880052d1bf20 */
 2)   0.979 us    |  vfs_read();
...

Thanks,

-- 
Masami Hiramatsu <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Ideas to measure kernel function execution time using perf
  2016-04-19 23:37 ` Masami Hiramatsu
@ 2016-04-20  0:52   ` Qu Wenruo
  2016-04-20  2:02   ` Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 5+ messages in thread
From: Qu Wenruo @ 2016-04-20  0:52 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: linux-perf-users



Masami Hiramatsu wrote on 2016/04/20 08:37 +0900:
> On Tue, 19 Apr 2016 09:42:49 +0800
> Qu Wenruo <quwenruo@cn.fujitsu.com> wrote:
>
>> Hi,
>>
>> Is there any method to measure kernel function execution time for
>> specific functions using perf?
>>
>> Current ftrace events can only record the timestamp when hitting the
>> trace point (along with some other info).
>>
>> I'm OK adding new ftrace events into kernel, but even after adding such
>> ftrace events, is it possible to use perf to calculate the function
>> execution time?
>
> Would you mean "perf probe"? :)
>
> Actually, kprobes on the function entry point (on x86) automatically
> use ftrace and also you can get function parameters, e.g.
>
> # perf probe -a 'YOUR_TARGET_FUNCTION $params'
>
> And with using ftrace, you can get function duration and parameters,
> for example,
>
> # perf probe -a 'vfs_read $params'
> Added new event:
>    probe:vfs_read       (on vfs_read with $params)
>
> You can now use it in all perf tools, such as:
>
> 	perf record -e probe:vfs_read -aR sleep 1
>
> # cd /sys/kernel/debug/tracing/
> # echo vfs_read > set_ftrace_filter
> # echo 1 > events/probe/vfs_read/enable
> # echo function_graph > current_tracer
> # echo 0 > trace
> # less trace
> # tracer: function_graph
> #
> # CPU  DURATION                  FUNCTION CALLS
> # |     |   |                     |   |   |   |
>   2)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff88036a959200 buf=0x7ffe460abb70 count=0x10 pos=0xffff880052d1bf20 */
>   3)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff88024524b900 buf=0x7ffcdee7ec57 count=0x1 pos=0xffff88023942ff20 */
>   2)   0.538 us    |  vfs_read();
>   3)               |  vfs_read() {
>   2)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff8803c24ba400 buf=0xd8efdc count=0x1ff0 pos=0xffff880052d1bf20 */
>   2)   0.979 us    |  vfs_read();
> ...
>
> Thanks,
>
Wow, that's cool.

Thanks for the info, I think it would be good enough for my use case.

Thanks,
Qu

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Ideas to measure kernel function execution time using perf
  2016-04-19 23:37 ` Masami Hiramatsu
  2016-04-20  0:52   ` Qu Wenruo
@ 2016-04-20  2:02   ` Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-04-20  2:02 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: Qu Wenruo, linux-perf-users

Em Wed, Apr 20, 2016 at 08:37:57AM +0900, Masami Hiramatsu escreveu:
> On Tue, 19 Apr 2016 09:42:49 +0800
> Qu Wenruo <quwenruo@cn.fujitsu.com> wrote:
> > Is there any method to measure kernel function execution time for 
> > specific functions using perf?
> > 
> > Current ftrace events can only record the timestamp when hitting the 
> > trace point (along with some other info).
> > 
> > I'm OK adding new ftrace events into kernel, but even after adding such 
> > ftrace events, is it possible to use perf to calculate the function 
> > execution time?
 
> Would you mean "perf probe"? :)
 
> Actually, kprobes on the function entry point (on x86) automatically
> use ftrace and also you can get function parameters, e.g.
 
> # perf probe -a 'YOUR_TARGET_FUNCTION $params'
 
> And with using ftrace, you can get function duration and parameters,
> for example,
 
> # perf probe -a 'vfs_read $params'
> Added new event:
>   probe:vfs_read       (on vfs_read with $params)
 
> You can now use it in all perf tools, such as:
 
> 	perf record -e probe:vfs_read -aR sleep 1

Humm, so this will automagically make function_graph hook in the
function exit, so that it can take the second timestamp to do the
measurement?

I.e. sortof this:

[root@jouet ~]# perf probe -a 'vfs_read_entry=vfs_read $params' 'vfs_read_exit=vfs_read%return'
Added new events:
  probe:vfs_read_entry (on vfs_read with $params)
  probe:vfs_read_exit  (on vfs_read%return)

You can now use it in all perf tools, such as:

	perf record -e probe:vfs_read_exit -aR sleep 1

[root@jouet ~]# perf trace -e read --ev probe:vfs_read* cat /etc/passwd > /dev/null
     0.005 ( 0.005 ms): cat/1167 read(fd: 3, buf: 0x7ffe9d8b63c0, count: 832                           ) ...
     0.005 (         ): probe:vfs_read_entry:(ffffffff8123c450) file=0xffff880161f79600 buf=0x7ffe9d8b63c0 count=0x340 pos=0xffff880109047ef0)
     0.008 (         ): probe:vfs_read_exit:(ffffffff8123c450 <- ffffffff8123d9c5))
     0.009 ( 0.009 ms): cat/1167  ... [continued]: read()) = 832
     0.348 ( 0.003 ms): cat/1167 read(fd: 3, buf: 0x7f33d6d08000, count: 131072                        ) ...
     0.348 (         ): probe:vfs_read_entry:(ffffffff8123c450) file=0xffff8802053ac400 buf=0x7f33d6d08000 count=0x20000 pos=0xffff880109047ef0)
     0.355 (         ): probe:vfs_read_exit:(ffffffff8123c450 <- ffffffff8123d9c5))
     0.356 ( 0.011 ms): cat/1167  ... [continued]: read()) = 2729
     0.361 ( 0.002 ms): cat/1167 read(fd: 3, buf: 0x7f33d6d08000, count: 131072                        ) ...
     0.361 (         ): probe:vfs_read_entry:(ffffffff8123c450) file=0xffff8802053ac400 buf=0x7f33d6d08000 count=0x20000 pos=0xffff880109047ef0)
     0.362 (         ): probe:vfs_read_exit:(ffffffff8123c450 <- ffffffff8123d9c5))
     0.364 ( 0.004 ms): cat/1167  ... [continued]: read()) = 0
[root@jouet ~]# 

But doing the combination of the pairs of vfs_read_{entry,exit} like is done in
'perf trace' for syscalls, i.e. for sys_{enter,exit}_SYSCALL_NAME?

- Arnaldo
 
> # cd /sys/kernel/debug/tracing/
> # echo vfs_read > set_ftrace_filter
> # echo 1 > events/probe/vfs_read/enable
> # echo function_graph > current_tracer
> # echo 0 > trace
> # less trace
> # tracer: function_graph
> #
> # CPU  DURATION                  FUNCTION CALLS
> # |     |   |                     |   |   |   |
>  2)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff88036a959200 buf=0x7ffe460abb70 count=0x10 pos=0xffff880052d1bf20 */
>  3)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff88024524b900 buf=0x7ffcdee7ec57 count=0x1 pos=0xffff88023942ff20 */
>  2)   0.538 us    |  vfs_read();
>  3)               |  vfs_read() {
>  2)               |  /* vfs_read: (vfs_read+0x0/0x130) file=0xffff8803c24ba400 buf=0xd8efdc count=0x1ff0 pos=0xffff880052d1bf20 */
>  2)   0.979 us    |  vfs_read();
> ...
> 
> Thanks,
> 
> -- 
> Masami Hiramatsu <mhiramat@kernel.org>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Ideas to measure kernel function execution time using perf
  2016-04-19  1:42 Ideas to measure kernel function execution time using perf Qu Wenruo
  2016-04-19 23:37 ` Masami Hiramatsu
@ 2016-04-20 13:09 ` Andi Kleen
  1 sibling, 0 replies; 5+ messages in thread
From: Andi Kleen @ 2016-04-20 13:09 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-perf-users

Qu Wenruo <quwenruo@cn.fujitsu.com> writes:

> Hi,
>
> Is there any method to measure kernel function execution time for
> specific functions using perf?

You can use processor trace on newer Intel CPUs (especially
Skylake) for this.

-Andi

-- 
ak@linux.intel.com -- Speaking for myself only

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-04-20 13:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-19  1:42 Ideas to measure kernel function execution time using perf Qu Wenruo
2016-04-19 23:37 ` Masami Hiramatsu
2016-04-20  0:52   ` Qu Wenruo
2016-04-20  2:02   ` Arnaldo Carvalho de Melo
2016-04-20 13:09 ` Andi Kleen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.