2015-11-09 15:36:27

by Jiri Olsa

[permalink] [raw]
Subject: [RFC] perf x86 intel: Question about pebs_data_source data

hi,
I was checking with SDM (September 2015) and I'd like if you
guys could help me with understanding of following array elements

I'm reffering to Table 18-19. Data Source Encoding for Load Latency Record

- element 5
SDM says:

05H L3 HIT. Local or Remote home requests that hit the L3 cache and was
serviced by another processor core with a cross core snoop where no modified
copies were found. (clean).

and we have L3 SNOOP MISS:
OP_LH | P(LVL, L3) | P(SNOOP, MISS), /* 0x05: L3 hit, snoop miss */

while the SDM indicates HIT

- element 6
SDM says:

L3 HIT. Local or Remote home requests that hit the L3 cache and was serviced
by another processor core with a cross core snoop where modified copies were
found. (HITM).

and we have L3 SNOOP HIT:
OP_LH | P(LVL, L3) | P(SNOOP, HIT), /* 0x06: L3 hit, snoop hit */

while the SDM indicates HITM

I'm probably misunderstanding SDM (wouldn't be the first time) what do I miss?

thanks for comments,
jirka


---
diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c
index 5db1c7755548..000ab82d09e7 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_ds.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c
@@ -57,8 +57,8 @@ static const u64 pebs_data_source[] = {
OP_LH | P(LVL, LFB) | P(SNOOP, NONE), /* 0x02: LFB hit */
OP_LH | P(LVL, L2) | P(SNOOP, NONE), /* 0x03: L2 hit */
OP_LH | P(LVL, L3) | P(SNOOP, NONE), /* 0x04: L3 hit */
- OP_LH | P(LVL, L3) | P(SNOOP, MISS), /* 0x05: L3 hit, snoop miss */
- OP_LH | P(LVL, L3) | P(SNOOP, HIT), /* 0x06: L3 hit, snoop hit */
+ OP_LH | P(LVL, L3) | P(SNOOP, HIT), /* 0x05: L3 hit, snoop hit */
+ OP_LH | P(LVL, L3) | P(SNOOP, HITM), /* 0x06: L3 hit, snoop hitm */
OP_LH | P(LVL, L3) | P(SNOOP, HITM), /* 0x07: L3 hit, snoop hitm */
OP_LH | P(LVL, REM_CCE1) | P(SNOOP, HIT), /* 0x08: L3 miss snoop hit */
OP_LH | P(LVL, REM_CCE1) | P(SNOOP, HITM), /* 0x09: L3 miss snoop hitm*/


2015-11-10 22:41:14

by Stephane Eranian

[permalink] [raw]
Subject: Re: [RFC] perf x86 intel: Question about pebs_data_source data

On Mon, Nov 9, 2015 at 7:36 AM, Jiri Olsa <[email protected]> wrote:
>
> hi,
> I was checking with SDM (September 2015) and I'd like if you
> guys could help me with understanding of following array elements
>
> I'm reffering to Table 18-19. Data Source Encoding for Load Latency Record
>
> - element 5
> SDM says:
>
> 05H L3 HIT. Local or Remote home requests that hit the L3 cache and was
> serviced by another processor core with a cross core snoop where no modified
> copies were found. (clean).
>
> and we have L3 SNOOP MISS:
> OP_LH | P(LVL, L3) | P(SNOOP, MISS), /* 0x05: L3 hit, snoop miss */
>
> while the SDM indicates HIT
>
> - element 6
> SDM says:
>
> L3 HIT. Local or Remote home requests that hit the L3 cache and was serviced
> by another processor core with a cross core snoop where modified copies were
> found. (HITM).
>
> and we have L3 SNOOP HIT:
> OP_LH | P(LVL, L3) | P(SNOOP, HIT), /* 0x06: L3 hit, snoop hit */
>
> while the SDM indicates HITM
>
I seem to recall there was something incorrect in the SDM and that's
why I had it
this way. But it would be useful to double-check with Intel again. Andi?


> I'm probably misunderstanding SDM (wouldn't be the first time) what do I miss?
>
> thanks for comments,
> jirka
>
>
> ---
> diff --git a/arch/x86/kernel/cpu/perf_event_intel_ds.c b/arch/x86/kernel/cpu/perf_event_intel_ds.c
> index 5db1c7755548..000ab82d09e7 100644
> --- a/arch/x86/kernel/cpu/perf_event_intel_ds.c
> +++ b/arch/x86/kernel/cpu/perf_event_intel_ds.c
> @@ -57,8 +57,8 @@ static const u64 pebs_data_source[] = {
> OP_LH | P(LVL, LFB) | P(SNOOP, NONE), /* 0x02: LFB hit */
> OP_LH | P(LVL, L2) | P(SNOOP, NONE), /* 0x03: L2 hit */
> OP_LH | P(LVL, L3) | P(SNOOP, NONE), /* 0x04: L3 hit */
> - OP_LH | P(LVL, L3) | P(SNOOP, MISS), /* 0x05: L3 hit, snoop miss */
> - OP_LH | P(LVL, L3) | P(SNOOP, HIT), /* 0x06: L3 hit, snoop hit */
> + OP_LH | P(LVL, L3) | P(SNOOP, HIT), /* 0x05: L3 hit, snoop hit */
> + OP_LH | P(LVL, L3) | P(SNOOP, HITM), /* 0x06: L3 hit, snoop hitm */
> OP_LH | P(LVL, L3) | P(SNOOP, HITM), /* 0x07: L3 hit, snoop hitm */
> OP_LH | P(LVL, REM_CCE1) | P(SNOOP, HIT), /* 0x08: L3 miss snoop hit */
> OP_LH | P(LVL, REM_CCE1) | P(SNOOP, HITM), /* 0x09: L3 miss snoop hitm*/

2015-11-14 19:41:02

by Andi Kleen

[permalink] [raw]
Subject: Re: [RFC] perf x86 intel: Question about pebs_data_source data

> I'm probably misunderstanding SDM (wouldn't be the first time) what do I miss?

Hi Jiri,

We checked the history, and it appears the SDM was not updated when the
definition of the bits changed (around Sandy Bridge, possibly Westmere).
So perf is correct for newer CPUs, but not for older, and we have to fork
the table. I'll work on a patch and also see that the SDM gets fixed.

-Andi