lkml.org 
[lkml]   [2016]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 01/14] perf/x86: Introduce PERF_RECORD_OVERHEAD
    On Wed, Nov 23, 2016 at 04:44:39AM -0500, kan.liang@intel.com wrote:
    > From: Kan Liang <kan.liang@intel.com>
    >
    > A new perf record is introduced to export perf overhead information to
    > userspace. So we can measure the overhead of sampling directly.
    >
    > To output the overhead information, it takes advantage of the existing
    > event log mechanism. But the overhead information is the system
    > overhead, not per-event overhead.
    >
    > Signed-off-by: Kan Liang <kan.liang@intel.com>
    > ---
    > include/linux/perf_event.h | 4 ++++
    > include/uapi/linux/perf_event.h | 29 +++++++++++++++++++++++++++
    > kernel/events/core.c | 43 +++++++++++++++++++++++++++++++++++++++++
    > 3 files changed, 76 insertions(+)
    >
    > diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
    > index 4741ecd..3a530a7 100644
    > --- a/include/linux/perf_event.h
    > +++ b/include/linux/perf_event.h
    > @@ -998,6 +998,10 @@ perf_event__output_id_sample(struct perf_event *event,
    > extern void
    > perf_log_lost_samples(struct perf_event *event, u64 lost);
    >
    > +extern void
    > +perf_log_overhead(struct perf_event *event, u32 type,
    > + struct perf_overhead_entry *entry);
    > +
    > static inline bool is_sampling_event(struct perf_event *event)
    > {
    > return event->attr.sample_period != 0;
    > diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
    > index c66a485..ae571be 100644
    > --- a/include/uapi/linux/perf_event.h
    > +++ b/include/uapi/linux/perf_event.h
    > @@ -862,6 +862,17 @@ enum perf_event_type {
    > */
    > PERF_RECORD_SWITCH_CPU_WIDE = 15,
    >
    > + /*
    > + * Records perf overhead
    > + * struct {
    > + * struct perf_event_header header;
    > + * u32 type;
    > + * struct perf_overhead_entry entry;
    > + * struct sample_id sample_id;
    > + * };
    > + */
    > + PERF_RECORD_OVERHEAD = 16,
    > +
    > PERF_RECORD_MAX, /* non-ABI */
    > };

    I think we should make this optional/configurable like the
    rest of the aux events, like below..

    jirka


    ---
    diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
    index 5e7c52278ef0..853a919bd9ae 100644
    --- a/include/uapi/linux/perf_event.h
    +++ b/include/uapi/linux/perf_event.h
    @@ -344,7 +344,8 @@ struct perf_event_attr {
    use_clockid : 1, /* use @clockid for time fields */
    context_switch : 1, /* context switch data */
    write_backward : 1, /* Write ring buffer from end to beginning */
    - __reserved_1 : 36;
    + overhead : 1,
    + __reserved_1 : 35;

    union {
    __u32 wakeup_events; /* wakeup every n events */
    \
     
     \ /
      Last update: 2016-11-24 00:42    [W:2.575 / U:1.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site