Commit 89d6c0b5bdbb1927775584dcf532d98b3efe1477

Authored by Peter Zijlstra
Committed by Ingo Molnar
1 parent b79e8941fb

perf, arch: Add generic NODE cache events

Add a NODE level to the generic cache events which is used to measure
local vs remote memory accesses. Like all other cache events, an
ACCESS is HIT+MISS, if there is no way to distinguish between reads
and writes do reads only etc..

The below needs filling out for !x86 (which I filled out with
unsupported events).

I'm fairly sure ARM can leave it like that since it doesn't strike me as
an architecture that even has NUMA support. SH might have something since
it does appear to have some NUMA bits.

Sparc64, PowerPC and MIPS certainly want a good look there since they
clearly are NUMA capable.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: David Miller <davem@davemloft.net>
Cc: Anton Blanchard <anton@samba.org>
Cc: David Daney <ddaney@caviumnetworks.com>
Cc: Deng-Cheng Zhu <dengcheng.zhu@gmail.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1303508226.4865.8.camel@laptop
Signed-off-by: Ingo Molnar <mingo@elte.hu>

Showing 19 changed files with 298 additions and 2 deletions Side-by-side Diff

arch/arm/kernel/perf_event_v6.c
... ... @@ -173,6 +173,20 @@
173 173 [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
174 174 },
175 175 },
  176 + [C(NODE)] = {
  177 + [C(OP_READ)] = {
  178 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  179 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  180 + },
  181 + [C(OP_WRITE)] = {
  182 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  183 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  184 + },
  185 + [C(OP_PREFETCH)] = {
  186 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  187 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  188 + },
  189 + },
176 190 };
177 191  
178 192 enum armv6mpcore_perf_types {
... ... @@ -297,6 +311,20 @@
297 311 },
298 312 },
299 313 [C(BPU)] = {
  314 + [C(OP_READ)] = {
  315 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  316 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  317 + },
  318 + [C(OP_WRITE)] = {
  319 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  320 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  321 + },
  322 + [C(OP_PREFETCH)] = {
  323 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  324 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  325 + },
  326 + },
  327 + [C(NODE)] = {
300 328 [C(OP_READ)] = {
301 329 [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
302 330 [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
arch/arm/kernel/perf_event_v7.c
... ... @@ -255,6 +255,20 @@
255 255 [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
256 256 },
257 257 },
  258 + [C(NODE)] = {
  259 + [C(OP_READ)] = {
  260 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  261 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  262 + },
  263 + [C(OP_WRITE)] = {
  264 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  265 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  266 + },
  267 + [C(OP_PREFETCH)] = {
  268 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  269 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  270 + },
  271 + },
258 272 };
259 273  
260 274 /*
... ... @@ -365,6 +379,20 @@
365 379 [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_WRITE,
366 380 [C(RESULT_MISS)]
367 381 = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
  382 + },
  383 + [C(OP_PREFETCH)] = {
  384 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  385 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  386 + },
  387 + },
  388 + [C(NODE)] = {
  389 + [C(OP_READ)] = {
  390 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  391 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  392 + },
  393 + [C(OP_WRITE)] = {
  394 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  395 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
368 396 },
369 397 [C(OP_PREFETCH)] = {
370 398 [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
arch/arm/kernel/perf_event_xscale.c
... ... @@ -144,6 +144,20 @@
144 144 [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
145 145 },
146 146 },
  147 + [C(NODE)] = {
  148 + [C(OP_READ)] = {
  149 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  150 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  151 + },
  152 + [C(OP_WRITE)] = {
  153 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  154 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  155 + },
  156 + [C(OP_PREFETCH)] = {
  157 + [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
  158 + [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
  159 + },
  160 + },
147 161 };
148 162  
149 163 #define XSCALE_PMU_ENABLE 0x001
arch/mips/kernel/perf_event_mipsxx.c
... ... @@ -377,6 +377,20 @@
377 377 [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
378 378 },
379 379 },
  380 +[C(NODE)] = {
  381 + [C(OP_READ)] = {
  382 + [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
  383 + [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
  384 + },
  385 + [C(OP_WRITE)] = {
  386 + [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
  387 + [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
  388 + },
  389 + [C(OP_PREFETCH)] = {
  390 + [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
  391 + [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
  392 + },
  393 +},
380 394 };
381 395  
382 396 /* 74K core has completely different cache event map. */
... ... @@ -474,6 +488,20 @@
474 488 [C(OP_WRITE)] = {
475 489 [C(RESULT_ACCESS)] = { 0x27, CNTR_EVEN, T },
476 490 [C(RESULT_MISS)] = { 0x27, CNTR_ODD, T },
  491 + },
  492 + [C(OP_PREFETCH)] = {
  493 + [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
  494 + [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
  495 + },
  496 +},
  497 +[C(NODE)] = {
  498 + [C(OP_READ)] = {
  499 + [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
  500 + [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
  501 + },
  502 + [C(OP_WRITE)] = {
  503 + [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
  504 + [C(RESULT_MISS)] = { UNSUPPORTED_PERF_EVENT_ID },
477 505 },
478 506 [C(OP_PREFETCH)] = {
479 507 [C(RESULT_ACCESS)] = { UNSUPPORTED_PERF_EVENT_ID },
arch/powerpc/kernel/e500-pmu.c
... ... @@ -75,6 +75,11 @@
75 75 [C(OP_WRITE)] = { -1, -1 },
76 76 [C(OP_PREFETCH)] = { -1, -1 },
77 77 },
  78 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  79 + [C(OP_READ)] = { -1, -1 },
  80 + [C(OP_WRITE)] = { -1, -1 },
  81 + [C(OP_PREFETCH)] = { -1, -1 },
  82 + },
78 83 };
79 84  
80 85 static int num_events = 128;
arch/powerpc/kernel/mpc7450-pmu.c
... ... @@ -388,6 +388,11 @@
388 388 [C(OP_WRITE)] = { -1, -1 },
389 389 [C(OP_PREFETCH)] = { -1, -1 },
390 390 },
  391 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  392 + [C(OP_READ)] = { -1, -1 },
  393 + [C(OP_WRITE)] = { -1, -1 },
  394 + [C(OP_PREFETCH)] = { -1, -1 },
  395 + },
391 396 };
392 397  
393 398 struct power_pmu mpc7450_pmu = {
arch/powerpc/kernel/power4-pmu.c
... ... @@ -587,6 +587,11 @@
587 587 [C(OP_WRITE)] = { -1, -1 },
588 588 [C(OP_PREFETCH)] = { -1, -1 },
589 589 },
  590 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  591 + [C(OP_READ)] = { -1, -1 },
  592 + [C(OP_WRITE)] = { -1, -1 },
  593 + [C(OP_PREFETCH)] = { -1, -1 },
  594 + },
590 595 };
591 596  
592 597 static struct power_pmu power4_pmu = {
arch/powerpc/kernel/power5+-pmu.c
... ... @@ -653,6 +653,11 @@
653 653 [C(OP_WRITE)] = { -1, -1 },
654 654 [C(OP_PREFETCH)] = { -1, -1 },
655 655 },
  656 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  657 + [C(OP_READ)] = { -1, -1 },
  658 + [C(OP_WRITE)] = { -1, -1 },
  659 + [C(OP_PREFETCH)] = { -1, -1 },
  660 + },
656 661 };
657 662  
658 663 static struct power_pmu power5p_pmu = {
arch/powerpc/kernel/power5-pmu.c
... ... @@ -595,6 +595,11 @@
595 595 [C(OP_WRITE)] = { -1, -1 },
596 596 [C(OP_PREFETCH)] = { -1, -1 },
597 597 },
  598 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  599 + [C(OP_READ)] = { -1, -1 },
  600 + [C(OP_WRITE)] = { -1, -1 },
  601 + [C(OP_PREFETCH)] = { -1, -1 },
  602 + },
598 603 };
599 604  
600 605 static struct power_pmu power5_pmu = {
arch/powerpc/kernel/power6-pmu.c
... ... @@ -516,6 +516,11 @@
516 516 [C(OP_WRITE)] = { -1, -1 },
517 517 [C(OP_PREFETCH)] = { -1, -1 },
518 518 },
  519 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  520 + [C(OP_READ)] = { -1, -1 },
  521 + [C(OP_WRITE)] = { -1, -1 },
  522 + [C(OP_PREFETCH)] = { -1, -1 },
  523 + },
519 524 };
520 525  
521 526 static struct power_pmu power6_pmu = {
arch/powerpc/kernel/power7-pmu.c
... ... @@ -342,6 +342,11 @@
342 342 [C(OP_WRITE)] = { -1, -1 },
343 343 [C(OP_PREFETCH)] = { -1, -1 },
344 344 },
  345 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  346 + [C(OP_READ)] = { -1, -1 },
  347 + [C(OP_WRITE)] = { -1, -1 },
  348 + [C(OP_PREFETCH)] = { -1, -1 },
  349 + },
345 350 };
346 351  
347 352 static struct power_pmu power7_pmu = {
arch/powerpc/kernel/ppc970-pmu.c
... ... @@ -467,6 +467,11 @@
467 467 [C(OP_WRITE)] = { -1, -1 },
468 468 [C(OP_PREFETCH)] = { -1, -1 },
469 469 },
  470 + [C(NODE)] = { /* RESULT_ACCESS RESULT_MISS */
  471 + [C(OP_READ)] = { -1, -1 },
  472 + [C(OP_WRITE)] = { -1, -1 },
  473 + [C(OP_PREFETCH)] = { -1, -1 },
  474 + },
470 475 };
471 476  
472 477 static struct power_pmu ppc970_pmu = {
arch/sh/kernel/cpu/sh4/perf_event.c
... ... @@ -180,6 +180,21 @@
180 180 [ C(RESULT_MISS) ] = -1,
181 181 },
182 182 },
  183 +
  184 + [ C(NODE) ] = {
  185 + [ C(OP_READ) ] = {
  186 + [ C(RESULT_ACCESS) ] = -1,
  187 + [ C(RESULT_MISS) ] = -1,
  188 + },
  189 + [ C(OP_WRITE) ] = {
  190 + [ C(RESULT_ACCESS) ] = -1,
  191 + [ C(RESULT_MISS) ] = -1,
  192 + },
  193 + [ C(OP_PREFETCH) ] = {
  194 + [ C(RESULT_ACCESS) ] = -1,
  195 + [ C(RESULT_MISS) ] = -1,
  196 + },
  197 + },
183 198 };
184 199  
185 200 static int sh7750_event_map(int event)
arch/sh/kernel/cpu/sh4a/perf_event.c
... ... @@ -205,6 +205,21 @@
205 205 [ C(RESULT_MISS) ] = -1,
206 206 },
207 207 },
  208 +
  209 + [ C(NODE) ] = {
  210 + [ C(OP_READ) ] = {
  211 + [ C(RESULT_ACCESS) ] = -1,
  212 + [ C(RESULT_MISS) ] = -1,
  213 + },
  214 + [ C(OP_WRITE) ] = {
  215 + [ C(RESULT_ACCESS) ] = -1,
  216 + [ C(RESULT_MISS) ] = -1,
  217 + },
  218 + [ C(OP_PREFETCH) ] = {
  219 + [ C(RESULT_ACCESS) ] = -1,
  220 + [ C(RESULT_MISS) ] = -1,
  221 + },
  222 + },
208 223 };
209 224  
210 225 static int sh4a_event_map(int event)
arch/sparc/kernel/perf_event.c
... ... @@ -246,6 +246,20 @@
246 246 [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
247 247 },
248 248 },
  249 +[C(NODE)] = {
  250 + [C(OP_READ)] = {
  251 + [C(RESULT_ACCESS)] = { CACHE_OP_UNSUPPORTED },
  252 + [C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  253 + },
  254 + [ C(OP_WRITE) ] = {
  255 + [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED },
  256 + [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  257 + },
  258 + [ C(OP_PREFETCH) ] = {
  259 + [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED },
  260 + [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  261 + },
  262 +},
249 263 };
250 264  
251 265 static const struct sparc_pmu ultra3_pmu = {
... ... @@ -361,6 +375,20 @@
361 375 [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
362 376 },
363 377 },
  378 +[C(NODE)] = {
  379 + [C(OP_READ)] = {
  380 + [C(RESULT_ACCESS)] = { CACHE_OP_UNSUPPORTED },
  381 + [C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  382 + },
  383 + [ C(OP_WRITE) ] = {
  384 + [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED },
  385 + [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  386 + },
  387 + [ C(OP_PREFETCH) ] = {
  388 + [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED },
  389 + [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  390 + },
  391 +},
364 392 };
365 393  
366 394 static const struct sparc_pmu niagara1_pmu = {
... ... @@ -463,6 +491,20 @@
463 491 [C(OP_READ)] = {
464 492 [C(RESULT_ACCESS)] = { CACHE_OP_UNSUPPORTED },
465 493 [C(RESULT_MISS)] = { CACHE_OP_UNSUPPORTED },
  494 + },
  495 + [ C(OP_WRITE) ] = {
  496 + [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED },
  497 + [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  498 + },
  499 + [ C(OP_PREFETCH) ] = {
  500 + [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED },
  501 + [ C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
  502 + },
  503 +},
  504 +[C(NODE)] = {
  505 + [C(OP_READ)] = {
  506 + [C(RESULT_ACCESS)] = { CACHE_OP_UNSUPPORTED },
  507 + [C(RESULT_MISS) ] = { CACHE_OP_UNSUPPORTED },
466 508 },
467 509 [ C(OP_WRITE) ] = {
468 510 [ C(RESULT_ACCESS) ] = { CACHE_OP_UNSUPPORTED },
arch/x86/kernel/cpu/perf_event_amd.c
... ... @@ -89,6 +89,20 @@
89 89 [ C(RESULT_MISS) ] = -1,
90 90 },
91 91 },
  92 + [ C(NODE) ] = {
  93 + [ C(OP_READ) ] = {
  94 + [ C(RESULT_ACCESS) ] = 0xb8e9, /* CPU Request to Memory, l+r */
  95 + [ C(RESULT_MISS) ] = 0x98e9, /* CPU Request to Memory, r */
  96 + },
  97 + [ C(OP_WRITE) ] = {
  98 + [ C(RESULT_ACCESS) ] = -1,
  99 + [ C(RESULT_MISS) ] = -1,
  100 + },
  101 + [ C(OP_PREFETCH) ] = {
  102 + [ C(RESULT_ACCESS) ] = -1,
  103 + [ C(RESULT_MISS) ] = -1,
  104 + },
  105 + },
92 106 };
93 107  
94 108 /*
arch/x86/kernel/cpu/perf_event_intel.c
... ... @@ -226,6 +226,21 @@
226 226 [ C(RESULT_MISS) ] = -1,
227 227 },
228 228 },
  229 + [ C(NODE) ] = {
  230 + [ C(OP_READ) ] = {
  231 + [ C(RESULT_ACCESS) ] = -1,
  232 + [ C(RESULT_MISS) ] = -1,
  233 + },
  234 + [ C(OP_WRITE) ] = {
  235 + [ C(RESULT_ACCESS) ] = -1,
  236 + [ C(RESULT_MISS) ] = -1,
  237 + },
  238 + [ C(OP_PREFETCH) ] = {
  239 + [ C(RESULT_ACCESS) ] = -1,
  240 + [ C(RESULT_MISS) ] = -1,
  241 + },
  242 + },
  243 +
229 244 };
230 245  
231 246 static __initconst const u64 westmere_hw_cache_event_ids
... ... @@ -327,6 +342,20 @@
327 342 [ C(RESULT_MISS) ] = -1,
328 343 },
329 344 },
  345 + [ C(NODE) ] = {
  346 + [ C(OP_READ) ] = {
  347 + [ C(RESULT_ACCESS) ] = 0x01b7,
  348 + [ C(RESULT_MISS) ] = 0x01b7,
  349 + },
  350 + [ C(OP_WRITE) ] = {
  351 + [ C(RESULT_ACCESS) ] = 0x01b7,
  352 + [ C(RESULT_MISS) ] = 0x01b7,
  353 + },
  354 + [ C(OP_PREFETCH) ] = {
  355 + [ C(RESULT_ACCESS) ] = 0x01b7,
  356 + [ C(RESULT_MISS) ] = 0x01b7,
  357 + },
  358 + },
330 359 };
331 360  
332 361 /*
... ... @@ -379,7 +408,21 @@
379 408 [ C(RESULT_ACCESS) ] = NHM_DMND_PREFETCH|NHM_L3_ACCESS,
380 409 [ C(RESULT_MISS) ] = NHM_DMND_PREFETCH|NHM_L3_MISS,
381 410 },
382   - }
  411 + },
  412 + [ C(NODE) ] = {
  413 + [ C(OP_READ) ] = {
  414 + [ C(RESULT_ACCESS) ] = NHM_DMND_READ|NHM_ALL_DRAM,
  415 + [ C(RESULT_MISS) ] = NHM_DMND_READ|NHM_REMOTE_DRAM,
  416 + },
  417 + [ C(OP_WRITE) ] = {
  418 + [ C(RESULT_ACCESS) ] = NHM_DMND_WRITE|NHM_ALL_DRAM,
  419 + [ C(RESULT_MISS) ] = NHM_DMND_WRITE|NHM_REMOTE_DRAM,
  420 + },
  421 + [ C(OP_PREFETCH) ] = {
  422 + [ C(RESULT_ACCESS) ] = NHM_DMND_PREFETCH|NHM_ALL_DRAM,
  423 + [ C(RESULT_MISS) ] = NHM_DMND_PREFETCH|NHM_REMOTE_DRAM,
  424 + },
  425 + },
383 426 };
384 427  
385 428 static __initconst const u64 nehalem_hw_cache_event_ids
... ... @@ -479,6 +522,20 @@
479 522 [ C(OP_PREFETCH) ] = {
480 523 [ C(RESULT_ACCESS) ] = -1,
481 524 [ C(RESULT_MISS) ] = -1,
  525 + },
  526 + },
  527 + [ C(NODE) ] = {
  528 + [ C(OP_READ) ] = {
  529 + [ C(RESULT_ACCESS) ] = 0x01b7,
  530 + [ C(RESULT_MISS) ] = 0x01b7,
  531 + },
  532 + [ C(OP_WRITE) ] = {
  533 + [ C(RESULT_ACCESS) ] = 0x01b7,
  534 + [ C(RESULT_MISS) ] = 0x01b7,
  535 + },
  536 + [ C(OP_PREFETCH) ] = {
  537 + [ C(RESULT_ACCESS) ] = 0x01b7,
  538 + [ C(RESULT_MISS) ] = 0x01b7,
482 539 },
483 540 },
484 541 };
arch/x86/kernel/cpu/perf_event_p4.c
... ... @@ -554,6 +554,20 @@
554 554 [ C(RESULT_MISS) ] = -1,
555 555 },
556 556 },
  557 + [ C(NODE) ] = {
  558 + [ C(OP_READ) ] = {
  559 + [ C(RESULT_ACCESS) ] = -1,
  560 + [ C(RESULT_MISS) ] = -1,
  561 + },
  562 + [ C(OP_WRITE) ] = {
  563 + [ C(RESULT_ACCESS) ] = -1,
  564 + [ C(RESULT_MISS) ] = -1,
  565 + },
  566 + [ C(OP_PREFETCH) ] = {
  567 + [ C(RESULT_ACCESS) ] = -1,
  568 + [ C(RESULT_MISS) ] = -1,
  569 + },
  570 + },
557 571 };
558 572  
559 573 static u64 p4_general_events[PERF_COUNT_HW_MAX] = {
include/linux/perf_event.h
... ... @@ -61,7 +61,7 @@
61 61 /*
62 62 * Generalized hardware cache events:
63 63 *
64   - * { L1-D, L1-I, LLC, ITLB, DTLB, BPU } x
  64 + * { L1-D, L1-I, LLC, ITLB, DTLB, BPU, NODE } x
65 65 * { read, write, prefetch } x
66 66 * { accesses, misses }
67 67 */
... ... @@ -72,6 +72,7 @@
72 72 PERF_COUNT_HW_CACHE_DTLB = 3,
73 73 PERF_COUNT_HW_CACHE_ITLB = 4,
74 74 PERF_COUNT_HW_CACHE_BPU = 5,
  75 + PERF_COUNT_HW_CACHE_NODE = 6,
75 76  
76 77 PERF_COUNT_HW_CACHE_MAX, /* non-ABI */
77 78 };