On Nov 19, 2009, at 7:45 PM, Corey Ashford wrote:

> stephane eranian wrote:
>> On Fri, Nov 20, 2009 at 12:06 AM, Corey Ashford
>> <cjash...@linux.vnet.ibm.com> wrote:
>>> Hi Stephane,
>>>
>>> I am testing an implementation of libpfm4, and ran into some curious
>>> behavior with the plm field in the perf_event_attr structure.  The  
>>> code
>>> makes it appear to be intentional, but I thought I'd run this by  
>>> you to see
>>> if it's what you had intended.
>>>
>>> If I specify an event, such as PM_RUN_CYC:i, and I don't specify  
>>> any u,k, or
>>> h modifiers, none of the exclude_* bits in the perf_events  
>>> attribute record
>>> get set.  This seems ok; users may want to have events counted in  
>>> all
>>> privilege levels by default.
>>>
>>> However, if I specify "PM_RUN_CYC:i:k=0", saying I don't want kernel
>>> samples, I actually get all samples, because of this code:
>>>
>>>       if (perf_attrs.plm) {
>>>               hw->exclude_user = !(perf_attrs.plm & PFM_PLM3);
>>>               hw->exclude_kernel = !(perf_attrs.plm & PFM_PLM0);
>>>               hw->exclude_hv = !(perf_attrs.plm & PFM_PLMH);
>>>       }
>>>
>>> perf_attrs.plm is set to zero, if I set k=0.  If I were using this
>>> interface, I'd probably want hw->exclude_kernel to be set to 1.
>>>
>> You are right, I think there is a problem there.
>>
>> I think it is okay to have by default: measure everything
>>
>> The problem is that there is something missing in perf_attrs.
>> One way to make it work could be to have
>> perf_attrs.plm = PLM0|PLM3 to match the default settings and
>> then have the model specific code, toggle this if the plm is not set.
>> For instance,
>>
>>      if (!reg.sel_os)
>>            perf_attrs.plm &= ~PLM0
>>
>> So you would do:
>>     perf.attrs = PLM0|PLM3;
>>     excl_u = excl_k = 0;
>>
>>    get_encoding(, ..., &perf_attrs);
>>
>>    if (!(perf_attrs.plm & PLM0))
>>            excl_k = 1
>>
>>    if (!(perf_attrs.plm & PLM3))
>>            excl_u = 1
>
> I think one of the issues here is that the user doesn't know what  
> the default
> is.  So he doesn't know when he needs to clear or set the bits.  If  
> the default
> is user+kernel+hypervisor, then only "u=0" (etc.) can be specified  
> to change
> that.  "u" or "u=1" would have no effect since all bits are set to  
> true by
> default.  Or am I missing something here?
>

I think the default should always be to just count the user mode. This  
would be consistent with previous perfmon (and perfctr)  
implementations...

Phil


> Maybe we need an API function to obtain the defaults for each legal  
> modifier?
> Tools could then display the defaults and the user can choose to  
> modify those
> defaults, if desired.
>
> I think this function would have somewhat wider use too: events may  
> have
> per-event defaults for modifiers.  If this function was available,  
> the encoding
> function could use it internally as well when encoding an event.
>
> I have a vague feeling that I'm making this too complex, but I don't  
> see other
> alternatives at the moment.
>
> Any other thoughts would be appreciated.
>
> Regards,
>
> - Corey
>
> Corey Ashford
> Software Engineer
> IBM Linux Technology Center, Linux Toolchain
> Beaverton, OR
> 503-578-3507
> cjash...@us.ibm.com
>
>
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008  
> 30-Day
> trial. Simplify your report design, integration and deployment - and  
> focus on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> perfmon2-devel mailing list
> perfmon2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/perfmon2-devel


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to