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 v1 6/9] perf stat: Allocate shadow stats buffer for threads
Date: Mon, 20 Nov 2017 22:43:41 +0800 [thread overview]
Message-ID: <1511189024-19908-7-git-send-email-yao.jin@linux.intel.com> (raw)
In-Reply-To: <1511189024-19908-1-git-send-email-yao.jin@linux.intel.com>
After perf_evlist__create_maps() being executed, we can get all
threads from /proc. And via thread_map__nr(), we can also get
the number of threads.
With the number of threads, the patch allocates a buffer which
will record the shadow stats for these threads.
The buffer pointer is saved in stat_config.
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
tools/perf/builtin-stat.c | 46 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 2ad5f4a..9eec145 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -214,8 +214,13 @@ static inline void diff_timespec(struct timespec *r, struct timespec *a,
static void perf_stat__reset_stats(void)
{
+ int i;
+
perf_evlist__reset_stats(evsel_list);
perf_stat__reset_shadow_stats();
+
+ for (i = 0; i < stat_config.stat_num; i++)
+ perf_stat__reset_shadow_per_stat(&stat_config.stats[i]);
}
static int create_perf_stat_counter(struct perf_evsel *evsel)
@@ -2548,6 +2553,35 @@ int process_cpu_map_event(struct perf_tool *tool,
return set_maps(st);
}
+static int runtime_stat_alloc(struct perf_stat_config *config, int nthreads)
+{
+ int i;
+
+ config->stats = calloc(nthreads, sizeof(struct runtime_stat));
+ if (!config->stats)
+ return -1;
+
+ config->stat_num = nthreads;
+
+ for (i = 0; i < nthreads; i++)
+ perf_stat__init_runtime_stat(&config->stats[i]);
+
+ return 0;
+}
+
+static void runtime_stat_free(struct perf_stat_config *config)
+{
+ int i;
+
+ if (!config->stats)
+ return;
+
+ for (i = 0; i < config->stat_num; i++)
+ perf_stat__free_runtime_stat(&config->stats[i]);
+
+ free(config->stats);
+}
+
static const char * const stat_report_usage[] = {
"perf stat report [<options>]",
NULL,
@@ -2803,8 +2837,15 @@ int cmd_stat(int argc, const char **argv)
* Initialize thread_map with comm names,
* so we could print it out on output.
*/
- if (stat_config.aggr_mode == AGGR_THREAD)
+ if (stat_config.aggr_mode == AGGR_THREAD) {
thread_map__read_comms(evsel_list->threads);
+ if (target.system_wide) {
+ if (runtime_stat_alloc(&stat_config,
+ thread_map__nr(evsel_list->threads))) {
+ goto out;
+ }
+ }
+ }
if (interval && interval < 100) {
if (interval < 10) {
@@ -2894,5 +2935,8 @@ int cmd_stat(int argc, const char **argv)
sysfs__write_int(FREEZE_ON_SMI_PATH, 0);
perf_evlist__delete(evsel_list);
+
+ runtime_stat_free(&stat_config);
+
return status;
}
--
2.7.4
next prev parent reply other threads:[~2017-11-20 6:48 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-20 14:43 [PATCH v1 0/9] perf stat: Enable '--per-thread' on all threads Jin Yao
2017-11-20 9:26 ` Jiri Olsa
2017-11-20 12:15 ` Jin, Yao
2017-11-20 12:29 ` Jiri Olsa
2017-11-20 15:50 ` Andi Kleen
2017-11-20 14:43 ` [PATCH v1 1/9] perf util: Create rblist__reset() function Jin Yao
2017-11-20 14:43 ` [PATCH v1 2/9] perf util: Define a structure for runtime shadow metrics stats Jin Yao
2017-11-21 15:18 ` Jiri Olsa
2017-11-22 3:11 ` Jin, Yao
2017-11-20 14:43 ` [PATCH v1 3/9] perf util: Reconstruct rblist for supporting per-thread shadow stats Jin Yao
2017-11-21 15:17 ` Jiri Olsa
2017-11-22 1:29 ` Jin, Yao
2017-11-22 8:30 ` Jiri Olsa
2017-11-21 15:17 ` Jiri Olsa
2017-11-22 1:35 ` Jin, Yao
2017-11-21 15:17 ` Jiri Olsa
2017-11-22 1:45 ` Jin, Yao
2017-11-21 15:17 ` Jiri Olsa
2017-11-22 2:11 ` Jin, Yao
2017-11-21 15:17 ` Jiri Olsa
2017-11-22 2:19 ` Jin, Yao
2017-11-21 15:17 ` Jiri Olsa
2017-11-22 2:20 ` Jin, Yao
2017-11-22 6:31 ` Ravi Bangoria
2017-11-22 6:57 ` Jin, Yao
2017-11-22 8:32 ` Jiri Olsa
2017-11-22 12:03 ` Jin, Yao
2017-11-20 14:43 ` [PATCH v1 4/9] perf util: Update and print " Jin Yao
2017-11-21 15:17 ` Jiri Olsa
2017-11-22 2:42 ` Jin, Yao
2017-11-21 15:18 ` Jiri Olsa
2017-11-22 3:10 ` Jin, Yao
2017-11-22 8:37 ` Jiri Olsa
2017-11-22 12:06 ` Jin, Yao
2017-11-20 14:43 ` [PATCH v1 5/9] perf util: Remove a set of shadow stats static variables Jin Yao
2017-11-21 15:17 ` Jiri Olsa
2017-11-21 18:03 ` Andi Kleen
2017-11-21 21:19 ` Jiri Olsa
2017-11-20 14:43 ` Jin Yao [this message]
2017-11-20 14:43 ` [PATCH v1 7/9] perf util: Reuse thread_map__new_by_uid to enumerate threads from /proc Jin Yao
2017-11-20 14:43 ` [PATCH v1 8/9] perf stat: Remove --per-thread pid/tid limitation Jin Yao
2017-11-21 15:18 ` Jiri Olsa
2017-11-22 3:42 ` Jin, Yao
2017-11-22 8:35 ` Jiri Olsa
2017-11-21 15:18 ` Jiri Olsa
2017-11-22 5:34 ` Jin, Yao
2017-11-21 15:18 ` Jiri Olsa
2017-11-22 5:38 ` Jin, Yao
2017-11-20 14:43 ` [PATCH v1 9/9] perf stat: Resort '--per-thread' result 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=1511189024-19908-7-git-send-email-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 \
/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;
as well as URLs for NNTP newsgroup(s).