Corey,
I spent some time today experimenting with what I described yesterday
and in particular the fully qualified event string support. I got that working
on X86. There are still a few things to patch up but looks promising.
I have also added the defaul priv level support we talked about some
time ago.
Now the prototype for perf_events looks as follows:
pfm_get_perf_event_encoding(const char *str, int dfl_plm, struct
perf_event_attr *hw, char **fstr, int *idx);
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
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)
- no modifier was set by user
Thus the tool, may now chose to diplay the full name instead of just
the specified name.
Now, I need to deal with events which have hardcoded modifers. On x86,
those are provided
for convience, thus they are always a clone of an existing event or unit mask.
Let's look at an example:
{ .name = "UOPS_ISSUED",
.desc = "Micro-ops issued",
.modmsk = INTEL_V3_ATTRS,
.cntmsk = 0xf,
.code = 0x0E,
.flags = INTEL_X86_UMASK_NCOMBO,
.ngrp = 1,
.umasks = {
{ .uname = "ANY",
.udesc = "Uops issued",
.ucode = 0x01,
.uflags = INTEL_X86_DFL_UMASK,
},
{ .uname = "STALLED_CYCLES",
.udesc = "Cycles stalled no issued uops",
.ucode = 0x01 | (1<<16) | (1<<15), /*
counter-mask=1, inv=1 */
.uflags = 0,
}
...
}
UOPS_ISSUED:STALLED_CYCLES is equivalent to
UOPS_ISSUED:ANY:c=1:i=1
The question is what do you print here?
------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
perfmon2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel