Corey,

We still need to settle on the user interface to extract default
information (and maybe aliases information).

Here is what I have today:

typedef struct {
        const char *name;
        const char *desc;
        const char *alias;
        pfm_pmu_t pmu;
        int idx;
        int nattrs;
        int size;
        uint64_t code;
        struct {
                int is_alias:1;
                int reserved:31;
        };
        uint64_t reserved[9];
} pfm_event_info_t;

typedef struct {
        const char *name;
        const char *desc;
        const char *alias;
        pfm_attr_t type;
        struct {
                int is_dfl:1; /* is default */
                int is_alias:1;
                int reserved:30;
        };
        int idx;
        int size;
        uint64_t code;
        union {
                uint64_t dfl_val64;
                const char *dfl_str;
                int dfl_bool;
                int dfl_int;
        };
        uint64_t reserved1[6];
} pfm_event_attr_info_t;

int pfm_get_event_info(int idx, pfm_event_info_t *info);
int pfm_get_event_attr_info(int idx, int attr_idx, pfm_event_attr_info_t *info);


Notice the new is_alias and the alias string which is valid only if is_alias
is set. it contains the event string describing how the alias build on the
original event, e.g., with hardwired modifiers.


On Tue, Dec 15, 2009 at 12:09 AM, Corey Ashford
<cjash...@linux.vnet.ibm.com> wrote:
>
>
> stephane eranian wrote:
>>
>> Corey,
>>
>> Ok, so I tried what we talked about on a couple of
>> examples (some made up). And now here is what
>> I get:
>>
>> $ task -euops_issued:any,l2_ifetch:mesi date
>>
>> [0x513f0e event_sel=0xe umask=0x3f os=0 usr=1 en=1 int=1 inv=0 edge=0
>> cnt_mask=0] UOPS_ISSUED
>> FSTR=UOPS_ISSUED2:PORT0:PORT1:PORT2:PORT3:PORT4:PORT5:k=0:u=1:e=0:i=0:c=0
>>
>> [0x514f28 event_sel=0x28 umask=0x4f os=0 usr=1 en=1 int=1 inv=0 edge=0
>> cnt_mask=0] L2_IFETCH
>> FSTR=L2_IFETCH:SELF:I_STATE:S_STATE:E_STATE:M_STATE:k=0:u=1:e=0:i=0:c=0
>>
>> That looks like what you suggested. This is all handled in X86 code.
>> Hard to make it more specific than that!
>
> Yes, this is great :-)  I can't see needing anything other than this right
> now.
>
> Perhaps in an initial port of an arch to libpfm4, fstr would just be a copy
> of str (or perhaps NULL to specify unimplemented).  Later the reverse
> translation can be added.
>
> One question about the above example: I see usr=1... I assume the "task"
> program is passing in plm=<value for user mode> ?
>
> About the event aliases in the previous posting, wouldn't it be the case
> that having such aliases could cause an explosion in the number of events
> (mostly aliases) in the event table, since many events might need such
> variants?
>
> --
> Regards,
>
> - Corey
>
> Corey Ashford
> Software Engineer
> IBM Linux Technology Center, Linux Toolchain
> Beaverton, OR
> 503-578-3507
> cjash...@us.ibm.com
>
>

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to