[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Mon, 11 Nov 2019 08:56:28 -0800
From: Andi Kleen <ak@...ux.intel.com>
To: Jiri Olsa <jolsa@...hat.com>
Cc: Andi Kleen <andi@...stfloor.org>, jolsa@...nel.org,
acme@...nel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v5 07/13] perf stat: Use affinity for closing file
descriptors
On Mon, Nov 11, 2019 at 02:30:52PM +0100, Jiri Olsa wrote:
> On Thu, Nov 07, 2019 at 10:16:40AM -0800, Andi Kleen wrote:
> > From: Andi Kleen <ak@...ux.intel.com>
> >
> > Closing a perf fd can also trigger an IPI to the target CPU.
> > Use the same affinity technique as we use for reading/enabling events
> > to closing to optimize the CPU transitions.
> >
> > Before on a large test case with 94 CPUs:
> >
> > % time seconds usecs/call calls errors syscall
> > ------ ----------- ----------- --------- --------- ----------------
> > 32.56 3.085463 50 61483 close
> >
> > After:
> >
> > 10.54 0.735704 11 61485 close
> >
> > Signed-off-by: Andi Kleen <ak@...ux.intel.com>
> >
> > ---
> >
> > v2: Use new iterator macros
> > v3: Use new iterator macros
> > Add missing affinity__cleanup
> > v4:
> > Update iterators again
> > ---
> > tools/perf/util/evlist.c | 27 +++++++++++++++++++++++++--
> > 1 file changed, 25 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> > index dae6e846b2f8..0dcea66329e2 100644
> > --- a/tools/perf/util/evlist.c
> > +++ b/tools/perf/util/evlist.c
> > @@ -18,6 +18,7 @@
> > #include "debug.h"
> > #include "units.h"
> > #include <internal/lib.h> // page_size
> > +#include "affinity.h"
> > #include "../perf.h"
> > #include "asm/bug.h"
> > #include "bpf-event.h"
> > @@ -1169,9 +1170,31 @@ void perf_evlist__set_selected(struct evlist *evlist,
> > void evlist__close(struct evlist *evlist)
> > {
> > struct evsel *evsel;
> > + struct affinity affinity;
> > + int cpu, i;
> >
> > - evlist__for_each_entry_reverse(evlist, evsel)
> > - evsel__close(evsel);
> > + if (!evlist->core.cpus) {
>
> should this be evlist->all_cpus?
This detects perf record essentially. I had some problems with perf record
in early testing, so I just disabled it, since I was just focussing
on stat. all_cpus would be set for perf record too.
-Andi
Powered by blists - more mailing lists