From: kan.liang@intel.com
To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org,
linux-kernel@vger.kernel.org
Cc: alexander.shishkin@linux.intel.com, tglx@linutronix.de,
namhyung@kernel.org, jolsa@kernel.org, adrian.hunter@intel.com,
wangnan0@huawei.com, mark.rutland@arm.com, andi@firstfloor.org,
Kan Liang <kan.liang@intel.com>
Subject: [PATCH V2 13/13] perf report: warn on high overhead
Date: Fri, 2 Dec 2016 16:19:21 -0500 [thread overview]
Message-ID: <1480713561-6617-14-git-send-email-kan.liang@intel.com> (raw)
In-Reply-To: <1480713561-6617-1-git-send-email-kan.liang@intel.com>
From: Kan Liang <kan.liang@intel.com>
Warning the user if the overhead is too high.
The overhead evaluation metrics is as below.
- Kerenl profiling cost evaluation
MAX(cpu0_overhead, cpu1_overhead,...) / perf monotonic wall time
If the rate is > 10%, a warning is printed.
- perf record profiling cost evaluation
CPU time of perf record / perf monotonic wall time
If the rate is > 50%, a warning is printed.
Here is an example of output.
Warning:
Perf kernel profiling cost is high! The cost rate is 15.30%
Please consider reducing the number of events, or increasing the period,
or decrease the frequency.
# To display the perf.data header info, please use
--header/--header-only options.
#
# ========
# Elapsed time: 120345432522(ns)
# Perf record cpu time: 505470324(ns)
#
# CPU SAM SAM cost(ns) MUX MUX cost(ns) SB
SB cost(ns)
# -1 2247030 1705370307 111354 3111550168 1237358
13591276893
# ========
#
Signed-off-by: Kan Liang <kan.liang@intel.com>
---
tools/perf/util/session.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 7cf9e1d..1188a1a 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1563,6 +1563,52 @@ perf_session__warn_order(const struct perf_session *session)
ui__warning("%u out of order events recorded.\n", oe->nr_unordered_events);
}
+static void
+perf_session__warn_overhead(const struct perf_session *session)
+{
+ const struct events_stats *stats = &session->evlist->stats;
+ double overhead_rate;
+ u64 overhead, max;
+ int cpu;
+ int i;
+
+ overhead = stats->overhead.total_sample[MAX_NR_CPUS].time;
+ overhead += stats->overhead.total_mux[MAX_NR_CPUS].time;
+ overhead += stats->overhead.total_sb[MAX_NR_CPUS].time;
+ max = overhead;
+ cpu = -1;
+
+ for (i = 0; i < session->header.env.nr_cpus_online; i++) {
+ overhead = stats->overhead.total_sample[i].time;
+ overhead += stats->overhead.total_mux[i].time;
+ overhead += stats->overhead.total_sb[i].time;
+ if (overhead > max) {
+ max = overhead;
+ cpu = i;
+ }
+ }
+ overhead_rate = (double)max / (double)stats->elapsed_time;
+
+ if (overhead_rate > 0.1) {
+ if (cpu > 0) {
+ ui__warning("Perf kernel profiling cost is high! The cost rate is %3.2f%% on CPU %d\n\n"
+ "Please consider reducing the number of events, or increasing the period, or decrease the frequency.\n\n",
+ overhead_rate * 100.0, cpu);
+ } else {
+ ui__warning("Perf kernel profiling cost is high! The cost rate is %3.2f%%\n\n"
+ "Please consider reducing the number of events, or increasing the period, or decrease the frequency.\n\n",
+ overhead_rate * 100.0);
+ }
+ }
+
+ overhead_rate = (double)stats->cpu_time / (double)stats->elapsed_time;
+ if (overhead_rate > 0.5) {
+ ui__warning("Perf record profiling cost is high! The cost rate is %3.2f%%\n\n"
+ "Please consider reducing the number of events, or increasing the period, or decrease the frequency.\n\n",
+ overhead_rate * 100.0);
+ }
+}
+
static void perf_session__warn_about_errors(const struct perf_session *session)
{
const struct events_stats *stats = &session->evlist->stats;
@@ -1636,6 +1682,8 @@ static void perf_session__warn_about_errors(const struct perf_session *session)
"Increase it by --proc-map-timeout\n",
stats->nr_proc_map_timeout);
}
+
+ perf_session__warn_overhead(session);
}
static int perf_session__flush_thread_stack(struct thread *thread,
--
2.5.5
prev parent reply other threads:[~2016-12-02 21:22 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-02 21:19 [PATCH V2 00/13] export perf overheads information kan.liang
2016-12-02 21:19 ` [PATCH V2 01/13] perf/core: Introduce PERF_RECORD_OVERHEAD kan.liang
2016-12-06 11:26 ` Peter Zijlstra
2016-12-02 21:19 ` [PATCH V2 02/13] perf/core: output overhead when sched out from context kan.liang
2016-12-06 11:21 ` Peter Zijlstra
2016-12-02 21:19 ` [PATCH V2 03/13] perf/x86: output sampling overhead kan.liang
2016-12-06 11:20 ` Peter Zijlstra
2016-12-06 15:02 ` Liang, Kan
2016-12-06 15:32 ` Peter Zijlstra
2016-12-06 15:47 ` Liang, Kan
2016-12-06 18:26 ` Peter Zijlstra
2016-12-07 19:03 ` Liang, Kan
2016-12-06 11:38 ` Peter Zijlstra
2016-12-02 21:19 ` [PATCH V2 04/13] perf/core: output multiplexing overhead kan.liang
2016-12-06 11:23 ` Peter Zijlstra
2016-12-06 15:04 ` Liang, Kan
2016-12-02 21:19 ` [PATCH V2 05/13] perf/core: output side-band events overhead kan.liang
2016-12-06 11:25 ` Peter Zijlstra
2016-12-02 21:19 ` [PATCH V2 06/13] perf tools: option to disable overhead collection kan.liang
2016-12-02 21:19 ` [PATCH V2 07/13] perf tools: handle PERF_RECORD_OVERHEAD record type kan.liang
2016-12-06 11:16 ` Jiri Olsa
2016-12-02 21:19 ` [PATCH V2 08/13] perf tools: show kernel overhead kan.liang
2016-12-06 11:16 ` Jiri Olsa
2016-12-06 11:16 ` Jiri Olsa
2016-12-06 11:16 ` Jiri Olsa
2016-12-02 21:19 ` [PATCH V2 09/13] perf script: " kan.liang
2016-12-04 21:25 ` Jiri Olsa
2016-12-05 14:47 ` Liang, Kan
2016-12-02 21:19 ` [PATCH V2 10/13] perf tools: add time related functions kan.liang
2016-12-06 11:16 ` Jiri Olsa
2016-12-02 21:19 ` [PATCH V2 11/13] perf tools: introduce PERF_RECORD_USER_OVERHEAD kan.liang
2016-12-02 21:19 ` [PATCH V2 12/13] perf tools: record user space profiling cost kan.liang
2016-12-02 21:19 ` kan.liang [this message]
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=1480713561-6617-14-git-send-email-kan.liang@intel.com \
--to=kan.liang@intel.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=andi@firstfloor.org \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=wangnan0@huawei.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.