Corey,

On Fri, Dec 11, 2009 at 11:39 PM, Corey Ashford
<cjash...@linux.vnet.ibm.com> wrote:
> Hi Stephane,
>> Here is an example on Core 2.
>>
>> Name     : RS_UOPS_DISPATCHED_CYCLES
>> Desc     : Cycles micro-ops dispatched for execution
>> Code     : 0xa1
>> Umask-00 : 0x01 : [PORT_0] : on port 0
>> Umask-01 : 0x02 : [PORT_1] : on port 1
>> Umask-02 : 0x04 : [PORT_2] : on port 2
>> Umask-03 : 0x08 : [PORT_3] : on port 3
>> Umask-04 : 0x10 : [PORT_4] : on port 4
>> Umask-05 : 0x20 : [PORT_5] : on port 5
>> Umask-06 : 0x3f : [ANY] : on any port (DEFAULT)
>> Modif-00 : 0x00 : [u] : monitor at priv level 1, 2, 3 (boolean)
>> Modif-01 : 0x01 : [k] : monitor at priv level 0 (boolean)
>> Modif-02 : 0x02 : [i] : invert (boolean)
>> Modif-03 : 0x03 : [e] : edge level (boolean)
>> Modif-04 : 0x04 : [c] : counter-mask in range [0-255] (integer)
>>
>>
>> % task -eRS_UOPS_DISPATCHED_CYCLES date
>> [0x513fa1 event_sel=0xa1 umask=0x3f os=0 usr=1 en=1 int=1 inv=0 edge=0
>> cnt_mask=0] RS_UOPS_DISPATCHED_CYCLES:ANY:u=1:k=0:i=0:e=0:c=0
>> PERF[type=4 val=0x513fa1 e_u=0 e_k=1 e_hv=1]
>>
>> FQSTR=RS_UOPS_DISPATCHED_CYCLES:ANY:u=1:k=0:i=0:e=0:c=0
>>
>
> I assume FQSTR here is the "fstr" parameter in the prototype.
>
Yes.

> I like this API.  This should make tool writing very easy.
>
Yes, I think it is simpler. Yet we still need a way to extract
default information. I used one in showevtinfo with the data
structure we talked about.

>> Few things to note in this output:
>>  - notice that showevtinfo print (DEFAULT) now
>>  - the library build the fully qualified event string
>>  - ANY was default,
>>  - dfl_plm = PFM_PLM3 (u)
>
> Could the user have achieved the same thing by specifying dfl_plm = 0, and
> then
> add ":u=1" to the event string?  I would assume that would be legal.
>
For now, dfl_plm cannot be zero, i.e.,  need to provide a default priv
level. You have
no guarantee the user passed something. if nothing is passed in the event string
and dfl_plm=0, then nothing is going to be measured. The way it is now
will catch
any stupid mistakes. OTOH, it might be useful to allow no priv level
set, but I can't
think of an example right now. Note that dfl_plm may be ignored once
there are events
which do not need it.

To answer the underlying question, anything the user passes in the event string
has higher priority than dfl_plm. I can have dfl_plm = PLM3 (u=1) and an event
string with k=1, if which case the event will measure at the kernel only.

>> Thus the tool, may now chose to diplay the full name instead of just
>> the specified name.
>
> Very nice.
>
Yes, and this week-end I added the missing piece to this puzzle having to do
with hardwired modifiers. Here is an example on Core 2:

        { .name = "RS_UOPS_DISPATCHED_NONE",
          .code = 0xa0 | (1 << 23) | (1 << 24),
          .cntmsk = 0x3,
         .modmsk = _INTEL_X86_ATTR_U|_INTEL_X86_ATTR_K,
          .flags = INTEL_X86_ALIAS,
          .alias = "RS_UOPS_DISPATCHED",
          .desc =  "Number of of cycles in which no micro-ops is
dispatched for execution",
        },

This is an event that is an alias to another event but it has some
modifiers hardcoded.
(i=invert, c=counter-mask). So first you noticed that are not part of
the modmsk (which
is the attrmsk we talked about). Second, you have the INTEL_X86_ALIAS
which indicates
this is an alias with the actual event pointed to by .alias. In this
case, the fstr coming out
is:

$ perf_examples/task -e rs_uops_dispatched_none date

[0x1d100a0 event_sel=0xa0 umask=0x0 os=0 usr=1 en=1 int=1 inv=1 edge=0
cnt_mask=1]

PERF[type=4 val=0x1d100a0 e_u=0 e_k=1 e_hv=1]
RS_UOPS_DISPATCHED:k=0:u=1:e=0:i=1:c=1

FQSTR=RS_UOPS_DISPATCHED:k=0:u=1:e=0:i=1:c=1

>>
>> UOPS_ISSUED:STALLED_CYCLES is equivalent to
>> UOPS_ISSUED:ANY:c=1:i=1
>>
>> The question is what do you print here?
>
> Sorry, I'm a little confused here.  Do you mean hard-wired or hard-coded?
>  It looks like a ucode of 0x1 is required (needs to be hard-wired), but
> there are also a couple of optional bits which can be turned on, and you've
> given a name to one such optional encoding.  Would it be legit also to
> specify "UOPS_ISSUED:ANY:i=1" or "UOPS_ISSUED:ANY:c=1"?  I would assume so.
>
Given what I just described above, OPS_ISSUED:STALLED_CYCLES would now
come out as fstr=UOPS_ISSUED:ANY:c=1:i=1 which makes more sense. Because
now you have both the logical event string (what you pass) and the actual event
string. The tool has both and can decide which one to use.
As for your question, the way the code is, it would not be legit, You
cannot set a
hardwired modifier, even if it is to the same value.

> As for the printing issue, let's say someone specifies
> "UOPS_ISSUED:ANY:c=1:i=1", the question is, is the fully qualified name
> "UOPS_ISSUED:STALLED_CYCLES" or is it "UOPS_ISSUED:ANY:c=1:i=1" ?  Also, if
> they specify "UOPS_ISSUED:STALLED_CYCLES", what would be the proper fully
> qualified name?  Hmm.  Either way has its downsides... one way is more
> compact and perhaps more descriptive, and the other way is completely
> transparent, but perhaps harder to read and maybe too verbose.
>
> Maybe there should be a "verbose" option that when set would spell out all
> of the options, and when not set, would attempt to compact the settings into
> known umasks + individual modifiers.  That might be ideal, but given the
> structure above, I think it might be hard to implement without some changes.
>  We'd need to find some way of calculating whether a umask's ucode is a
> subset of the settings specified by the event string.

------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to