From: Adrian Hunter <adrian.hunter@intel.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Heiko Carstens <hca@linux.ibm.com>,
Thomas Richter <tmricht@linux.ibm.com>,
Hendrik Brueckner <brueckner@linux.ibm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Mike Leach <mike.leach@linaro.org>,
James Clark <james.clark@arm.com>,
coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org,
Yicong Yang <yangyicong@hisilicon.com>,
Jonathan Cameron <jonathan.cameron@huawei.com>,
Will Deacon <will@kernel.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
Ian Rogers <irogers@google.com>, Andi Kleen <ak@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, H Peter Anvin <hpa@zytor.com>,
Kan Liang <kan.liang@linux.intel.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH V14 00/11] perf/core: Add ability for an event to "pause" or "resume" AUX area tracing
Date: Mon, 4 Nov 2024 12:11:51 +0200 [thread overview]
Message-ID: <0b073156-dbf4-420e-b6e2-98d404ba38f1@intel.com> (raw)
In-Reply-To: <7bacbe72-c283-453b-bf1f-6ba05b68cac8@intel.com>
On 30/10/24 15:16, Adrian Hunter wrote:
> On 22/10/24 18:59, Adrian Hunter wrote:
>> Hi
>>
>> Note for V14:
>> KVM patches dropped.
>
> ping
ping
>
>>
>> Note for V12:
>> There was a small conflict between the Intel PT changes in
>> "KVM: x86: Fix Intel PT Host/Guest mode when host tracing" and the
>> changes in this patch set, so I have put the patch sets together,
>> along with outstanding fix "perf/x86/intel/pt: Fix buffer full but
>> size is 0 case"
>>
>> Cover letter for KVM changes (patches 2 to 4):
>>
>> There is a long-standing problem whereby running Intel PT on host and guest
>> in Host/Guest mode, causes VM-Entry failure.
>>
>> The motivation for this patch set is to provide a fix for stable kernels
>> prior to the advent of the "Mediated Passthrough vPMU" patch set:
>>
>> https://lore.kernel.org/kvm/20240801045907.4010984-1-mizhang@google.com/
>>
>> which would render a large part of the fix unnecessary but likely not be
>> suitable for backport to stable due to its size and complexity.
>>
>> Ideally, this patch set would be applied before "Mediated Passthrough vPMU"
>>
>> Note that the fix does not conflict with "Mediated Passthrough vPMU", it
>> is just that "Mediated Passthrough vPMU" will make the code to stop and
>> restart Intel PT unnecessary.
>>
>> Note for V11:
>> Moving aux_paused into a union within struct hw_perf_event caused
>> a regression because aux_paused was being written unconditionally
>> even though it is valid only for AUX (e.g. Intel PT) PMUs.
>> That is fixed in V11.
>>
>> Hardware traces, such as instruction traces, can produce a vast amount of
>> trace data, so being able to reduce tracing to more specific circumstances
>> can be useful.
>>
>> The ability to pause or resume tracing when another event happens, can do
>> that.
>>
>> These patches add such a facilty and show how it would work for Intel
>> Processor Trace.
>>
>> Maintainers of other AUX area tracing implementations are requested to
>> consider if this is something they might employ and then whether or not
>> the ABI would work for them. Note, thank you to James Clark (ARM) for
>> evaluating the API for Coresight. Suzuki K Poulose (ARM) also responded
>> positively to the RFC.
>>
>> Changes to perf tools are now (since V4) fleshed out.
>>
>> Please note, Intel® Architecture Instruction Set Extensions and Future
>> Features Programming Reference March 2024 319433-052, currently:
>>
>> https://cdrdv2.intel.com/v1/dl/getContent/671368
>>
>> introduces hardware pause / resume for Intel PT in a feature named
>> Intel PT Trigger Tracing.
>>
>> For that more fields in perf_event_attr will be necessary. The main
>> differences are:
>> - it can be applied not just to overflows, but optionally to
>> every event
>> - a packet is emitted into the trace, optionally with IP
>> information
>> - no PMI
>> - works with PMC and DR (breakpoint) events only
>>
>> Here are the proposed additions to perf_event_attr, please comment:
>>
>> diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h
>> index 0c557f0a17b3..05dcc43f11bb 100644
>> --- a/tools/include/uapi/linux/perf_event.h
>> +++ b/tools/include/uapi/linux/perf_event.h
>> @@ -369,6 +369,22 @@ enum perf_event_read_format {
>> PERF_FORMAT_MAX = 1U << 5, /* non-ABI */
>> };
>>
>> +enum {
>> + PERF_AUX_ACTION_START_PAUSED = 1U << 0,
>> + PERF_AUX_ACTION_PAUSE = 1U << 1,
>> + PERF_AUX_ACTION_RESUME = 1U << 2,
>> + PERF_AUX_ACTION_EMIT = 1U << 3,
>> + PERF_AUX_ACTION_NR = 0x1f << 4,
>> + PERF_AUX_ACTION_NO_IP = 1U << 9,
>> + PERF_AUX_ACTION_PAUSE_ON_EVT = 1U << 10,
>> + PERF_AUX_ACTION_RESUME_ON_EVT = 1U << 11,
>> + PERF_AUX_ACTION_EMIT_ON_EVT = 1U << 12,
>> + PERF_AUX_ACTION_NR_ON_EVT = 0x1f << 13,
>> + PERF_AUX_ACTION_NO_IP_ON_EVT = 1U << 18,
>> + PERF_AUX_ACTION_MASK = ~PERF_AUX_ACTION_START_PAUSED,
>> + PERF_AUX_PAUSE_RESUME_MASK = PERF_AUX_ACTION_PAUSE | PERF_AUX_ACTION_RESUME,
>> +};
>> +
>> #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */
>> #define PERF_ATTR_SIZE_VER1 72 /* add: config2 */
>> #define PERF_ATTR_SIZE_VER2 80 /* add: branch_sample_type */
>> @@ -515,10 +531,19 @@ struct perf_event_attr {
>> union {
>> __u32 aux_action;
>> struct {
>> - __u32 aux_start_paused : 1, /* start AUX area tracing paused */
>> - aux_pause : 1, /* on overflow, pause AUX area tracing */
>> - aux_resume : 1, /* on overflow, resume AUX area tracing */
>> - __reserved_3 : 29;
>> + __u32 aux_start_paused : 1, /* start AUX area tracing paused */
>> + aux_pause : 1, /* on overflow, pause AUX area tracing */
>> + aux_resume : 1, /* on overflow, resume AUX area tracing */
>> + aux_emit : 1, /* generate AUX records instead of events */
>> + aux_nr : 5, /* AUX area tracing reference number */
>> + aux_no_ip : 1, /* suppress IP in AUX records */
>> + /* Following apply to event occurrence not overflows */
>> + aux_pause_on_evt : 1, /* on event, pause AUX area tracing */
>> + aux_resume_on_evt : 1, /* on event, resume AUX area tracing */
>> + aux_emit_on_evt : 1, /* generate AUX records instead of events */
>> + aux_nr_on_evt : 5, /* AUX area tracing reference number */
>> + aux_no_ip_on_evt : 1, /* suppress IP in AUX records */
>> + __reserved_3 : 13;
>> };
>> };
>>
>>
>> Changes in V14:
>> Dropped KVM patches
>>
>> perf/x86/intel/pt: Add support for pause / resume
>> Set pt->handle_nmi after configuration is completed instead of during
>>
>> Changes in V13:
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> Do aux_resume at the end of __perf_event_overflow() so as to trace
>> less of perf itself
>>
>> perf tools: Add missing_features for aux_start_paused, aux_pause, aux_resume
>> Add error message also in EOPNOTSUPP case (Leo)
>>
>> Changes in V12:
>> Add previously sent patch "perf/x86/intel/pt: Fix buffer full
>> but size is 0 case"
>>
>> Add previously sent patch set "KVM: x86: Fix Intel PT Host/Guest
>> mode when host tracing"
>>
>> Rebase on current tip plus patch set "KVM: x86: Fix Intel PT Host/Guest
>> mode when host tracing"
>>
>> Changes in V11:
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> Make assignment to event->hw.aux_paused conditional on
>> (pmu->capabilities & PERF_PMU_CAP_AUX_PAUSE).
>>
>> perf/x86/intel: Do not enable large PEBS for events with aux actions or aux sampling
>> Remove definition of has_aux_action() because it has
>> already been added as an inline function.
>>
>> perf/x86/intel/pt: Fix sampling synchronization
>> perf tools: Enable evsel__is_aux_event() to work for ARM/ARM64
>> perf tools: Enable evsel__is_aux_event() to work for S390_CPUMSF
>> Dropped because they have already been applied
>>
>> Changes in V10:
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> Move aux_paused into a union within struct hw_perf_event.
>> Additional comment wrt PERF_EF_PAUSE/PERF_EF_RESUME.
>> Factor out has_aux_action() as an inline function.
>> Use scoped_guard for irqsave.
>> Move calls of perf_event_aux_pause() from __perf_event_output()
>> to __perf_event_overflow().
>>
>> Changes in V9:
>> perf/x86/intel/pt: Fix sampling synchronization
>> New patch
>>
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> Move aux_paused to struct hw_perf_event
>>
>> perf/x86/intel/pt: Add support for pause / resume
>> Add more comments and barriers for resume_allowed and
>> pause_allowed
>> Always use WRITE_ONCE with resume_allowed
>>
>>
>> Changes in V8:
>>
>> perf tools: Parse aux-action
>> Fix clang warning:
>> util/auxtrace.c:821:7: error: missing field 'aux_action' initializer [-Werror,-Wmissing-field-initializers]
>> 821 | {NULL},
>> | ^
>>
>> Changes in V7:
>>
>> Add Andi's Reviewed-by for patches 2-12
>> Re-base
>>
>> Changes in V6:
>>
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> Removed READ/WRITE_ONCE from __perf_event_aux_pause()
>> Expanded comment about guarding against NMI
>>
>> Changes in V5:
>>
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> Added James' Ack
>>
>> perf/x86/intel: Do not enable large PEBS for events with aux actions or aux sampling
>> New patch
>>
>> perf tools
>> Added Ian's Ack
>>
>> Changes in V4:
>>
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> Rename aux_output_cfg -> aux_action
>> Reorder aux_action bits from:
>> aux_pause, aux_resume, aux_start_paused
>> to:
>> aux_start_paused, aux_pause, aux_resume
>> Fix aux_action bits __u64 -> __u32
>>
>> coresight: Have a stab at support for pause / resume
>> Dropped
>>
>> perf tools
>> All new patches
>>
>> Changes in RFC V3:
>>
>> coresight: Have a stab at support for pause / resume
>> 'mode' -> 'flags' so it at least compiles
>>
>> Changes in RFC V2:
>>
>> Use ->stop() / ->start() instead of ->pause_resume()
>> Move aux_start_paused bit into aux_output_cfg
>> Tighten up when Intel PT pause / resume is allowed
>> Add an example of how it might work for CoreSight
>>
>>
>> Adrian Hunter (11):
>> perf/x86/intel/pt: Fix buffer full but size is 0 case
>> perf/core: Add aux_pause, aux_resume, aux_start_paused
>> perf/x86/intel/pt: Add support for pause / resume
>> perf/x86/intel: Do not enable large PEBS for events with aux actions or aux sampling
>> perf tools: Add aux_start_paused, aux_pause and aux_resume
>> perf tools: Add aux-action config term
>> perf tools: Parse aux-action
>> perf tools: Add missing_features for aux_start_paused, aux_pause, aux_resume
>> perf intel-pt: Improve man page format
>> perf intel-pt: Add documentation for pause / resume
>> perf intel-pt: Add a test for pause / resume
>>
>> arch/x86/events/intel/core.c | 4 +-
>> arch/x86/events/intel/pt.c | 84 +++-
>> arch/x86/events/intel/pt.h | 6 +
>> include/linux/perf_event.h | 28 ++
>> include/uapi/linux/perf_event.h | 11 +-
>> kernel/events/core.c | 75 +++-
>> kernel/events/internal.h | 1 +
>> tools/include/uapi/linux/perf_event.h | 11 +-
>> tools/perf/Documentation/perf-intel-pt.txt | 596 ++++++++++++++++++-----------
>> tools/perf/Documentation/perf-record.txt | 4 +
>> tools/perf/builtin-record.c | 4 +-
>> tools/perf/tests/shell/test_intel_pt.sh | 28 ++
>> tools/perf/util/auxtrace.c | 67 +++-
>> tools/perf/util/auxtrace.h | 6 +-
>> tools/perf/util/evsel.c | 15 +
>> tools/perf/util/evsel.h | 1 +
>> tools/perf/util/evsel_config.h | 1 +
>> tools/perf/util/parse-events.c | 10 +
>> tools/perf/util/parse-events.h | 1 +
>> tools/perf/util/parse-events.l | 1 +
>> tools/perf/util/perf_event_attr_fprintf.c | 3 +
>> tools/perf/util/pmu.c | 1 +
>> 22 files changed, 716 insertions(+), 242 deletions(-)
>>
>>
>> Regards
>> Adrian
>
prev parent reply other threads:[~2024-11-04 10:12 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-22 15:59 [PATCH V14 00/11] perf/core: Add ability for an event to "pause" or "resume" AUX area tracing Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 01/11] perf/x86/intel/pt: Fix buffer full but size is 0 case Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 02/11] perf/core: Add aux_pause, aux_resume, aux_start_paused Adrian Hunter
2024-11-04 10:51 ` Leo Yan
2024-10-22 15:59 ` [PATCH V14 03/11] perf/x86/intel/pt: Add support for pause / resume Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 04/11] perf/x86/intel: Do not enable large PEBS for events with aux actions or aux sampling Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 05/11] perf tools: Add aux_start_paused, aux_pause and aux_resume Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 06/11] perf tools: Add aux-action config term Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 07/11] perf tools: Parse aux-action Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 08/11] perf tools: Add missing_features for aux_start_paused, aux_pause, aux_resume Adrian Hunter
2024-11-08 15:41 ` Leo Yan
2024-11-08 17:39 ` Namhyung Kim
2024-11-08 18:01 ` Adrian Hunter
2024-11-08 18:31 ` Namhyung Kim
2024-10-22 15:59 ` [PATCH V14 09/11] perf intel-pt: Improve man page format Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 10/11] perf intel-pt: Add documentation for pause / resume Adrian Hunter
2024-10-22 15:59 ` [PATCH V14 11/11] perf intel-pt: Add a test " Adrian Hunter
2024-10-30 13:16 ` [PATCH V14 00/11] perf/core: Add ability for an event to "pause" or "resume" AUX area tracing Adrian Hunter
2024-11-04 10:11 ` Adrian Hunter [this message]
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=0b073156-dbf4-420e-b6e2-98d404ba38f1@intel.com \
--to=adrian.hunter@intel.com \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=bp@alien8.de \
--cc=brueckner@linux.ibm.com \
--cc=coresight@lists.linaro.org \
--cc=dave.hansen@linux.intel.com \
--cc=hca@linux.ibm.com \
--cc=hpa@zytor.com \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--cc=jolsa@kernel.org \
--cc=jonathan.cameron@huawei.com \
--cc=kan.liang@linux.intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mike.leach@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=suzuki.poulose@arm.com \
--cc=tglx@linutronix.de \
--cc=tmricht@linux.ibm.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=yangyicong@hisilicon.com \
/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).