Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755472Ab3IYMvJ (ORCPT ); Wed, 25 Sep 2013 08:51:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:14811 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755202Ab3IYMvH (ORCPT ); Wed, 25 Sep 2013 08:51:07 -0400 From: Jiri Olsa To: linux-kernel@vger.kernel.org Cc: Jiri Olsa , Arnaldo Carvalho de Melo , Corey Ashford , Frederic Weisbecker , Ingo Molnar , Paul Mackerras , Peter Zijlstra , Don Zickus , Andi Kleen , Adrian Hunter , Stephane Eranian Subject: [RFC 00/21] perf tools: Add toggling events support Date: Wed, 25 Sep 2013 14:50:26 +0200 Message-Id: <1380113447-17144-1-git-send-email-jolsa@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 7144 Lines: 160 hi, sending *RFC* for toggling events support. Adding perf interface that allows to create toggle events, which can enable or disable another event. Whenever the toggle event is triggered (has overflow), it toggles another event state and either starts or stops it. The goal is to be able to create toggling tracepoint events to enable and disable HW counters, but the interface is generic enough to be used for any kind of event. It's based on the Frederic's patchset: https://lkml.org/lkml/2011/3/14/346 Most of the changelogs info is on wiki: https://perf.wiki.kernel.org/index.php/Jolsa_Features_Togle_Event In a nutshell: The interface is added to the sys_perf_event_open syscall and new ioctl was added for completeness, check: perf: Add event toggle sys_perf_event_open interface perf: Add event toggle ioctl interface The perf tool interface is pretty rough at the moment. We use 'on' and 'off' terms to specify the toggling event, like: -e 'cycles,irq_entry/on=cycles/,irq_exit/off=cycles/' Meaning: - irq_entry toggles on (starts) cycles, and irq_exit toggled off (stops) cycles. - cycles is started as paused Looking forward to some ideas for better interface in here ;-) The patchset is available at: git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git perf/core_toggle thanks for comments, jirka Example: Define toggle(on/off) events: # perf probe -a fork_entry=do_fork # perf probe -a fork_exit=do_fork%return Following record session samples only within do_fork function: # perf record -g -e '{cycles,cache-misses}:k,probe:fork_entry/on=cycles/,probe:fork_exit/off=cycles/' \ perf bench sched messaging Following stat session measure cycles within do_fork function: # perf stat -e '{cycles,cache-misses}:k,probe:fork_entry/on=cycles/,probe:fork_exit/off=cycles/' \ perf bench sched messaging # Running sched/messaging benchmark... # 20 sender and receiver processes per group # 1 groups == 40 processes run Total time: 0.073 [sec] Performance counter stats for './perf bench sched messaging -g 1': 20,935,464 cycles # 0.000 GHz 18,897 cache-misses 40 probe:fork_entry 40 probe:fork_exit 0.086319682 seconds time elapsed Example: Measure interrupts cycles: # ./perf stat -e 'cycles,cycles/name=cycles_irq/,irq:irq_handler_entry/on=cycles_irq/,irq:irq_handler_exit/off=cycles_irq/' -a sleep 10 Performance counter stats for 'sleep 10': 50,680,084,994 cycles # 0.000 GHz [100.00%] 652,690 cycles_irq # 0.000 GHz 33 irq:irq_handler_entry [100.00%] 33 irq:irq_handler_exit 10.002084400 seconds time elapsed Check uprobes example at: https://perf.wiki.kernel.org/index.php/Jolsa_Features_Togle_Event#Example_-_using_u.28ret.29probes Signed-off-by: Frederic Weisbecker Signed-off-by: Jiri Olsa Cc: Arnaldo Carvalho de Melo Cc: Corey Ashford Cc: Frederic Weisbecker Cc: Ingo Molnar Cc: Paul Mackerras Cc: Peter Zijlstra Cc: Arnaldo Carvalho de Melo Cc: Don Zickus Cc: Andi Kleen Cc: Adrian Hunter Cc: Stephane Eranian --- Frederic Weisbecker (2): perf: Be more specific on pmu related event init naming perf: Split allocation and initialization code Jiri Olsa (19): perf tools: Introduce perf_evlist__wait_workload function perf tools: Separate sys_perf_event_open call into evsel_open perf x86: Update event count properly for read syscall perf: Move event state initialization before/behind the pmu add/del calls perf: Add event toggle sys_perf_event_open interface perf: Add event toggle ioctl interface perf: Toggle whole group in toggle event overflow perf: Add new 'paused' attribute perf: Account toggle masters for toggled event perf: Support event inheritance for toggle feature perf tests: Adding event simple toggling test perf tests: Adding event group toggling test perf tests: Adding event inherit toggling test perf tools: Allow numeric event to change name via name term perf tools: Add event_config_optional parsing rule perf tools: Rename term related parsing function/variable properly perf tools: Carry term string value for symbols events perf tools: Add support to parse event on/off toggle terms perf tools: Add record/stat support for toggling events arch/x86/kernel/cpu/perf_event.c | 6 +- include/linux/perf_event.h | 12 +++ include/uapi/linux/perf_event.h | 7 +- kernel/events/core.c | 396 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- tools/perf/Makefile | 6 ++ tools/perf/arch/x86/tests/toggle-event-raw-64.S | 28 ++++++ tools/perf/builtin-record.c | 7 ++ tools/perf/builtin-stat.c | 12 +++ tools/perf/tests/builtin-test.c | 12 +++ tools/perf/tests/perf-record.c | 1 + tools/perf/tests/task-exit.c | 5 ++ tools/perf/tests/tests.h | 3 + tools/perf/tests/toggle-event-group.c | 195 +++++++++++++++++++++++++++++++++++++++++ tools/perf/tests/toggle-event-inherit.c | 132 ++++++++++++++++++++++++++++ tools/perf/tests/toggle-event-raw.c | 106 ++++++++++++++++++++++ tools/perf/util/evlist.c | 97 +++++++++++++++++++++ tools/perf/util/evlist.h | 3 + tools/perf/util/evsel.c | 53 ++++++----- tools/perf/util/evsel.h | 4 + tools/perf/util/parse-events.c | 131 +++++++++++++++++++--------- tools/perf/util/parse-events.h | 9 +- tools/perf/util/parse-events.l | 6 +- tools/perf/util/parse-events.y | 68 +++++++++------ tools/perf/util/record.c | 2 + 24 files changed, 1167 insertions(+), 134 deletions(-) create mode 100644 tools/perf/arch/x86/tests/toggle-event-raw-64.S create mode 100644 tools/perf/tests/toggle-event-group.c create mode 100644 tools/perf/tests/toggle-event-inherit.c create mode 100644 tools/perf/tests/toggle-event-raw.c -- 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/