From: tip-bot for Jin Yao <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: mingo@kernel.org, peterz@infradead.org,
kan.liang@linux.intel.com, yao.jin@intel.com, hpa@zytor.com,
jolsa@kernel.org, alexander.shishkin@linux.intel.com,
acme@redhat.com, tglx@linutronix.de, ak@linux.intel.com,
linux-kernel@vger.kernel.org, yao.jin@linux.intel.com
Subject: [tip:perf/core] perf symbol: Create block_info structure
Date: Wed, 3 Jul 2019 07:32:55 -0700 [thread overview]
Message-ID: <tip-0cec2447e7d209b77e52c6ec62169cc564df54e7@git.kernel.org> (raw)
In-Reply-To: <1561713784-30533-2-git-send-email-yao.jin@linux.intel.com>
Commit-ID: 0cec2447e7d209b77e52c6ec62169cc564df54e7
Gitweb: https://git.kernel.org/tip/0cec2447e7d209b77e52c6ec62169cc564df54e7
Author: Jin Yao <yao.jin@linux.intel.com>
AuthorDate: Fri, 28 Jun 2019 17:22:58 +0800
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 2 Jul 2019 12:44:19 -0300
perf symbol: Create block_info structure
'perf diff' currently can only diff symbols(functions).
We should expand it to diff cycles of individual programs blocks as
reported by timed LBR. This would allow to identify changes in specific
code accurately.
We need a new structure to maintain the basic block information, such as,
symbol(function), start/end address of this block, cycles. This patch
creates this structure and with some ops.
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1561713784-30533-2-git-send-email-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/symbol.c | 22 ++++++++++++++++++++++
tools/perf/util/symbol.h | 23 +++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 46d2c03814a1..ae2ce255e848 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -2351,3 +2351,25 @@ struct mem_info *mem_info__new(void)
refcount_set(&mi->refcnt, 1);
return mi;
}
+
+struct block_info *block_info__get(struct block_info *bi)
+{
+ if (bi)
+ refcount_inc(&bi->refcnt);
+ return bi;
+}
+
+void block_info__put(struct block_info *bi)
+{
+ if (bi && refcount_dec_and_test(&bi->refcnt))
+ free(bi);
+}
+
+struct block_info *block_info__new(void)
+{
+ struct block_info *bi = zalloc(sizeof(*bi));
+
+ if (bi)
+ refcount_set(&bi->refcnt, 1);
+ return bi;
+}
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 9a8fe012910a..12755b42ea93 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -131,6 +131,17 @@ struct mem_info {
refcount_t refcnt;
};
+struct block_info {
+ struct symbol *sym;
+ u64 start;
+ u64 end;
+ u64 cycles;
+ u64 cycles_aggr;
+ int num;
+ int num_aggr;
+ refcount_t refcnt;
+};
+
struct addr_location {
struct machine *machine;
struct thread *thread;
@@ -332,4 +343,16 @@ static inline void __mem_info__zput(struct mem_info **mi)
#define mem_info__zput(mi) __mem_info__zput(&mi)
+struct block_info *block_info__new(void);
+struct block_info *block_info__get(struct block_info *bi);
+void block_info__put(struct block_info *bi);
+
+static inline void __block_info__zput(struct block_info **bi)
+{
+ block_info__put(*bi);
+ *bi = NULL;
+}
+
+#define block_info__zput(bi) __block_info__zput(&bi)
+
#endif /* __PERF_SYMBOL */
next prev parent reply other threads:[~2019-07-03 14:33 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-28 9:22 [PATCH v6 0/7] perf diff: diff cycles at basic block level Jin Yao
2019-06-28 8:02 ` Jiri Olsa
2019-07-02 15:51 ` Arnaldo Carvalho de Melo
2019-06-28 9:22 ` [PATCH v6 1/7] perf util: Create block_info structure Jin Yao
2019-07-03 14:32 ` tip-bot for Jin Yao [this message]
2019-06-28 9:22 ` [PATCH v6 2/7] perf util: Add block_info in hist_entry Jin Yao
2019-07-03 14:33 ` [tip:perf/core] perf hists: " tip-bot for Jin Yao
2019-06-28 9:23 ` [PATCH v6 3/7] perf diff: Check if all data files with branch stacks Jin Yao
2019-07-03 14:34 ` [tip:perf/core] " tip-bot for Jin Yao
2019-06-28 9:23 ` [PATCH v6 4/7] perf diff: Use hists to manage basic blocks per symbol Jin Yao
2019-07-03 14:35 ` [tip:perf/core] " tip-bot for Jin Yao
2019-06-28 9:23 ` [PATCH v6 5/7] perf diff: Link same basic blocks among different data Jin Yao
2019-07-02 16:17 ` Arnaldo Carvalho de Melo
2019-07-02 16:20 ` Arnaldo Carvalho de Melo
2019-07-03 1:07 ` Jin, Yao
2019-07-03 14:35 ` [tip:perf/core] " tip-bot for Jin Yao
2019-06-28 9:23 ` [PATCH v6 6/7] perf diff: Print the basic block cycles diff Jin Yao
2019-07-03 14:36 ` [tip:perf/core] " tip-bot for Jin Yao
2019-06-28 9:23 ` [PATCH v6 7/7] perf diff: Documentation -c cycles option Jin Yao
2019-07-03 14:37 ` [tip:perf/core] " tip-bot for Jin Yao
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=tip-0cec2447e7d209b77e52c6ec62169cc564df54e7@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=hpa@zytor.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=yao.jin@intel.com \
--cc=yao.jin@linux.intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox