linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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: Wed, 30 Oct 2024 15:16:00 +0200	[thread overview]
Message-ID: <7bacbe72-c283-453b-bf1f-6ba05b68cac8@intel.com> (raw)
In-Reply-To: <20241022155920.17511-1-adrian.hunter@intel.com>

On 22/10/24 18:59, Adrian Hunter wrote:
> Hi
> 
> Note for V14:
> 	KVM patches dropped.

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


  parent reply	other threads:[~2024-10-30 13:16 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 ` Adrian Hunter [this message]
2024-11-04 10:11   ` [PATCH V14 00/11] perf/core: Add ability for an event to "pause" or "resume" AUX area tracing Adrian Hunter

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=7bacbe72-c283-453b-bf1f-6ba05b68cac8@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).