Skip to contentSkip to conversation

perf trace: Enable events when doing system wide tracing and starting a workload

tip:perf/urgent tip-bot for Arnaldo Carvalho de Melo 1 participant 1 message May 1, 2015 perf events

lore
Share & tools
lore
#0 lore raw
Commit-ID:  cb24d01d217497fb32467de22d773655f47d3896
Gitweb:     http://git.kernel.org/tip/cb24d01d217497fb32467de22d773655f47d3896
Author:     Arnaldo Carvalho de Melo <[email protected]>
AuthorDate: Wed, 22 Apr 2015 10:04:23 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Thu, 23 Apr 2015 17:07:59 -0300

perf trace: Enable events when doing system wide tracing and starting a workload

commit f7aa222ff397
Author: Arnaldo Carvalho de Melo <[email protected]>
Date: Tue Feb 3 13:25:39 2015 -0300

perf trace: No need to enable evsels for workload started from perf

The assumption was that whenever a workload is specified, the attr.enable_on_exec evsel flag would be set, but that is not happening when perf_record_opts.system_wide is set, for instance

That resulted in both perf_evlist__enable() and attr.enable_on_exec being not called/set, which made the events to remain disabled while the workload runs, producing no output.

Fix it, by calling perf_evlist__enable() in the 'trace' tool when forking and not targetting a workload started from trace

v2: Test against !target__none(), as suggested by Namhyung Kim, that is what is used in perf_evsel__config() when deciding if the attr.enable_on_exec flag to be set. More work is needed to cover other cases such as opts->initial_delay.

---
 tools/perf/builtin-trace.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
tools/perf/builtin-trace.c +3 -2
index e124741..8842218 100644
@@ -2241,10 +2241,11 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 	if (err < 0)
 		goto out_error_mmap;
 
+	if (!target__none(&trace->opts.target))
+		perf_evlist__enable(evlist);
+
 	if (forks)
 		perf_evlist__start_workload(evlist);
-	else
-		perf_evlist__enable(evlist);
 
 	trace->multiple_threads = evlist->threads->map[0] == -1 ||
 				  evlist->threads->nr > 1 ||