linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>, Ian Rogers <irogers@google.com>,
	Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>,
	Namhyung Kim <namhyung@kernel.org>, Leo Yan <leo.yan@linaro.org>,
	linux-kernel@vger.kernel.org
Subject: [PATCH RFC 00/21] perf intel-pt: Better support for perf record --cpu
Date: Fri, 22 Apr 2022 19:23:41 +0300	[thread overview]
Message-ID: <20220422162402.147958-1-adrian.hunter@intel.com> (raw)

Hi

Here are patches to support capturing Intel PT sideband events such as
mmap, task, context switch, text poke etc, on every CPU even when tracing
selected user_requested_cpus.  That is, when using the perf record -C or
 --cpu option.

This is needed for:
1. text poke: a text poke on any CPU affects all CPUs
2. tracing user space: a user space process can migrate between CPUs so
mmap events that happen on a different CPU can be needed to decode a
user_requested_cpus CPU.

For example:

	Trace on CPU 1:

	perf record --kcore -C 1 -e intel_pt// &

	Start a task on CPU 0:

	taskset 0x1 testprog &

	Migrate it to CPU 1:

	taskset -p 0x2 <testprog pid>

	Stop tracing:

	kill %1

	Prior to these changes there will be errors decoding testprog
	in userspace because the comm and mmap events for testprog will not
	have been captured.

There is quite a bit of preparation:

The first 5 patches stop auxtrace mixing up mmap idx between evlist and
evsel.  That is going to matter when
evlist->all_cpus != evlist->user_requested_cpus != evsel->cpus:

      libperf evsel: Factor out perf_evsel__ioctl()
      libperf evsel: Add perf_evsel__enable_thread()
      perf evlist: Use libperf functions in evlist__enable_event_idx()
      perf auxtrace: Move evlist__enable_event_idx() to auxtrace.c
      perf auxtrace: Do not mix up mmap idx

The next 6 patches stop attempts to auxtrace mmap when it is not an
auxtrace event e.g. when mmapping the CPUs on which only sideband is
captured:

      libperf evlist: Remove ->idx() per_cpu parameter
      libperf evlist: Move ->idx() into mmap_per_evsel()
      libperf evlist: Add evsel as a parameter to ->idx()
      perf auxtrace: Record whether an auxtrace mmap is needed
      perf auxctrace: Add mmap_needed to auxtrace_mmap_params
      perf auxtrace: Remove auxtrace_mmap_params__set_idx() per_cpu parameter

The next 5 patches switch to setting up dummy event maps before adding the
evsel so that the evsel is subject to map propagation, primarily to cause
addition of the evsel's CPUs to all_cpus.

      perf evlist: Factor out evlist__dummy_event()
      perf evlist: Add evlist__add_system_wide_dummy()
      perf record: Use evlist__add_system_wide_dummy() in record__config_text_poke()
      perf intel-pt: Use evlist__add_system_wide_dummy() for switch tracking
      perf intel-pt: Track sideband system-wide when needed

The remaining 5 patches make more significant changes.

First change from using user_requested_cpus to using all_cpus where necessary:

      perf tools: Allow all_cpus to be a superset of user_requested_cpus

Secondly, mmap all per-thread and all per-cpu events:

      libperf evlist: Allow mixing per-thread and per-cpu mmaps

Stop using system_wide flag for uncore because it will not work anymore:

      perf stat: Add per_cpu_only flag for uncore

Finally change map propagation so that system-wide events retain their cpus and
(dummy) threads:

      perf tools: Allow system-wide events to keep their own CPUs
      perf tools: Allow system-wide events to keep their own threads


Adrian Hunter (21):
      libperf evsel: Factor out perf_evsel__ioctl()
      libperf evsel: Add perf_evsel__enable_thread()
      perf evlist: Use libperf functions in evlist__enable_event_idx()
      perf auxtrace: Move evlist__enable_event_idx() to auxtrace.c
      perf auxtrace: Do not mix up mmap idx
      libperf evlist: Remove ->idx() per_cpu parameter
      libperf evlist: Move ->idx() into mmap_per_evsel()
      libperf evlist: Add evsel as a parameter to ->idx()
      perf auxtrace: Record whether an auxtrace mmap is needed
      perf auxctrace: Add mmap_needed to auxtrace_mmap_params
      perf auxtrace: Remove auxtrace_mmap_params__set_idx() per_cpu parameter
      perf evlist: Factor out evlist__dummy_event()
      perf evlist: Add evlist__add_system_wide_dummy()
      perf record: Use evlist__add_system_wide_dummy() in record__config_text_poke()
      perf intel-pt: Use evlist__add_system_wide_dummy() for switch tracking
      perf intel-pt: Track sideband system-wide when needed
      perf tools: Allow all_cpus to be a superset of user_requested_cpus
      libperf evlist: Allow mixing per-thread and per-cpu mmaps
      perf stat: Add per_cpu_only flag for uncore
      perf tools: Allow system-wide events to keep their own CPUs
      perf tools: Allow system-wide events to keep their own threads

 tools/lib/perf/evlist.c                  |  67 +++++++------------
 tools/lib/perf/evsel.c                   |  29 +++++++--
 tools/lib/perf/include/internal/evlist.h |   3 +-
 tools/lib/perf/include/internal/evsel.h  |   1 +
 tools/lib/perf/include/perf/evsel.h      |   1 +
 tools/perf/arch/arm/util/cs-etm.c        |   1 +
 tools/perf/arch/arm64/util/arm-spe.c     |   1 +
 tools/perf/arch/s390/util/auxtrace.c     |   1 +
 tools/perf/arch/x86/util/intel-bts.c     |   1 +
 tools/perf/arch/x86/util/intel-pt.c      |  32 ++++------
 tools/perf/builtin-record.c              |  39 +++++-------
 tools/perf/builtin-stat.c                |   5 +-
 tools/perf/util/auxtrace.c               |  31 +++++++--
 tools/perf/util/auxtrace.h               |   8 ++-
 tools/perf/util/evlist.c                 | 106 +++++++++++++++----------------
 tools/perf/util/evlist.h                 |   7 +-
 tools/perf/util/evsel.c                  |   1 +
 tools/perf/util/evsel.h                  |   1 +
 tools/perf/util/mmap.c                   |   4 +-
 tools/perf/util/parse-events.c           |   2 +-
 20 files changed, 176 insertions(+), 165 deletions(-)


Regards
Adrian

             reply	other threads:[~2022-04-22 16:24 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-22 16:23 Adrian Hunter [this message]
2022-04-22 16:23 ` [PATCH RFC 01/21] libperf evsel: Factor out perf_evsel__ioctl() Adrian Hunter
2022-04-22 19:05   ` Arnaldo Carvalho de Melo
2022-04-22 16:23 ` [PATCH RFC 02/21] libperf evsel: Add perf_evsel__enable_thread() Adrian Hunter
2022-04-27 21:48   ` Namhyung Kim
2022-04-28  4:15     ` Adrian Hunter
2022-04-28 23:50       ` Namhyung Kim
2022-05-03 16:45   ` Ian Rogers
2022-04-22 16:23 ` [PATCH RFC 03/21] perf evlist: Use libperf functions in evlist__enable_event_idx() Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 04/21] perf auxtrace: Move evlist__enable_event_idx() to auxtrace.c Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 05/21] perf auxtrace: Do not mix up mmap idx Adrian Hunter
2022-04-27 21:54   ` Namhyung Kim
2022-04-28  4:29     ` Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 06/21] libperf evlist: Remove ->idx() per_cpu parameter Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 07/21] libperf evlist: Move ->idx() into mmap_per_evsel() Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 08/21] libperf evlist: Add evsel as a parameter to ->idx() Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 09/21] perf auxtrace: Record whether an auxtrace mmap is needed Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 10/21] perf auxctrace: Add mmap_needed to auxtrace_mmap_params Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 11/21] perf auxtrace: Remove auxtrace_mmap_params__set_idx() per_cpu parameter Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 12/21] perf evlist: Factor out evlist__dummy_event() Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 13/21] perf evlist: Add evlist__add_system_wide_dummy() Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 14/21] perf record: Use evlist__add_system_wide_dummy() in record__config_text_poke() Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 15/21] perf intel-pt: Use evlist__add_system_wide_dummy() for switch tracking Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 16/21] perf intel-pt: Track sideband system-wide when needed Adrian Hunter
2022-04-22 16:23 ` [PATCH RFC 17/21] perf tools: Allow all_cpus to be a superset of user_requested_cpus Adrian Hunter
2022-05-03 17:41   ` Ian Rogers
2022-04-22 16:23 ` [PATCH RFC 18/21] libperf evlist: Allow mixing per-thread and per-cpu mmaps Adrian Hunter
2022-05-03 20:29   ` Namhyung Kim
2022-05-04  9:56     ` Adrian Hunter
2022-04-22 16:24 ` [PATCH RFC 19/21] perf stat: Add requires_cpu flag for uncore Adrian Hunter
2022-04-29 22:57   ` Namhyung Kim
2022-04-30  1:10     ` Ian Rogers
2022-04-22 16:24 ` [PATCH RFC 20/21] perf tools: Allow system-wide events to keep their own CPUs Adrian Hunter
2022-04-22 16:24 ` [PATCH RFC 21/21] perf tools: Allow system-wide events to keep their own threads Adrian Hunter
2022-05-03 18:09 ` [PATCH RFC 00/21] perf intel-pt: Better support for perf record --cpu Ian Rogers

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=20220422162402.147958-1-adrian.hunter@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=acme@kernel.org \
    --cc=alexey.v.bayduraev@linux.intel.com \
    --cc=irogers@google.com \
    --cc=jolsa@redhat.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).