Re: [PATCH 0/4] perf: Teach perf tool to profile sleep times (v2)

From: Namhyung Kim
Date: Tue Aug 07 2012 - 20:38:21 EST


Hi, Andrew

On Tue, 7 Aug 2012 16:56:01 +0400, Andrew Vagin wrote:
> This functionality helps to analize where a task sleeps or waits locks.
> This feature can help to investigate a scalability problems.
>
Looks like a nice feature.


> The main idea is that we can combine sched_switch and sched_stat_sleep events.
> sched_switch contains a callchain, when a task starts sleeping.
> sched_stat_sleep contains a time period for which a task slept.
>
> This series teaches "perf inject" to combine this events.
>
> All kernel related patches were committed committed in 3.6-rc1.
>
> Here is an example of a report:
> $ cat ~/foo.c
> ....
> for (i = 0; i < 10; i++) {
> ts1.tv_sec = 0;
> ts1.tv_nsec = 10000000;
> nanosleep(&ts1, NULL);
>
> tv1.tv_sec = 0;
> tv1.tv_usec = 40000;
> select(0, NULL, NULL, NULL,&tv1);
> }
> ...
>
> $ ./perf record -e sched:sched_stat_sleep -e sched:sched_switch \
> -e sched:sched_process_exit -gP -o ~/perf.data.raw ~/foo
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.015 MB /root/perf.data.raw (~661 samples) ]
> $ ./perf inject -v -s -i ~/perf.data.raw -o ~/perf.data
> $ ./perf report -i ~/perf.data

The usage like this is too specific and hard to use IMHO. How about
putting it somehow into perf sched or new command?

/me don't have an idea though. :-)


> # Samples: 40 of event 'sched:sched_switch'
> # Event count (approx.): 1005527702
> #
> # Overhead Command Shared Object Symbol
> # ........ ....... ................. ..............
> #
> 100.00% foo [kernel.kallsyms] [k] __schedule
> |
> --- __schedule
> schedule
> |
> |--79.81%-- schedule_hrtimeout_range_clock
> | schedule_hrtimeout_range
> | poll_schedule_timeout
> | do_select
> | core_sys_select
> | sys_select
> | system_call_fastpath
> | __select
> | __libc_start_main
> |
> --20.19%-- do_nanosleep
> hrtimer_nanosleep
> sys_nanosleep
> system_call_fastpath
> __GI___libc_nanosleep
> __libc_start_main
>
> Andrew Vagin (3):
> perf: teach "perf inject" to work with files
> perf: teach perf inject to merge sched_stat_* and sched_switch events
> perf: mark a dso if it's used
>

Seems to be outdated.

Thanks,
Namhyung


> tools/perf/builtin-inject.c | 139 ++++++++++++++++++++++++++++++++++++++++---
> tools/perf/util/build-id.c | 2 +-
> tools/perf/util/build-id.h | 5 ++
> 3 files changed, 137 insertions(+), 9 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/