Re: [perfmon2] [PATCH] Uncore support
Status: Beta
Brought to you by:
seranian
From: stephane e. <er...@go...> - 2011-02-25 23:36:27
|
On Sat, Feb 26, 2011 at 12:23 AM, Arun Sharma <as...@fb...> wrote: > This is for supporting uncore events. > > I tested this diff with Lin Ming's uncore patch against the kernel > http://thread.gmane.org/gmane.linux.kernel/1071064 > > diff --git a/include/perfmon/perf_event.h b/include/perfmon/perf_event.h > index defc88e..de5691e 100644 > --- a/include/perfmon/perf_event.h > +++ b/include/perfmon/perf_event.h > @@ -29,6 +29,7 @@ enum perf_type_id { > PERF_TYPE_HW_CACHE = 3, > PERF_TYPE_RAW = 4, > PERF_TYPE_BREAKPOINT = 5, > + PERF_TYPE_UNCORE = 6, > PERF_TYPE_MAX, /* non-ABI */ > }; > > diff --git a/lib/pfmlib_intel_nhm_unc.c b/lib/pfmlib_intel_nhm_unc.c > index 7fcdf28..1221190 100644 > --- a/lib/pfmlib_intel_nhm_unc.c > +++ b/lib/pfmlib_intel_nhm_unc.c > @@ -100,17 +100,23 @@ pfm_wsm_unc_detect(void *this) > return PFM_SUCCESS; > } > > +#ifdef __linux__ > +#include "pfmlib_perf_event_priv.h" > static int > intel_nhm_unc_perf_encode(void *this, pfmlib_event_desc_t *e) > { > -#if 0 > struct perf_event_attr *attr = e->os_data; > - /* not yet supported by perf_event */ > - attr->type = PERF_TYPE_RAW; > + attr->type = PERF_TYPE_UNCORE; > attr->config = e->codes[0]; > -#endif > - return PFM_ERR_NOTSUPP; > + /* Can't exclude anything */ > + attr->exclude_user = 0; > + attr->exclude_kernel = 0; > + attr->exclude_hv = 0; > + attr->exclude_idle = 0; > + > + return PFM_SUCCESS; > } > +#endif > > static int > intel_nhm_unc_os_encode(void *this, pfmlib_event_desc_t *e) > diff --git a/lib/pfmlib_perf_event.c b/lib/pfmlib_perf_event.c > index 879efb6..1c7a90b 100644 > --- a/lib/pfmlib_perf_event.c > +++ b/lib/pfmlib_perf_event.c > @@ -83,6 +83,7 @@ pfmlib_perf_event_encode(void *this, const char *str, int dfl_plm, void *data) > > e.osid = os->id; > e.os_data = attr; > + e.dfl_plm = dfl_plm; > That bit could be passed but I think it is useless in most cases, perf_event controls priv levels. Now the one thing that I need to handle better is that for uncore-type of PMU, dfl_plm better be PLM0|PLM3. Otherwise, libpfm4 needs to return an error. I want something explicit so that people understand that uncore PMU ALWAYS monitor at both user + kernel. Silent errors are nasty, so I want to try and avoid that as much as possible. > ret = pfmlib_parse_event(str, &e); > if (ret != PFM_SUCCESS) > |