On Sat, Feb 26, 2011 at 12:23 AM, Arun Sharma <asha...@fb.com> 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)
>

------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in 
Real-Time with Splunk. Collect, index and harness all the fast moving IT data 
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business 
insights. http://p.sf.net/sfu/splunk-dev2dev 
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to