linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Anshuman Khandual <khandual@linux.vnet.ibm.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: mikey@neuling.org, ak@linux.intel.com,
	linux-kernel@vger.kernel.org, eranian@google.com,
	linuxppc-dev@ozlabs.org, acme@ghostprotocols.net,
	sukadev@linux.vnet.ibm.com, mingo@kernel.org
Subject: Re: [PATCH V4 08/10] powerpc, perf: Enable SW filtering in branch stack sampling framework
Date: Tue, 24 Dec 2013 09:20:53 +0530	[thread overview]
Message-ID: <52B9049D.4020403@linux.vnet.ibm.com> (raw)
In-Reply-To: <1387855790.15093.1.camel@concordia>

On 12/24/2013 08:59 AM, Michael Ellerman wrote:
> On Fri, 2013-12-20 at 16:31 +0530, Anshuman Khandual wrote:
>> On 12/09/2013 11:51 AM, Michael Ellerman wrote:
>>> On Wed, 2013-04-12 at 10:32:40 UTC, Anshuman Khandual wrote:
>>>> +
>>>> +	if (bhrb_sw_filter & PERF_SAMPLE_BRANCH_IND_CALL) {
>>>> +		/* XL-form instruction */
>>>> +		if (instr_is_branch_xlform(*addr)) {
>>>> +
>>>> +			/* LR should be set */
>>>> +			if (is_branch_link_set(*addr)) {
>>>> +				/*
>>>> +			 	 * Conditional and unconditional
>>>> +			 	 * branch to CTR.
>>>> +			 	 */
>>>> +				if (is_xlform_ctr(*addr))
>>>> +					result = true;
>>>> +
>>>> +				/*
>>>> +			 	 * Conditional and unconditional
>>>> +			 	 * branch to LR.
>>>> +			 	 */
>>>> +				if (is_xlform_lr(*addr))
>>>> +					result = true;
>>>> +
>>>> +				/*
>>>> +			 	 * Conditional and unconditional
>>>> +			 	 * branch to TAR.
>>>> +			 	 */
>>>> +				if (is_xlform_tar(*addr))
>>>> +					result = true;
>>>
>>> What other kind of XL-Form branch is there?
>>
>> I am not sure. Do you know of any ?
> 
> That was my point. There are no other types, so you can just do:
> 
> 	if (bhrb_sw_filter & PERF_SAMPLE_BRANCH_IND_CALL)
> 		if (instr_is_branch_xlform(*addr) && is_branch_link_set(*addr))
> 			return true;
> 

Done

>>>> +	if (bhrb_sw_filter & PERF_SAMPLE_BRANCH_COND) {
>>>> +
>>>> +		/* I-form instruction - excluded */
>>>> +		if (instr_is_branch_iform(*addr))
>>>> +			goto out;
>>>> +
>>>> +		/* B-form or XL-form instruction */
>>>> +		if (instr_is_branch_bform(*addr) || instr_is_branch_xlform(*addr))  {
>>>> +
>>>> +			/* Not branch always  */
>>>> +			if (!is_bo_always(*addr)) {
>>>> +
>>>> +				/* Conditional branch to CTR register */
>>>> +				if (is_bo_ctr(*addr))
>>>> +					goto out;
>>>
>>> We might have discussed this but why not?
>>
>> Did not get that, discuss what ?
> 
> Why are we saying a conditional branch to the CTR is not a conditional branch?
> 
> It is conditional, so I think it should be included.
> 

I believe conditional branch to CTR register and the below conditional branch
with static hint are excluded when processed with BHRB PMU based filter IFM3,
Here the SW implemented filter try to match those exclusions, so that a user
should not see any difference in results whether the filter is processed
either in PMU or in SW.

>>>> +
>>>> +				/* CR[BI] conditional branch with static hint */
>>>
>>> A conditional branch with a static hint is still a conditional branch?
>>
>> No its not. 
> 
> Yes it is?
> 
> In fact they could be very interesting branches. Because the compiler or
> programmer has statically hinted them, if the hint is wrong they may be a major
> source of branch midpredicts.
> 
> 
>>>> +				if (is_bo_crbi_off(*addr) || is_bo_crbi_on(*addr)) {
>>>> +					if (is_bo_crbi_hint(*addr))
>>>> +						goto out;
>>>> +				}
>>>> +
>>>> +				result = true;
>>>> +			}
>>>> +		}
>>>> +	}
>>>> +out:
>>>> +	return result;
>>>> +}
> 
>>>> +	} else {
>>>> +		/*
>>>> +		 * Userspace address needs to be
>>>> +		 * copied first before analysis.
>>>> +		 */
>>>> +		pagefault_disable();
>>>> +		ret =  __get_user_inatomic(instr, (unsigned int __user *)addr);
>>>
>>> I suspect you borrowed this incantation from the callchain code. Unlike that
>>> code you don't fallback to reading the page tables directly.
>>>
>>> I'd rather see the accessor in the callchain code made generic and have you
>>> call it here.
>>
>> You have mentioned to take care of this issue yourself.
> 
> Yes I will.

Thanks !!

  reply	other threads:[~2013-12-24  3:52 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-04 10:32 [PATCH V4 00/10] perf: New conditional branch filter Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 01/10] perf: Add PERF_SAMPLE_BRANCH_COND Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 02/10] powerpc, perf: Enable conditional branch filter for POWER8 Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 03/10] perf, tool: Conditional branch filter 'cond' added to perf record Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 04/10] x86, perf: Add conditional branch filtering support Anshuman Khandual
2013-12-06 16:46   ` Andi Kleen
2013-12-04 10:32 ` [PATCH V4 05/10] perf, documentation: Description for conditional branch filter Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 06/10] powerpc, perf: Change the name of HW PMU branch filter tracking variable Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 07/10] powerpc, lib: Add new branch instruction analysis support functions Anshuman Khandual
2013-12-09  6:21   ` Michael Ellerman
2013-12-10  6:09     ` Anshuman Khandual
2013-12-20 10:06       ` Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 08/10] powerpc, perf: Enable SW filtering in branch stack sampling framework Anshuman Khandual
2013-12-09  6:21   ` Michael Ellerman
2013-12-10  5:57     ` Anshuman Khandual
2013-12-12  8:45       ` Anshuman Khandual
2013-12-13  2:47         ` Michael Ellerman
2013-12-20 11:01     ` Anshuman Khandual
2013-12-24  3:29       ` Michael Ellerman
2013-12-24  3:50         ` Anshuman Khandual [this message]
2013-12-24  4:35           ` Michael Ellerman
2013-12-04 10:32 ` [PATCH V4 09/10] power8, perf: Change BHRB branch filter configuration Anshuman Khandual
2013-12-09  6:21   ` Michael Ellerman
2013-12-13  8:20     ` Anshuman Khandual
2013-12-18  0:08       ` Michael Ellerman
2013-12-18  3:55         ` Anshuman Khandual
2013-12-04 10:32 ` [PATCH V4 10/10] powerpc, perf: Cleanup SW branch filter list look up Anshuman Khandual
2013-12-09  6:21   ` Michael Ellerman
2013-12-20 11:06     ` Anshuman Khandual
2013-12-05  4:47 ` [PATCH V4 00/10] perf: New conditional branch filter Michael Ellerman
2013-12-06 13:18   ` Arnaldo Carvalho de Melo
2013-12-09  0:41     ` Michael Ellerman

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=52B9049D.4020403@linux.vnet.ibm.com \
    --to=khandual@linux.vnet.ibm.com \
    --cc=acme@ghostprotocols.net \
    --cc=ak@linux.intel.com \
    --cc=eranian@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=mikey@neuling.org \
    --cc=mingo@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=sukadev@linux.vnet.ibm.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).