From: Stephane Eranian <eranian@google.com>
To: linux-kernel@vger.kernel.org
Cc: peterz@infradead.org, mingo@elte.hu, ak@linux.intel.com,
acme@redhat.com, jolsa@redhat.com, namhyung.kim@lge.com
Subject: [PATCH v3 04/19] perf, core: Add a concept of a weightened sample
Date: Wed, 21 Nov 2012 13:49:30 +0100 [thread overview]
Message-ID: <1353502185-26521-5-git-send-email-eranian@google.com> (raw)
In-Reply-To: <1353502185-26521-1-git-send-email-eranian@google.com>
From: Andi Kleen <ak@linux.intel.com>
For some events it's useful to weight sample with a hardware
provided number. This expresses how expensive the action the
sample represent was. This allows the profiler to scale
the samples to be more informative to the programmer.
There is already the period which is used similarly, but it means
something different, so I chose to not overload it. Instead
a new sample type for WEIGHT is added.
Can be used for multiple things. Initially it is used for TSX abort costs
and profiling by memory latencies (so to make expensive load appear higher
up in the histograms) The concept is quite generic and can be extended
to many other kinds of events or architectures, as long as the hardware
provides suitable auxillary values. In principle it could be also
used for software tracpoints.
This adds the generic glue. A new optional sample format for a 64bit
weight value.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
include/linux/perf_event.h | 2 ++
include/uapi/linux/perf_event.h | 8 ++++++--
kernel/events/core.c | 6 ++++++
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 484cfbc..bb2429d 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -584,6 +584,7 @@ struct perf_sample_data {
struct perf_branch_stack *br_stack;
struct perf_regs_user regs_user;
u64 stack_user_size;
+ u64 weight;
};
static inline void perf_sample_data_init(struct perf_sample_data *data,
@@ -597,6 +598,7 @@ static inline void perf_sample_data_init(struct perf_sample_data *data,
data->regs_user.abi = PERF_SAMPLE_REGS_ABI_NONE;
data->regs_user.regs = NULL;
data->stack_user_size = 0;
+ data->weight = 0;
}
extern void perf_output_sample(struct perf_output_handle *handle,
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
index 4f63c05..c52caab 100644
--- a/include/uapi/linux/perf_event.h
+++ b/include/uapi/linux/perf_event.h
@@ -132,8 +132,10 @@ enum perf_event_sample_format {
PERF_SAMPLE_BRANCH_STACK = 1U << 11,
PERF_SAMPLE_REGS_USER = 1U << 12,
PERF_SAMPLE_STACK_USER = 1U << 13,
+ PERF_SAMPLE_WEIGHT = 1U << 14,
+
+ PERF_SAMPLE_MAX = 1U << 15, /* non-ABI */
- PERF_SAMPLE_MAX = 1U << 14, /* non-ABI */
};
/*
@@ -198,8 +200,9 @@ enum perf_event_read_format {
PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1,
PERF_FORMAT_ID = 1U << 2,
PERF_FORMAT_GROUP = 1U << 3,
+ PERF_FORMAT_WEIGHT = 1U << 4,
- PERF_FORMAT_MAX = 1U << 4, /* non-ABI */
+ PERF_FORMAT_MAX = 1U << 5, /* non-ABI */
};
#define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */
@@ -559,6 +562,7 @@ enum perf_event_type {
* { u64 stream_id;} && PERF_SAMPLE_STREAM_ID
* { u32 cpu, res; } && PERF_SAMPLE_CPU
* { u64 period; } && PERF_SAMPLE_PERIOD
+ * { u64 weight; } && PERF_SAMPLE_WEIGHT
*
* { struct read_format values; } && PERF_SAMPLE_READ
*
diff --git a/kernel/events/core.c b/kernel/events/core.c
index dbccf83..d633581 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -952,6 +952,9 @@ static void perf_event__header_size(struct perf_event *event)
if (sample_type & PERF_SAMPLE_PERIOD)
size += sizeof(data->period);
+ if (sample_type & PERF_SAMPLE_WEIGHT)
+ size += sizeof(data->weight);
+
if (sample_type & PERF_SAMPLE_READ)
size += event->read_size;
@@ -4080,6 +4083,9 @@ void perf_output_sample(struct perf_output_handle *handle,
if (sample_type & PERF_SAMPLE_PERIOD)
perf_output_put(handle, data->period);
+ if (sample_type & PERF_SAMPLE_WEIGHT)
+ perf_output_put(handle, data->weight);
+
if (sample_type & PERF_SAMPLE_READ)
perf_output_read(handle, event);
--
1.7.9.5
next prev parent reply other threads:[~2012-11-21 12:55 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-21 12:49 [PATCH v3 00/16] perf: add memory access sampling support Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 01/19] perf, x86: Support CPU specific sysfs events Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 02/19] perf/x86: improve sysfs event mapping with event string Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 03/19] perf/x86: add flags to event constraints Stephane Eranian
2012-11-21 12:49 ` Stephane Eranian [this message]
2012-11-28 15:23 ` [PATCH v3 04/19] perf, core: Add a concept of a weightened sample Jiri Olsa
2012-11-28 15:27 ` Andi Kleen
2012-11-21 12:49 ` [PATCH v3 05/19] perf: add minimal support for PERF_SAMPLE_WEIGHT Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 06/19] perf: add support for PERF_SAMPLE_ADDR in dump_sampple() Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 07/19] perf: add generic memory sampling interface Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 08/19] perf/x86: add memory profiling via PEBS Load Latency Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 09/19] perf/x86: export PEBS load latency threshold register to sysfs Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 10/19] perf/x86: add support for PEBS Precise Store Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 11/19] perf tools: add mem access sampling core support Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 12/19] perf report: add support for mem access profiling Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 13/19] perf record: " Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 14/19] perf tools: add new mem command for memory " Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 15/19] perf: add PERF_RECORD_MISC_MMAP_DATA to RECORD_MMAP Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 16/19] perf tools: detect data vs. text mappings Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 17/19] perf tools: Synthesize data mmap events for threads Stephane Eranian
2012-11-21 12:49 ` [PATCH v3 18/19] perf tools: Ignore ABS symbols when loading data maps Stephane Eranian
2013-01-24 18:44 ` [tip:perf/core] perf symbols: " tip-bot for Namhyung Kim
2012-11-21 12:49 ` [PATCH v3 19/19] perf tools: Fix output of symbol_daddr offset Stephane Eranian
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1353502185-26521-5-git-send-email-eranian@google.com \
--to=eranian@google.com \
--cc=acme@redhat.com \
--cc=ak@linux.intel.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=namhyung.kim@lge.com \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox