Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754669Ab2HGM4P (ORCPT ); Tue, 7 Aug 2012 08:56:15 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:25011 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752307Ab2HGM4J (ORCPT ); Tue, 7 Aug 2012 08:56:09 -0400 From: Andrew Vagin To: linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Paul Mackerras , Ingo Molnar , Arnaldo Carvalho de Melo Subject: [PATCH 0/4] perf: Teach perf tool to profile sleep times (v2) Date: Tue, 7 Aug 2012 16:56:01 +0400 Message-Id: <1344344165-369636-1-git-send-email-avagin@openvz.org> X-Mailer: git-send-email 1.7.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2893 Lines: 74 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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/