linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Robin Murphy <robin.murphy@arm.com>
To: Peter Zijlstra <peterz@infradead.org>,
	Anshuman Khandual <anshuman.khandual@arm.com>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	acme@kernel.org, Suzuki Poulose <suzuki.poulose@arm.com>,
	James Clark <james.clark@arm.com>, Ingo Molnar <mingo@redhat.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Will Deacon <will@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH V4 03/10] perf: Extend branch type classification
Date: Tue, 15 Mar 2022 13:06:42 +0000	[thread overview]
Message-ID: <0df5c352-1f0d-55f8-5d7f-e28ba33d623b@arm.com> (raw)
In-Reply-To: <20220315112232.GF8939@worktop.programming.kicks-ass.net>

On 2022-03-15 11:22, Peter Zijlstra wrote:
> On Tue, Mar 15, 2022 at 11:05:09AM +0530, Anshuman Khandual wrote:
>> branch_entry.type now has ran out of space to accommodate more branch types
>> classification. This will prevent perf branch stack implementation on arm64
>> (via BRBE) to capture all available branch types. Extending this bit field
>> i.e branch_entry.type [4 bits] is not an option as it will break user space
>> ABI both for little and big endian perf tools.
>>
>> Extend branch classification with a new field branch_entry.new_type via a
>> new branch type PERF_BR_EXTEND_ABI in branch_entry.type. Perf tools which
>> could decode PERF_BR_EXTEND_ABI, will then parse branch_entry.new_type as
>> well.
>>
>> branch_entry.new_type is a 4 bit field which can hold upto 16 branch types.
>> The first three branch types will hold various generic page faults followed
>> by five architecture specific branch types, which can be overridden by the
>> platform for specific use cases. These architecture specific branch types
>> gets overridden on arm64 platform for BRBE implementation.
> 
>> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
>> index 26d8f0b5ac0d..d29280adc3c4 100644
>> --- a/include/uapi/linux/perf_event.h
>> +++ b/include/uapi/linux/perf_event.h
>> @@ -255,9 +255,22 @@ enum {
>>   	PERF_BR_IRQ		= 12,	/* irq */
>>   	PERF_BR_SERROR		= 13,	/* system error */
>>   	PERF_BR_NO_TX		= 14,	/* not in transaction */
>> +	PERF_BR_EXTEND_ABI	= 15,	/* extend ABI */
>>   	PERF_BR_MAX,
>>   };
> 
> 
>>   #define PERF_SAMPLE_BRANCH_PLM_ALL \
>>   	(PERF_SAMPLE_BRANCH_USER|\
>>   	 PERF_SAMPLE_BRANCH_KERNEL|\
>> @@ -1372,7 +1385,8 @@ struct perf_branch_entry {
>>   		abort:1,    /* transaction abort */
>>   		cycles:16,  /* cycle count to last branch */
>>   		type:4,     /* branch type */
>> -		reserved:40;
>> +		new_type:4, /* additional branch type */
>> +		reserved:36;
>>   };
> 
> Hurmpf... this will effectively give us 5 bits of space for the cost of
> 8, that seems... unfortunate.
> 
> Would something like:
> 
> 		type:4,
> 		ext_type:4,
> 		reserved:36;
> 
> and have all software do:
> 
> 	type = pbe->type | (pbe->ext_type << 4);
> 
> Then old software will only know about the old types. New software on
> old kernels will add 4 0's, which is harmless, while new software on new
> kernels will get 8 bytes of type.
> 
> Would that work?

Depends how bad the effects of aliasing in existing software would be, I 
guess - e.g. new kernel outputs type 0x23 which software then interprets 
as 0x3 since it doesn't know about the extended bits. I'm guessing 
that's more likely "confusing to the user" than "catastrophically 
fatal", but it might still matter.

If software had an explicit opt-in to receiving extended types when 
requesting branch sampling in the first place we could avoid that worry, 
but then we'd need some additional complexity to sanitise records 
depending on that option :/

Robin.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-03-15 13:08 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-15  5:35 [PATCH V4 00/10] perf: Expand perf_branch_entry Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 01/10] perf: Add irq and exception return branch types Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 02/10] perf: Add system error and not in transaction " Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 03/10] perf: Extend branch type classification Anshuman Khandual
2022-03-15 11:22   ` Peter Zijlstra
2022-03-15 13:06     ` Robin Murphy [this message]
2022-03-16 12:20       ` Peter Zijlstra
2022-03-17  5:41         ` Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 04/10] perf: Capture branch privilege information Anshuman Khandual
2022-03-16 17:26   ` James Clark
2022-03-15  5:35 ` [PATCH V4 05/10] perf: Add PERF_BR_NEW_ARCH_[N] map for BRBE on arm64 platform Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 06/10] perf/tools: Add irq and exception return branch types Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 07/10] perf/tools: Add system error and not in transaction " Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 08/10] perf/tools: Extend branch type classification Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 09/10] perf/tools: Add branch privilege information request flag Anshuman Khandual
2022-03-15  5:35 ` [PATCH V4 10/10] perf/tools: Add PERF_BR_NEW_ARCH_[N] map for BRBE on arm64 platform Anshuman Khandual

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=0df5c352-1f0d-55f8-5d7f-e28ba33d623b@arm.com \
    --to=robin.murphy@arm.com \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=anshuman.khandual@arm.com \
    --cc=james.clark@arm.com \
    --cc=jolsa@redhat.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=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=suzuki.poulose@arm.com \
    --cc=tglx@linutronix.de \
    --cc=will@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).