Re: [RFC 00/20] perf: Finish sampling commands when events are closed

From: Arnaldo Carvalho de Melo
Date: Mon Aug 11 2014 - 16:28:22 EST


Em Mon, Aug 11, 2014 at 05:12:49PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Mon, Aug 11, 2014 at 10:49:54AM +0200, Jiri Olsa escreveu:
> > hi,
> > adding support to quit sampling commands:
> > record,top,trace,kvm stat live
> >
> > when all the monitored events are closed, like following perf
> > command will now exit when monitored process (pid 1234) exits:
> >
> > $ perf record -p 1234
> >
> > I added independent poller object to handle basic polling
> > tasks. I had to factor some parts, so sending this as RFC,
>
> Why? I'm trying to figure out why this poller class is needed, just from
> reading the changelog entries, no luck so far.

So this is all about accounting for when all events are closed? I.e. as
we receive the ERR and HUP we go on closing the entries in the pollfd?
Then, when none are closed, then we exit, is that the case?

Why not just mark them -1 and decrement evlist->nr_open_fds (new field)?

struct pollfds {
struct pollfd *pollfds;
int nr_fds;
int nr_open_fds;
};

Don't use callbacks and then that poller_item doesn't need to exist :-\

I'll try to cook a patch with those ideas later today, if for anything,
to validate your patches :-)

- Arnaldo

> > because I'm pretty sure I broke something else ;-)
> >
> > The patch#1 is kernel change, which is needed for the
> > patchset to work properly. The current behavior stays
> > without this kernel change.
> >
> > The code is based on latest Arnaldo's perf/core and
> > following kernel change:
> > http://marc.info/?l=linux-kernel&m=140715910417130&w=2
> >
> > The patchset is also reachable in here:
> > git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
> > perf/core_poll
> >
> > thanks for comments,
> > jirka
> >
> >
> > Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> > Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
> > Cc: Corey Ashford <cjashfor@xxxxxxxxxxxxxxxxxx>
> > Cc: David Ahern <dsahern@xxxxxxxxx>
> > Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx>
> > Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> > Cc: Jean Pihet <jean.pihet@xxxxxxxxxx>
> > Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
> > Cc: Paul Mackerras <paulus@xxxxxxxxx>
> > Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
> > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
> > ---
> > Jiri Olsa (20):
> > perf: Add PERF_EVENT_STATE_EXIT state for events with exited task
> > perf tools: Add poller object to handle polling globaly
> > perf tests: Add poller object test
> > perf tools: Add support to traverse xyarrays
> > perf tools: Introduce perf_evsel__fd function
> > perf tools: Add evlist/evsel poller object support
> > perf record: Add support to see event's ERR and HUP poll errors
> > perf tools: Add set_term_quiet_input helper function
> > perf tui browser: Add interface to terminate browser from uotside
> > perf top: Add support to see event's ERR and HUP poll errors
> > perf top: Join the display thread on exit
> > perf top: Use set_term_quiet_input for terminal input
> > perf top: Setup signals for terminal output
> > perf top: Use poller object for display thread stdin
> > perf kvm: Fix stdin handling for 'kvm stat live' command
> > perf kvm: Add support to see event's ERR and HUP poll errors
> > perf trace: Add support to see event's ERR and HUP poll errors
> > perf python: Use poller object for polling
> > perf tests: Use poller object for polling
> > perf tools: Remove pollfd stuff out of evlist object
> >
> > include/linux/perf_event.h | 1 +
> > kernel/events/core.c | 12 ++++-
> > tools/perf/Makefile.perf | 4 ++
> > tools/perf/builtin-kvm.c | 123 +++++++++++++++++++++++------------------------
> > tools/perf/builtin-record.c | 29 ++++++++++-
> > tools/perf/builtin-report.c | 3 +-
> > tools/perf/builtin-top.c | 104 ++++++++++++++++++++++++++--------------
> > tools/perf/builtin-trace.c | 25 +++++++++-
> > tools/perf/tests/builtin-test.c | 8 ++++
> > tools/perf/tests/open-syscall-tp-fields.c | 9 +++-
> > tools/perf/tests/perf-record.c | 4 --
> > tools/perf/tests/poller.c | 126 ++++++++++++++++++++++++++++++++++++++++++++++++
> > tools/perf/tests/task-exit.c | 9 +++-
> > tools/perf/tests/tests.h | 2 +
> > tools/perf/tests/xyarray.c | 33 +++++++++++++
> > tools/perf/ui/browser.c | 4 +-
> > tools/perf/ui/browser.h | 8 +++-
> > tools/perf/ui/browsers/annotate.c | 2 +-
> > tools/perf/ui/browsers/header.c | 2 +-
> > tools/perf/ui/browsers/hists.c | 39 ++++++++-------
> > tools/perf/ui/browsers/map.c | 2 +-
> > tools/perf/ui/browsers/scripts.c | 2 +-
> > tools/perf/ui/keysyms.h | 1 +
> > tools/perf/ui/tui/util.c | 2 +-
> > tools/perf/util/evlist.c | 38 ++++++---------
> > tools/perf/util/evlist.h | 7 ++-
> > tools/perf/util/evsel.c | 21 +++++++-
> > tools/perf/util/evsel.h | 10 ++++
> > tools/perf/util/hist.h | 6 ++-
> > tools/perf/util/kvm-stat.h | 1 -
> > tools/perf/util/poller.c | 233 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > tools/perf/util/poller.h | 88 ++++++++++++++++++++++++++++++++++
> > tools/perf/util/python-ext-sources | 2 +
> > tools/perf/util/python.c | 19 ++++++--
> > tools/perf/util/util.c | 13 +++++
> > tools/perf/util/util.h | 2 +
> > tools/perf/util/xyarray.c | 4 +-
> > tools/perf/util/xyarray.h | 6 +++
> > 38 files changed, 832 insertions(+), 172 deletions(-)
> > create mode 100644 tools/perf/tests/poller.c
> > create mode 100644 tools/perf/tests/xyarray.c
> > create mode 100644 tools/perf/util/poller.c
> > create mode 100644 tools/perf/util/poller.h
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/