lkml.org 
[lkml]   [2017]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf stat: Extend rbtree to support per-thread shadow stats
    Commit-ID:  49cd456af1dcb13ff3e94cb997c82968ae86722a
    Gitweb: https://git.kernel.org/tip/49cd456af1dcb13ff3e94cb997c82968ae86722a
    Author: Jin Yao <yao.jin@linux.intel.com>
    AuthorDate: Tue, 5 Dec 2017 22:03:02 +0800
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Wed, 27 Dec 2017 12:15:42 -0300

    perf stat: Extend rbtree to support per-thread shadow stats

    Previously the rbtree was used to link generic metrics.

    This patches adds new ctx/type/stat into rbtree keys because we will use
    this rbtree to maintain shadow metrics to replace original a couple of
    static arrays for supporting per-thread shadow stats.

    Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1512482591-4646-3-git-send-email-yao.jin@linux.intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/stat-shadow.c | 27 +++++++++++++++++++++++++++
    1 file changed, 27 insertions(+)

    diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
    index 93aac27..528be3e 100644
    --- a/tools/perf/util/stat-shadow.c
    +++ b/tools/perf/util/stat-shadow.c
    @@ -45,7 +45,10 @@ struct stats walltime_nsecs_stats;
    struct saved_value {
    struct rb_node rb_node;
    struct perf_evsel *evsel;
    + enum stat_type type;
    + int ctx;
    int cpu;
    + struct runtime_stat *stat;
    struct stats stats;
    };

    @@ -58,6 +61,30 @@ static int saved_value_cmp(struct rb_node *rb_node, const void *entry)

    if (a->cpu != b->cpu)
    return a->cpu - b->cpu;
    +
    + /*
    + * Previously the rbtree was used to link generic metrics.
    + * The keys were evsel/cpu. Now the rbtree is extended to support
    + * per-thread shadow stats. For shadow stats case, the keys
    + * are cpu/type/ctx/stat (evsel is NULL). For generic metrics
    + * case, the keys are still evsel/cpu (type/ctx/stat are 0 or NULL).
    + */
    + if (a->type != b->type)
    + return a->type - b->type;
    +
    + if (a->ctx != b->ctx)
    + return a->ctx - b->ctx;
    +
    + if (a->evsel == NULL && b->evsel == NULL) {
    + if (a->stat == b->stat)
    + return 0;
    +
    + if ((char *)a->stat < (char *)b->stat)
    + return -1;
    +
    + return 1;
    + }
    +
    if (a->evsel == b->evsel)
    return 0;
    if ((char *)a->evsel < (char *)b->evsel)
    \
     
     \ /
      Last update: 2017-12-28 16:25    [W:4.172 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site