Messages in this thread Patch in this message | | | Subject | Re: [PATCH 0/7] perf stat: Change event enable code | From | Adrian Hunter <> | Date | Fri, 11 Dec 2015 14:42:22 +0200 |
| |
On 09/12/15 15:44, Adrian Hunter wrote: > On 08/12/15 15:53, Arnaldo Carvalho de Melo wrote: >> Em Tue, Dec 08, 2015 at 09:29:51AM +0200, Adrian Hunter escreveu: >>> On 07/12/15 23:09, Arnaldo Carvalho de Melo wrote: >>>> Em Thu, Dec 03, 2015 at 10:06:39AM +0100, Jiri Olsa escreveu: >>>>> while testing ftrace:function event I noticed we create >>>>> stat counters as enabled (except for enable_on_exec couters). >>>>> >>>>> This way we count also filter setup and other config code >>>>> which might be crucial for some events. >>>>> >>>>> Posponing the events enable once everything is ready. >>>>> >>>>> The last patch is RFC as I wasn't sure there's some hidden >>>>> catch about perf_evlist__(enable|disable)_event functions >>>>> I missed.. Adrian? >> >>>> They look the same, Adrian? >> >>>> Applied the first 6, will give some more time to Adrian to chime in. >> >>> Looks like there might already be a problem using evsel->threads instead of >>> evlist->threads with the logic relating to evsel->system_wide getting lost - >>> but that happened already in "perf evlist: Factor >>> perf_evlist__(enable|disable) functions". Probably the threads should not >>> be propagated in that case, but it needs more investigation. I will try to >>> look at it today. >> >> Thanks! Is that covered by any 'perf test' entry? Do you think having >> some sort of Intel PT test to run on capable machines would be feasible? > > There is "Test tracking with sched_switch". There was an issue where 'perf > record' was working differently to the tests. I will try to find where the > gaps are. Seems I have run out of time again today though.
I was wrong about there being any problem using evsel->threads. While the patch "perf evlist: Factor perf_evlist__(enable|disable) function" changes the number of threads (from perf_evlist__nr_threads() to thread_map__nr()), the system_wide check is still done in perf_evsel__run_ioctl(), so everything is fine.
WRT "[RFC 7/7] perf tools: Remove perf_evlist__(enable|disable)_event functions" it might be worth putting the evsel->fd checks that perf_evlist__[enable|disable]_event() have into perf_evsel__[enable|disable](). But otherwise it looks fine.
The gap in testing that I was thinking of is below:
From: Adrian Hunter <adrian.hunter@intel.com> Date: Fri, 11 Dec 2015 11:05:11 +0200 Subject: [PATCH] perf tools: Make perf_evlist__open() open evsels with their cpus and threads (like perf record does)
'perf record' uses perf_evsel__open() to open events and passes the evsel->cpus and evsel->threads. Many tests and some tools instead use perf_evlist__open() which passes instead evlist->cpus and evlist->threads.
Make perf_evlist__open() follow the 'perf record' behaviour so that a consistent approach is taken.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> --- tools/perf/util/evlist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index d1b6c206bb93..306dacb33d8e 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1470,7 +1470,7 @@ int perf_evlist__open(struct perf_evlist *evlist) perf_evlist__update_id_pos(evlist); evlist__for_each(evlist, evsel) { - err = perf_evsel__open(evsel, evlist->cpus, evlist->threads); + err = perf_evsel__open(evsel, evsel->cpus, evsel->threads); if (err < 0) goto out_err; } -- 1.9.1
| |