Messages in this thread Patch in this message |  | | | Date | Tue, 27 Oct 2009 02:50:09 +0530 | | From | "K.Prasad" <> | | Subject | [RFC Patch 4/4] Enable perf-events to use hw-breakpoints |
Enable perf-events to collect memory access statistics on kernel-space data in the context of a running process.
TODO: Fix issues caused by this patch to parsing of other events. Allow kernel-space addresses to be specified in addition to symbol name. Fix the issues seen with the target process when run through perf.
Signed-off-by: K.Prasad <prasad@linux.vnet.ibm.com> --- include/linux/perf_event.h | 17 ++++++ kernel/perf_event.c | 101 ++++++++++++++++++++++++++++++++++++++++- tools/perf/util/parse-events.c | 42 +++++++++++++++++ 3 files changed, 159 insertions(+), 1 deletion(-) Index: linux-2.6-tip.perf_hbkpt/include/linux/perf_event.h =================================================================== --- linux-2.6-tip.perf_hbkpt.orig/include/linux/perf_event.h +++ linux-2.6-tip.perf_hbkpt/include/linux/perf_event.h @@ -31,6 +31,7 @@ enum perf_type_id { PERF_TYPE_TRACEPOINT = 2, PERF_TYPE_HW_CACHE = 3, PERF_TYPE_RAW = 4, + PERF_TYPE_BREAKPOINT = 5, PERF_TYPE_MAX, /* non-ABI */ }; @@ -106,6 +107,14 @@ enum perf_sw_ids { PERF_COUNT_SW_MAX, /* non-ABI */ }; +/* Various breakpoint types for monitoring accesses over variables */ +enum perf_bp_id { + PERF_COUNT_BP_WRITE = 0, + PERF_COUNT_BP_RW = 1, + + PERF_COUNT_BP_MAX, /* non-ABI */ +}; + /* * Bits that can be set in attr.sample_type to request information * in the overflow packets. @@ -207,6 +216,10 @@ struct perf_event_attr { __u32 wakeup_events; /* wakeup every n events */ __u32 wakeup_watermark; /* bytes before wakeup */ }; + + /* Store the symbol name for breakpoint request */ + char ksym_name[128]; + __u32 __reserved_2; __u64 __reserved_3; @@ -476,6 +489,10 @@ struct hw_perf_event { s64 remaining; struct hrtimer hrtimer; }; + struct { /* hardware breakpoints */ + struct hw_breakpoint *bp; + int counter; + }; }; atomic64_t prev_count; u64 sample_period; Index: linux-2.6-tip.perf_hbkpt/kernel/perf_event.c =================================================================== --- linux-2.6-tip.perf_hbkpt.orig/kernel/perf_event.c +++ linux-2.6-tip.perf_hbkpt/kernel/perf_event.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Thomas Gleixner <tglx@linutronix.de> * Copyright (C) 2008-2009 Red Hat, Inc., Ingo Molnar * Copyright (C) 2008-2009 Red Hat, Inc., Peter Zijlstra <pzijlstr@redhat.com> - * Copyright |  |