lkml.org 
[lkml]   [2018]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.9 004/219] perf stat: Issue a HW watchdog disable hint
    Date
    From: Borislav Petkov <bp@suse.de>

    [ Upstream commit 02d492e5dcb72c004d213756eb87c9d62a6d76a7 ]

    When using perf stat on an AMD F15h system with the default hw events
    attributes, some of the events don't get counted:

    Performance counter stats for 'sleep 1':

    0.749208 task-clock (msec) # 0.001 CPUs utilized
    1 context-switches # 0.001 M/sec
    0 cpu-migrations # 0.000 K/sec
    54 page-faults # 0.072 M/sec
    1,122,815 cycles # 1.499 GHz
    286,740 stalled-cycles-frontend # 25.54% frontend cycles idle
    <not counted> stalled-cycles-backend (0.00%)
    ^^^^^^^^^^^^
    <not counted> instructions (0.00%)
    ^^^^^^^^^^^^
    <not counted> branches (0.00%)
    <not counted> branch-misses (0.00%)

    1.001550070 seconds time elapsed

    The reason is that we have the HW watchdog consuming one PMU counter and
    when perf tries to schedule 6 events on 6 counters and some of those
    counters are constrained to only a specific subset of PMCs by the
    hardware, the event scheduling fails.

    So issue a hint to disable the HW watchdog around a perf stat session.

    Committer note:

    Testing it...

    # perf stat -d usleep 1

    Performance counter stats for 'usleep 1':

    1.180203 task-clock (msec) # 0.490 CPUs utilized
    1 context-switches # 0.847 K/sec
    0 cpu-migrations # 0.000 K/sec
    54 page-faults # 0.046 M/sec
    184,754 cycles # 0.157 GHz
    714,553 instructions # 3.87 insn per cycle
    154,661 branches # 131.046 M/sec
    7,247 branch-misses # 4.69% of all branches
    219,984 L1-dcache-loads # 186.395 M/sec
    17,600 L1-dcache-load-misses # 8.00% of all L1-dcache hits (90.16%)
    <not counted> LLC-loads (0.00%)
    <not counted> LLC-load-misses (0.00%)

    0.002406823 seconds time elapsed

    Some events weren't counted. Try disabling the NMI watchdog:
    echo 0 > /proc/sys/kernel/nmi_watchdog
    perf stat ...
    echo 1 > /proc/sys/kernel/nmi_watchdog
    #

    Signed-off-by: Borislav Petkov <bp@suse.de>
    Acked-by: Ingo Molnar <mingo@kernel.org>
    Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Robert Richter <rric@kernel.org>
    Cc: Vince Weaver <vince@deater.net>
    Link: http://lkml.kernel.org/r/20170211183218.ijnvb5f7ciyuunx4@pd.tnic
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    tools/perf/builtin-stat.c | 11 +++++++++++
    1 file changed, 11 insertions(+)

    diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
    index 688dea7cb08f..c241167c76c9 100644
    --- a/tools/perf/builtin-stat.c
    +++ b/tools/perf/builtin-stat.c
    @@ -146,6 +146,7 @@ static aggr_get_id_t aggr_get_id;
    static bool append_file;
    static const char *output_name;
    static int output_fd;
    +static int print_free_counters_hint;

    struct perf_stat {
    bool record;
    @@ -1109,6 +1110,9 @@ static void printout(int id, int nr, struct perf_evsel *counter, double uval,
    counter->supported ? CNTR_NOT_COUNTED : CNTR_NOT_SUPPORTED,
    csv_sep);

    + if (counter->supported)
    + print_free_counters_hint = 1;
    +
    fprintf(stat_config.output, "%-*s%s",
    csv_output ? 0 : unit_width,
    counter->unit, csv_sep);
    @@ -1477,6 +1481,13 @@ static void print_footer(void)
    avg_stats(&walltime_nsecs_stats));
    }
    fprintf(output, "\n\n");
    +
    + if (print_free_counters_hint)
    + fprintf(output,
    +"Some events weren't counted. Try disabling the NMI watchdog:\n"
    +" echo 0 > /proc/sys/kernel/nmi_watchdog\n"
    +" perf stat ...\n"
    +" echo 1 > /proc/sys/kernel/nmi_watchdog\n");
    }

    static void print_counters(struct timespec *ts, int argc, const char **argv)
    --
    2.14.1
    \
     
     \ /
      Last update: 2022-09-17 16:04    [W:4.894 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site