This functionality helps to analize where a task sleeps or waits locks. This feature can help to investigate a scalability problems.
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 # 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 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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/