Hi Stephane, stephane eranian wrote: > Hi, > > Ok, so I fixed libpfm4 such that it defaults to user mode, unless the > user specify a plm attribute in the event string. This is not in GIT yet. > > For instance: > llc_misses -> user only > llc_misses:k -> kernel only > llc_misses:k=0 -> neither kernel nor user > llc_misses:u=1:k=0 -> user only > > That got me into thinking that it would probably make more sense to > NOT have libpfm4 > try to force a priv level, but instead have the user pass a default > priv level, in case > none is specified in the event string. In libpfm3, this is how this > works. User must pass > a dfl_plm, otherwise pfm_dispatch_events() fails. So we could change > the API to be > > int pfm_get_event_encoding(char *str, int dfl_plm, uint64_t *values, > int *count); > int pfm_get_perf_event_encoding(char *str, int dfl_plm, struct > perf_event_attr *attr); > >
This is fine for plm, but there could be other similar default modifiers that are needed. For example, invert might have a default value of true for some events and false for others. I think the user should have a way of querying the defaults, then formulating an event string based on an alteration of the defaults (if desired). And I think libpfm should be the repository of such default information. Perhaps, we could add a new api call pfm_get_event_attr_dfl(int idx, int attr_idx, uint64_t *attr_val); And it would return the default value in attr_val. (I seem to recall there's a string attribute type too, but I must be mistaken because it doesn't appear to be one of the possible attribute types) What do you think of this idea as an alternative to the special purpose dfl_plm param? - Corey > On Mon, Nov 23, 2009 at 4:15 PM, stephane eranian > <eran...@googlemail.com> wrote: >> Phil, >> >> On Sun, Nov 22, 2009 at 5:23 PM, Philip Mucci <mu...@eecs.utk.edu> wrote: >>> 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... >>> >> That's a good point. Note however that the default for the perf_events >> kernel API >> is to measure both kernel and user, i.e., exclude_user = >> exclude_kernel = exclude_hv = 0. >> >> But we can make that change in libpfm4. >> >>> 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 >>> -- 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