lkml.org 
[lkml]   [2016]   [Feb]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/7] perf, tools, stat: Add --metric-only support for -A
    Date
    From: Andi Kleen <ak@linux.intel.com>

    Add metric only support for -A too. This requires a new print
    function that prints the metrics in the right order.

    v2: Fix manpage
    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    ---
    tools/perf/Documentation/perf-stat.txt | 2 +-
    tools/perf/builtin-stat.c | 48 ++++++++++++++++++++++++++++------
    2 files changed, 41 insertions(+), 9 deletions(-)

    diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
    index 3929ab0..44095cd 100644
    --- a/tools/perf/Documentation/perf-stat.txt
    +++ b/tools/perf/Documentation/perf-stat.txt
    @@ -141,7 +141,7 @@ The overhead percentage could be high in some cases, for instance with small, su

    --metric-only::
    Only print computed metrics. Print them in a single line.
    -Don't show any raw values. Not supported with -A or --per-thread.
    +Don't show any raw values. Not supported with --per-thread.

    --per-socket::
    Aggregate counts per processor socket for system-wide mode measurements. This
    diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
    index 30bb0ac..78a4205 100644
    --- a/tools/perf/builtin-stat.c
    +++ b/tools/perf/builtin-stat.c
    @@ -1243,10 +1243,43 @@ static void print_counter(struct perf_evsel *counter, char *prefix)
    }
    }

    +static void print_no_aggr_metric(char *prefix)
    +{
    + int cpu;
    + int nrcpus = 0;
    + struct perf_evsel *counter;
    + u64 ena, run, val;
    + double uval;
    +
    + evlist__for_each(evsel_list, counter) {
    + nrcpus = perf_evsel__nr_cpus(counter);
    + break;
    + }
    + for (cpu = 0; cpu < nrcpus; cpu++) {
    + bool first = true;
    +
    + if (prefix)
    + fputs(prefix, stat_config.output);
    + evlist__for_each(evsel_list, counter) {
    + if (first) {
    + aggr_printout(counter, cpu, 0);
    + first = false;
    + }
    + val = perf_counts(counter->counts, cpu, 0)->val;
    + ena = perf_counts(counter->counts, cpu, 0)->ena;
    + run = perf_counts(counter->counts, cpu, 0)->run;
    +
    + uval = val * counter->scale;
    + printout(cpu, 0, counter, uval, prefix, run, ena, 1.0);
    + }
    + fputc('\n', stat_config.output);
    + }
    +}
    +
    static int aggr_header_lens[] = {
    [AGGR_CORE] = 18,
    [AGGR_SOCKET] = 12,
    - [AGGR_NONE] = 15,
    + [AGGR_NONE] = 6,
    [AGGR_THREAD] = 24,
    [AGGR_GLOBAL] = 0,
    };
    @@ -1401,8 +1434,12 @@ static void print_counters(struct timespec *ts, int argc, const char **argv)
    fputc('\n', stat_config.output);
    break;
    case AGGR_NONE:
    - evlist__for_each(evsel_list, counter)
    - print_counter(counter, prefix);
    + if (metric_only)
    + print_no_aggr_metric(prefix);
    + else {
    + evlist__for_each(evsel_list, counter)
    + print_counter(counter, prefix);
    + }
    break;
    case AGGR_UNSET:
    default:
    @@ -2170,11 +2207,6 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused)
    goto out;
    }

    - if (metric_only && stat_config.aggr_mode == AGGR_NONE) {
    - fprintf(stderr, "--metric-only is not supported with -A\n");
    - goto out;
    - }
    -
    if (metric_only && run_count > 1) {
    fprintf(stderr, "--metric-only is not supported with -r\n");
    goto out;
    --
    2.5.0
    \
     
     \ /
      Last update: 2016-03-01 00:01    [W:5.549 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site