LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Jin Yao <yao.jin@linux.intel.com>
To: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org,
mingo@redhat.com, alexander.shishkin@linux.intel.com
Cc: Linux-kernel@vger.kernel.org, ak@linux.intel.com,
kan.liang@intel.com, yao.jin@intel.com,
Jin Yao <yao.jin@linux.intel.com>
Subject: [PATCH v2 09/14] perf util: Add new block info fmts for showing hot blocks comparison
Date: Fri, 13 Mar 2020 15:11:13 +0800 [thread overview]
Message-ID: <20200313071118.11983-10-yao.jin@linux.intel.com> (raw)
In-Reply-To: <20200313071118.11983-1-yao.jin@linux.intel.com>
We support three new columns in output
New Stream Diff(cycles%,cycles):
The diff of 'Sampled Cycles%' and 'Avg Cycles' between new stream
and old stream for the same block.
If block is not matched, it reports "[block not in new stream]" or
"[block changed in new stream]".
New Stream Sampled Cycles%:
The 'Sampled Cycles%' of the block in new stream. It's only reported
when the block is changed in new stream.
New Stream Avg Cycles:
The 'Average Cycles' of the block in new stream. It's only reported
when the block is changed in new stream.
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
tools/perf/util/block-info.c | 117 ++++++++++++++++++++++++++++++++++-
tools/perf/util/block-info.h | 4 ++
2 files changed, 120 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/block-info.c b/tools/perf/util/block-info.c
index 431cd97bae39..96b7b81cabd5 100644
--- a/tools/perf/util/block-info.c
+++ b/tools/perf/util/block-info.c
@@ -41,7 +41,19 @@ static struct block_header_column {
[PERF_HPP_REPORT__BLOCK_DSO] = {
.name = "Shared Object",
.width = 20,
- }
+ },
+ [PERF_HPP__BLOCK_NEW_STREAM_DIFF] = {
+ .name = "New Stream Diff(cycles%,cycles)",
+ .width = 31,
+ },
+ [PERF_HPP__BLOCK_NEW_STREAM_TOTAL_CYCLES_PCT] = {
+ .name = "New Stream Sampled Cycles%",
+ .width = 26,
+ },
+ [PERF_HPP__BLOCK_NEW_STREAM_AVG_CYCLES] = {
+ .name = "New Stream Avg Cycles",
+ .width = 21,
+ },
};
struct block_info *block_info__get(struct block_info *bi)
@@ -342,6 +354,100 @@ static int block_dso_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp,
"[unknown]");
}
+static int block_new_stream_diff_entry(struct perf_hpp_fmt *fmt,
+ struct perf_hpp *hpp,
+ struct hist_entry *he)
+{
+ struct block_fmt *block_fmt = container_of(fmt, struct block_fmt, fmt);
+ struct hist_entry *pair = hist_entry__next_pair(he);
+ struct block_info *bi_h, *bi_p;
+ double ratio_h = 0.0, ratio_p = 0.0;
+ s64 cycles_diff;
+ char buf[32];
+
+ if (!pair) {
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width,
+ "[block not in new stream]");
+ }
+
+ bi_h = he->block_info;
+ bi_p = pair->block_info;
+
+ if (bi_p->block_changed) {
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width,
+ "[block changed in new stream]");
+ }
+
+ if (bi_h->total_cycles)
+ ratio_h = (double)bi_h->cycles / (double)bi_h->total_cycles;
+
+ if (bi_p->total_cycles)
+ ratio_p = (double)bi_p->cycles / (double)bi_p->total_cycles;
+
+ cycles_diff = (s64)(bi_p->cycles_aggr / bi_p->num_aggr) -
+ (s64)(bi_h->cycles_aggr / bi_h->num_aggr);
+
+ snprintf(buf, sizeof(buf), "%4.2f%%, %4ld",
+ 100.0 * (ratio_p - ratio_h), cycles_diff);
+
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width, buf);
+}
+
+static int block_new_stream_total_cycles_pct_entry(struct perf_hpp_fmt *fmt,
+ struct perf_hpp *hpp,
+ struct hist_entry *he)
+{
+ struct block_fmt *block_fmt = container_of(fmt, struct block_fmt, fmt);
+ struct hist_entry *pair = hist_entry__next_pair(he);
+ struct block_info *bi_p;
+ double ratio = 0.0;
+
+ if (!pair) {
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width,
+ "-");
+ }
+
+ bi_p = pair->block_info;
+
+ if (!bi_p->block_changed) {
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width,
+ "-");
+ }
+
+ if (bi_p->total_cycles)
+ ratio = (double)bi_p->cycles / (double)bi_p->total_cycles;
+
+ return color_pct(hpp, block_fmt->width, 100.0 * ratio);
+}
+
+static int block_new_stream_avg_cycles_entry(struct perf_hpp_fmt *fmt,
+ struct perf_hpp *hpp,
+ struct hist_entry *he)
+{
+ struct block_fmt *block_fmt = container_of(fmt, struct block_fmt, fmt);
+ struct hist_entry *pair = hist_entry__next_pair(he);
+ struct block_info *bi_p;
+ char cycles_buf[16];
+
+ if (!pair) {
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width,
+ "-");
+ }
+
+ bi_p = pair->block_info;
+
+ if (!bi_p->block_changed) {
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width,
+ "-");
+ }
+
+ cycles_string(bi_p->cycles_aggr / bi_p->num_aggr, cycles_buf,
+ sizeof(cycles_buf));
+
+ return scnprintf(hpp->buf, hpp->size, "%*s", block_fmt->width,
+ cycles_buf);
+}
+
static void init_block_header(struct block_fmt *block_fmt)
{
struct perf_hpp_fmt *fmt = &block_fmt->fmt;
@@ -385,6 +491,15 @@ static void hpp_register(struct block_fmt *block_fmt, int idx,
case PERF_HPP_REPORT__BLOCK_DSO:
fmt->entry = block_dso_entry;
break;
+ case PERF_HPP__BLOCK_NEW_STREAM_DIFF:
+ fmt->entry = block_new_stream_diff_entry;
+ break;
+ case PERF_HPP__BLOCK_NEW_STREAM_TOTAL_CYCLES_PCT:
+ fmt->entry = block_new_stream_total_cycles_pct_entry;
+ break;
+ case PERF_HPP__BLOCK_NEW_STREAM_AVG_CYCLES:
+ fmt->entry = block_new_stream_avg_cycles_entry;
+ break;
default:
return;
}
diff --git a/tools/perf/util/block-info.h b/tools/perf/util/block-info.h
index 458bd998089d..4e22bce81731 100644
--- a/tools/perf/util/block-info.h
+++ b/tools/perf/util/block-info.h
@@ -22,6 +22,7 @@ struct block_info {
refcount_t refcnt;
struct block_line *line;
bool srcline_matched;
+ bool block_changed;
};
struct block_fmt {
@@ -40,6 +41,9 @@ enum {
PERF_HPP_REPORT__BLOCK_AVG_CYCLES,
PERF_HPP_REPORT__BLOCK_RANGE,
PERF_HPP_REPORT__BLOCK_DSO,
+ PERF_HPP__BLOCK_NEW_STREAM_DIFF,
+ PERF_HPP__BLOCK_NEW_STREAM_TOTAL_CYCLES_PCT,
+ PERF_HPP__BLOCK_NEW_STREAM_AVG_CYCLES,
PERF_HPP_REPORT__BLOCK_MAX_INDEX
};
--
2.17.1
next prev parent reply other threads:[~2020-03-13 7:12 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-13 7:11 [PATCH v2 00/14] perf: Stream comparison Jin Yao
2020-03-13 7:11 ` [PATCH v2 01/14] perf util: Create source line mapping table Jin Yao
2020-03-13 7:11 ` [PATCH v2 02/14] perf util: Create streams for managing top N hottest callchains Jin Yao
2020-03-13 7:11 ` [PATCH v2 03/14] perf util: Return per-event callchain streams Jin Yao
2020-03-13 7:11 ` [PATCH v2 04/14] perf util: Compare two streams Jin Yao
2020-03-13 7:11 ` [PATCH v2 05/14] perf util: Calculate the sum of all streams hits Jin Yao
2020-03-13 7:11 ` [PATCH v2 06/14] perf util: Report hot streams Jin Yao
2020-03-13 7:11 ` [PATCH v2 07/14] perf diff: Support hot streams comparison Jin Yao
2020-03-13 7:11 ` [PATCH v2 08/14] perf util: Add new block info functions for top N hot blocks comparison Jin Yao
2020-03-13 7:11 ` Jin Yao [this message]
2020-03-13 7:11 ` [PATCH v2 10/14] perf util: Enable block source line comparison Jin Yao
2020-03-13 7:11 ` [PATCH v2 11/14] perf diff: support hot blocks comparison Jin Yao
2020-03-13 7:11 ` [PATCH v2 12/14] perf util: Filter out streams by name of changed functions Jin Yao
2020-03-13 7:11 ` [PATCH v2 13/14] perf util: Filter out blocks " Jin Yao
2020-03-13 7:11 ` [PATCH v2 14/14] perf diff: Filter out streams by " Jin Yao
2020-03-18 10:19 ` [PATCH v2 00/14] perf: Stream comparison Jiri Olsa
2020-03-19 1:48 ` Jin, Yao
2020-03-23 11:05 ` Jiri Olsa
2020-03-23 13:59 ` Jin, Yao
2020-03-23 14:37 ` Jiri Olsa
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=20200313071118.11983-10-yao.jin@linux.intel.com \
--to=yao.jin@linux.intel.com \
--cc=Linux-kernel@vger.kernel.org \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=yao.jin@intel.com \
--subject='Re: [PATCH v2 09/14] perf util: Add new block info fmts for showing hot blocks comparison' \
/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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).