2012-08-29 13:01:27

by Stephane Eranian

[permalink] [raw]
Subject: [PATCH] perf/x86: export Sandy Bridge uncore clockticks event in sysfs


This patch exports the clockticks event and its encoding to user level.
The clockticks event was exported for Nehalem/Westmere but not for Sandy
Bridge (client). Given that it uses a special encoding, it needs to be
exported to user tools, so users can do:

# perf stat -a -C 0 -e uncore_cbox_0/clockticks/ sleep 1

Signed-off-by: Stephane Eranian <[email protected]>
---

diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
index 0a55710..38e4894 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
@@ -661,6 +661,11 @@ static void snb_uncore_msr_init_box(struct intel_uncore_box *box)
}
}

+static struct uncore_event_desc snb_uncore_events[] = {
+ INTEL_UNCORE_EVENT_DESC(clockticks, "event=0xff,umask=0x00"),
+ { /* end: all zeroes */ },
+};
+
static struct attribute *snb_uncore_formats_attr[] = {
&format_attr_event.attr,
&format_attr_umask.attr,
@@ -704,6 +709,7 @@ static struct intel_uncore_type snb_uncore_cbox = {
.constraints = snb_uncore_cbox_constraints,
.ops = &snb_uncore_msr_ops,
.format_group = &snb_uncore_format_group,
+ .event_descs = snb_uncore_events,
};

static struct intel_uncore_type *snb_msr_uncores[] = {


2012-08-30 09:11:13

by Yan, Zheng

[permalink] [raw]
Subject: Re: [PATCH] perf/x86: export Sandy Bridge uncore clockticks event in sysfs

On 08/29/2012 09:01 PM, Stephane Eranian wrote:
>
> This patch exports the clockticks event and its encoding to user level.
> The clockticks event was exported for Nehalem/Westmere but not for Sandy
> Bridge (client). Given that it uses a special encoding, it needs to be
> exported to user tools, so users can do:
>
> # perf stat -a -C 0 -e uncore_cbox_0/clockticks/ sleep 1
>
> Signed-off-by: Stephane Eranian <[email protected]>

The Sandy Bridge uncore only contains a few events that are similar to offcore event.
That's why I didn't add any generic event for Sandy Bridge uncore. But thanks anyway.

Acked-by: Yan, Zheng <[email protected]>

> ---
>
> diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
> index 0a55710..38e4894 100644
> --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
> +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
> @@ -661,6 +661,11 @@ static void snb_uncore_msr_init_box(struct intel_uncore_box *box)
> }
> }
>
> +static struct uncore_event_desc snb_uncore_events[] = {
> + INTEL_UNCORE_EVENT_DESC(clockticks, "event=0xff,umask=0x00"),
> + { /* end: all zeroes */ },
> +};
> +
> static struct attribute *snb_uncore_formats_attr[] = {
> &format_attr_event.attr,
> &format_attr_umask.attr,
> @@ -704,6 +709,7 @@ static struct intel_uncore_type snb_uncore_cbox = {
> .constraints = snb_uncore_cbox_constraints,
> .ops = &snb_uncore_msr_ops,
> .format_group = &snb_uncore_format_group,
> + .event_descs = snb_uncore_events,
> };
>
> static struct intel_uncore_type *snb_msr_uncores[] = {
>