From: tip-bot for Jin Yao <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: peterz@infradead.org, acme@redhat.com, tglx@linutronix.de,
kan.liang@intel.com, jolsa@kernel.org, hpa@zytor.com,
ak@linux.intel.com, yao.jin@linux.intel.com, mingo@kernel.org,
alexander.shishkin@linux.intel.com, linux-kernel@vger.kernel.org
Subject: [tip:perf/core] perf stat: Remove --per-thread pid/tid limitation
Date: Thu, 28 Dec 2017 07:25:55 -0800 [thread overview]
Message-ID: <tip-1d9f8d1b824bf69cf984c1c36e5641b51eea42bb@git.kernel.org> (raw)
In-Reply-To: <1512482591-4646-11-git-send-email-yao.jin@linux.intel.com>
Commit-ID: 1d9f8d1b824bf69cf984c1c36e5641b51eea42bb
Gitweb: https://git.kernel.org/tip/1d9f8d1b824bf69cf984c1c36e5641b51eea42bb
Author: Jin Yao <yao.jin@linux.intel.com>
AuthorDate: Tue, 5 Dec 2017 22:03:10 +0800
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 27 Dec 2017 12:15:47 -0300
perf stat: Remove --per-thread pid/tid limitation
Currently, if we execute 'perf stat --per-thread' without specifying
pid/tid, perf will return error.
root@skl:/tmp# perf stat --per-thread
The --per-thread option is only available when monitoring via -p -t options.
-p, --pid <pid> stat events on existing process id
-t, --tid <tid> stat events on existing thread id
This patch removes this limitation. If no pid/tid specified, it returns
all threads (get threads from /proc).
Note that it doesn't support cpu_list yet so if it's a cpu_list case,
then skip.
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1512482591-4646-11-git-send-email-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/builtin-stat.c | 23 +++++++++++++++--------
tools/perf/util/target.h | 7 +++++++
2 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index f4129a5..ee708ba 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -277,7 +277,7 @@ static int create_perf_stat_counter(struct perf_evsel *evsel)
attr->enable_on_exec = 1;
}
- if (target__has_cpu(&target))
+ if (target__has_cpu(&target) && !target__has_per_thread(&target))
return perf_evsel__open_per_cpu(evsel, perf_evsel__cpus(evsel));
return perf_evsel__open_per_thread(evsel, evsel_list->threads);
@@ -340,7 +340,7 @@ static int read_counter(struct perf_evsel *counter)
int nthreads = thread_map__nr(evsel_list->threads);
int ncpus, cpu, thread;
- if (target__has_cpu(&target))
+ if (target__has_cpu(&target) && !target__has_per_thread(&target))
ncpus = perf_evsel__nr_cpus(counter);
else
ncpus = 1;
@@ -2743,12 +2743,16 @@ int cmd_stat(int argc, const char **argv)
run_count = 1;
}
- if ((stat_config.aggr_mode == AGGR_THREAD) && !target__has_task(&target)) {
- fprintf(stderr, "The --per-thread option is only available "
- "when monitoring via -p -t options.\n");
- parse_options_usage(NULL, stat_options, "p", 1);
- parse_options_usage(NULL, stat_options, "t", 1);
- goto out;
+ if ((stat_config.aggr_mode == AGGR_THREAD) &&
+ !target__has_task(&target)) {
+ if (!target.system_wide || target.cpu_list) {
+ fprintf(stderr, "The --per-thread option is only "
+ "available when monitoring via -p -t -a "
+ "options or only --per-thread.\n");
+ parse_options_usage(NULL, stat_options, "p", 1);
+ parse_options_usage(NULL, stat_options, "t", 1);
+ goto out;
+ }
}
/*
@@ -2772,6 +2776,9 @@ int cmd_stat(int argc, const char **argv)
target__validate(&target);
+ if ((stat_config.aggr_mode == AGGR_THREAD) && (target.system_wide))
+ target.per_thread = true;
+
if (perf_evlist__create_maps(evsel_list, &target) < 0) {
if (target__has_task(&target)) {
pr_err("Problems finding threads of monitor\n");
diff --git a/tools/perf/util/target.h b/tools/perf/util/target.h
index 446aa7a..6ef01a8 100644
--- a/tools/perf/util/target.h
+++ b/tools/perf/util/target.h
@@ -64,6 +64,11 @@ static inline bool target__none(struct target *target)
return !target__has_task(target) && !target__has_cpu(target);
}
+static inline bool target__has_per_thread(struct target *target)
+{
+ return target->system_wide && target->per_thread;
+}
+
static inline bool target__uses_dummy_map(struct target *target)
{
bool use_dummy = false;
@@ -73,6 +78,8 @@ static inline bool target__uses_dummy_map(struct target *target)
else if (target__has_task(target) ||
(!target__has_cpu(target) && !target->uses_mmap))
use_dummy = true;
+ else if (target__has_per_thread(target))
+ use_dummy = true;
return use_dummy;
}
next prev parent reply other threads:[~2017-12-28 15:28 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-05 14:03 [PATCH v6 00/11] perf stat: Enable '--per-thread' on all thread Jin Yao
2017-12-05 10:21 ` Jiri Olsa
2017-12-05 12:21 ` Jin, Yao
2017-12-05 14:03 ` [PATCH v6 01/11] perf util: Define a structure for per-thread shadow stats Jin Yao
2017-12-28 15:21 ` [tip:perf/core] perf stat: " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 02/11] perf stat: Extend rbtree to support " Jin Yao
2017-12-28 15:22 ` [tip:perf/core] " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 03/11] perf util: Create the runtime_stat init/exit function Jin Yao
2017-12-28 15:22 ` [tip:perf/core] perf stat: " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 04/11] perf util: Update per-thread shadow stats Jin Yao
2017-12-28 15:23 ` [tip:perf/core] perf stat: " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 05/11] perf util: Print " Jin Yao
2017-12-28 15:23 ` [tip:perf/core] perf stat: " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 06/11] perf util: Remove a set of shadow stats static variables Jin Yao
2017-12-28 15:24 ` [tip:perf/core] perf stat: " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 07/11] perf stat: Allocate shadow stats buffer for threads Jin Yao
2017-12-28 15:24 ` [tip:perf/core] " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 08/11] perf stat: Update or print per-thread stats Jin Yao
2017-12-28 15:25 ` [tip:perf/core] " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 09/11] perf util: Enumerate all threads from /proc Jin Yao
2017-12-28 15:25 ` [tip:perf/core] perf thread_map: " tip-bot for Jin Yao
2017-12-05 14:03 ` [PATCH v6 10/11] perf stat: Remove --per-thread pid/tid limitation Jin Yao
2017-12-28 15:25 ` tip-bot for Jin Yao [this message]
2017-12-05 14:03 ` [PATCH v6 11/11] perf stat: Resort '--per-thread' result Jin Yao
2017-12-28 15:26 ` [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-1d9f8d1b824bf69cf984c1c36e5641b51eea42bb@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@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@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
Powered by JetHome