Lines Matching +full:ddr +full:- +full:pmu
2 /* SPDX-License-Identifier: GPL-2.0 */
5 #include <pmu-events/pmu-events.h>
7 #include "util/pmu.h"
23 /* offset=9 */ "cpu-clock\000software\000Per-CPU high-resolution timer based event\000config=0\000\…
24 /* offset=87 */ "task-clock\000software\000Per-task high-resolution timer based event\000config=1\0…
25 /* offset=167 */ "faults\000software\000Number of page faults [This event is an alias of page-fault…
26 /* offset=262 */ "page-faults\000software\000Number of page faults [This event is an alias of fault…
27 /* offset=357 */ "context-switches\000software\000Number of context switches [This event is an alia…
28 /* offset=458 */ "cs\000software\000Number of context switches [This event is an alias of context-s…
29 /* offset=559 */ "cpu-migrations\000software\000Number of times a process has migrated to a new CPU…
30 … of times a process has migrated to a new CPU [This event is an alias of cpu-migrations]\000config…
31 /* offset=823 */ "minor-faults\000software\000Number of minor page faults. Minor faults don't requi…
32 /* offset=932 */ "major-faults\000software\000Number of major page faults. Major faults require I/O…
33 /* offset=1035 */ "alignment-faults\000software\000Number of kernel handled memory alignment faults…
34 /* offset=1127 */ "emulation-faults\000software\000Number of kernel handled unimplemented instructi…
36 /* offset=1334 */ "bpf-output\000software\000An event used by BPF programs to write to the perf rin…
37 /* offset=1436 */ "cgroup-switches\000software\000Number of context switches to a task in a differe…
40 /* offset=1620 */ "user_time\000tool\000User (non-kernel) time in nanoseconds\000config=2\000\00000…
56 /* offset=3014 */ "dispatch_blocked.any\000other\000Memory cluster signals to block micro-op dispat…
61 /* offset=3362 */ "unc_cbo_xsnp_response.miss_eviction\000uncore\000A cross-core snoop resulted fro…
62 /* offset=3516 */ "event-hyphen\000uncore\000UNC_CBO_HYPHEN\000event=0xe0\000\00000\000\000\000\000…
63 /* offset=3570 */ "event-two-hyph\000uncore\000UNC_CBO_TWO_HYPH\000event=0xc0\000\00000\000\000\000…
71 /* offset=3909 */ "sys_ddr_pmu.write_cycles\000uncore\000ddr write-cycles event\000event=0x2b\000v8…
73 /* offset=4004 */ "sys_ccn_pmu.read_cycles\000uncore\000ccn read-cycles event\000config=0x2c\0000x0…
79 /* offset=4494 */ "dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.any\000\000\000\000\0…
80 /* offset=4558 */ "icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retired.any\000\000\000\00…
83 /* offset=4790 */ "DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd - l2_rqsts.demand_data…
94 { 1035 }, /* alignment-faults\000software\000Number of kernel handled memory alignment faults\000co…
95 { 1334 }, /* bpf-output\000software\000An event used by BPF programs to write to the perf ring buff…
96 { 1436 }, /* cgroup-switches\000software\000Number of context switches to a task in a different cgr…
97 { 357 }, /* context-switches\000software\000Number of context switches [This event is an alias of c…
98 { 9 }, /* cpu-clock\000software\000Per-CPU high-resolution timer based event\000config=0\000\00000\…
99 { 559 }, /* cpu-migrations\000software\000Number of times a process has migrated to a new CPU [This…
100 { 458 }, /* cs\000software\000Number of context switches [This event is an alias of context-switche…
102 { 1127 }, /* emulation-faults\000software\000Number of kernel handled unimplemented instruction fau…
103 { 167 }, /* faults\000software\000Number of page faults [This event is an alias of page-faults]\000…
104 { 932 }, /* major-faults\000software\000Number of major page faults. Major faults require I/O to ha…
105 … of times a process has migrated to a new CPU [This event is an alias of cpu-migrations]\000config…
106 { 823 }, /* minor-faults\000software\000Number of minor page faults. Minor faults don't require I/O…
107 { 262 }, /* page-faults\000software\000Number of page faults [This event is an alias of faults]\000…
108 { 87 }, /* task-clock\000software\000Per-task high-resolution timer based event\000config=1\000\000…
122 { 1620 }, /* user_time\000tool\000User (non-kernel) time in nanoseconds\000config=2\000\00000\000\0…
142 { 3014 }, /* dispatch_blocked.any\000other\000Memory cluster signals to block micro-op dispatch for…
154 { 3516 }, /* event-hyphen\000uncore\000UNC_CBO_HYPHEN\000event=0xe0\000\00000\000\000\000\000\000 */
155 { 3570 }, /* event-two-hyph\000uncore\000UNC_CBO_TWO_HYPH\000event=0xc0\000\00000\000\000\000\000\0…
156 { 3362 }, /* unc_cbo_xsnp_response.miss_eviction\000uncore\000A cross-core snoop resulted from L3 E…
203 { 4790 }, /* DCache_L2_All_Miss\000\000max(l2_rqsts.all_demand_data_rd - l2_rqsts.demand_data_rd_hi…
213 { 4494 }, /* dcache_miss_cpi\000\000l1d\\-loads\\-misses / inst_retired.any\000\000\000\000\000\000…
214 { 4558 }, /* icache_miss_cycles\000\000l1i\\-loads\\-misses / inst_retired.any\000\000\000\000\000\…
227 { 4004 }, /* sys_ccn_pmu.read_cycles\000uncore\000ccn read-cycles event\000config=0x2c\0000x01\0000…
233 { 3909 }, /* sys_ddr_pmu.write_cycles\000uncore\000ddr write-cycles event\000event=0x2b\000v8\00000…
256 /* Struct used to make the PMU event table implementation opaque to callers. */
262 /* Struct used to make the PMU metric table implementation opaque to callers. */
269 * Map a CPU to its table of PMU events. The CPU is identified by the
270 * cpuid field, which is an arch-specific identifier for the CPU.
271 * The identifier specified in tools/perf/pmu-events/arch/xxx/mapfile
285 * table of PMU events.
341 pe->name = (*p == '\0' ? NULL : p); in decompress_event()
343 pe->topic = (*p == '\0' ? NULL : p); in decompress_event()
345 pe->desc = (*p == '\0' ? NULL : p); in decompress_event()
347 pe->event = (*p == '\0' ? NULL : p); in decompress_event()
349 pe->compat = (*p == '\0' ? NULL : p); in decompress_event()
351 pe->deprecated = *p - '0'; in decompress_event()
353 pe->perpkg = *p - '0'; in decompress_event()
355 pe->unit = (*p == '\0' ? NULL : p); in decompress_event()
357 pe->retirement_latency_mean = (*p == '\0' ? NULL : p); in decompress_event()
359 pe->retirement_latency_min = (*p == '\0' ? NULL : p); in decompress_event()
361 pe->retirement_latency_max = (*p == '\0' ? NULL : p); in decompress_event()
363 pe->long_desc = (*p == '\0' ? NULL : p); in decompress_event()
370 pm->metric_name = (*p == '\0' ? NULL : p); in decompress_metric()
372 pm->metric_group = (*p == '\0' ? NULL : p); in decompress_metric()
374 pm->metric_expr = (*p == '\0' ? NULL : p); in decompress_metric()
376 pm->metric_threshold = (*p == '\0' ? NULL : p); in decompress_metric()
378 pm->desc = (*p == '\0' ? NULL : p); in decompress_metric()
380 pm->long_desc = (*p == '\0' ? NULL : p); in decompress_metric()
382 pm->unit = (*p == '\0' ? NULL : p); in decompress_metric()
384 pm->compat = (*p == '\0' ? NULL : p); in decompress_metric()
386 pm->metricgroup_no_group = (*p == '\0' ? NULL : p); in decompress_metric()
388 pm->default_metricgroup_name = (*p == '\0' ? NULL : p); in decompress_metric()
390 pm->aggr_mode = *p - '0'; in decompress_metric()
392 pm->event_grouping = *p - '0'; in decompress_metric()
396 const struct pmu_table_entry *pmu, in pmu_events_table__for_each_event_pmu() argument
402 .pmu = &big_c_string[pmu->pmu_name.offset], in pmu_events_table__for_each_event_pmu()
405 for (uint32_t i = 0; i < pmu->num_entries; i++) { in pmu_events_table__for_each_event_pmu()
406 decompress_event(pmu->entries[i].offset, &pe); in pmu_events_table__for_each_event_pmu()
417 const struct pmu_table_entry *pmu, in pmu_events_table__find_event_pmu() argument
423 .pmu = &big_c_string[pmu->pmu_name.offset], in pmu_events_table__find_event_pmu()
425 int low = 0, high = pmu->num_entries - 1; in pmu_events_table__find_event_pmu()
430 decompress_event(pmu->entries[mid].offset, &pe); in pmu_events_table__find_event_pmu()
440 high = mid - 1; in pmu_events_table__find_event_pmu()
450 high = mid - 1; in pmu_events_table__find_event_pmu()
460 struct perf_pmu *pmu, in pmu_events_table__for_each_event() argument
464 for (size_t i = 0; i < table->num_pmus; i++) { in pmu_events_table__for_each_event()
465 const struct pmu_table_entry *table_pmu = &table->pmus[i]; in pmu_events_table__for_each_event()
466 const char *pmu_name = &big_c_string[table_pmu->pmu_name.offset]; in pmu_events_table__for_each_event()
469 if (pmu && !perf_pmu__name_wildcard_match(pmu, pmu_name)) in pmu_events_table__for_each_event()
480 struct perf_pmu *pmu, in pmu_events_table__find_event() argument
485 for (size_t i = 0; i < table->num_pmus; i++) { in pmu_events_table__find_event()
486 const struct pmu_table_entry *table_pmu = &table->pmus[i]; in pmu_events_table__find_event()
487 const char *pmu_name = &big_c_string[table_pmu->pmu_name.offset]; in pmu_events_table__find_event()
490 if (pmu && !perf_pmu__name_wildcard_match(pmu, pmu_name)) in pmu_events_table__find_event()
501 struct perf_pmu *pmu) in pmu_events_table__num_events() argument
505 for (size_t i = 0; i < table->num_pmus; i++) { in pmu_events_table__num_events()
506 const struct pmu_table_entry *table_pmu = &table->pmus[i]; in pmu_events_table__num_events()
507 const char *pmu_name = &big_c_string[table_pmu->pmu_name.offset]; in pmu_events_table__num_events()
509 if (perf_pmu__name_wildcard_match(pmu, pmu_name)) in pmu_events_table__num_events()
510 count += table_pmu->num_entries; in pmu_events_table__num_events()
516 const struct pmu_table_entry *pmu, in pmu_metrics_table__for_each_metric_pmu() argument
522 .pmu = &big_c_string[pmu->pmu_name.offset], in pmu_metrics_table__for_each_metric_pmu()
525 for (uint32_t i = 0; i < pmu->num_entries; i++) { in pmu_metrics_table__for_each_metric_pmu()
526 decompress_metric(pmu->entries[i].offset, &pm); in pmu_metrics_table__for_each_metric_pmu()
537 const struct pmu_table_entry *pmu, in pmu_metrics_table__find_metric_pmu() argument
543 .pmu = &big_c_string[pmu->pmu_name.offset], in pmu_metrics_table__find_metric_pmu()
545 int low = 0, high = pmu->num_entries - 1; in pmu_metrics_table__find_metric_pmu()
550 decompress_metric(pmu->entries[mid].offset, &pm); in pmu_metrics_table__find_metric_pmu()
560 high = mid - 1; in pmu_metrics_table__find_metric_pmu()
570 high = mid - 1; in pmu_metrics_table__find_metric_pmu()
583 for (size_t i = 0; i < table->num_pmus; i++) { in pmu_metrics_table__for_each_metric()
584 int ret = pmu_metrics_table__for_each_metric_pmu(table, &table->pmus[i], in pmu_metrics_table__for_each_metric()
594 struct perf_pmu *pmu, in pmu_metrics_table__find_metric() argument
599 for (size_t i = 0; i < table->num_pmus; i++) { in pmu_metrics_table__find_metric()
600 const struct pmu_table_entry *table_pmu = &table->pmus[i]; in pmu_metrics_table__find_metric()
601 const char *pmu_name = &big_c_string[table_pmu->pmu_name.offset]; in pmu_metrics_table__find_metric()
604 if (pmu && !perf_pmu__name_wildcard_match(pmu, pmu_name)) in pmu_metrics_table__find_metric()
649 if (!map->arch) { in map_for_cpu()
654 if (!strcmp_cpuid_str(map->cpuid, cpuid)) in map_for_cpu()
669 static const struct pmu_events_map *map_for_pmu(struct perf_pmu *pmu) in map_for_pmu() argument
671 struct perf_cpu cpu = {-1}; in map_for_pmu()
673 if (pmu) { in map_for_pmu()
677 if (!strcmp(pmu_name, pmu->name)) { in map_for_pmu()
680 while (strcmp("common", map->arch)) in map_for_pmu()
685 cpu = perf_cpu_map__min(pmu->cpus); in map_for_pmu()
690 const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu) in perf_pmu__find_events_table() argument
692 const struct pmu_events_map *map = map_for_pmu(pmu); in perf_pmu__find_events_table()
697 if (!pmu) in perf_pmu__find_events_table()
698 return &map->event_table; in perf_pmu__find_events_table()
700 for (size_t i = 0; i < map->event_table.num_pmus; i++) { in perf_pmu__find_events_table()
701 const struct pmu_table_entry *table_pmu = &map->event_table.pmus[i]; in perf_pmu__find_events_table()
702 const char *pmu_name = &big_c_string[table_pmu->pmu_name.offset]; in perf_pmu__find_events_table()
704 if (perf_pmu__name_wildcard_match(pmu, pmu_name)) in perf_pmu__find_events_table()
705 return &map->event_table; in perf_pmu__find_events_table()
712 struct perf_cpu cpu = {-1}; in pmu_metrics_table__find()
715 return map ? &map->metric_table : NULL; in pmu_metrics_table__find()
721 tables->arch; in find_core_events_table()
723 if (!strcmp(tables->arch, arch) && !strcmp_cpuid_str(tables->cpuid, cpuid)) in find_core_events_table()
724 return &tables->event_table; in find_core_events_table()
732 tables->arch; in find_core_metrics_table()
734 if (!strcmp(tables->arch, arch) && !strcmp_cpuid_str(tables->cpuid, cpuid)) in find_core_metrics_table()
735 return &tables->metric_table; in find_core_metrics_table()
743 tables->arch; in pmu_for_each_core_event()
745 int ret = pmu_events_table__for_each_event(&tables->event_table, in pmu_for_each_core_event()
746 /*pmu=*/ NULL, fn, data); in pmu_for_each_core_event()
757 tables->arch; in pmu_for_each_core_metric()
759 int ret = pmu_metrics_table__for_each_metric(&tables->metric_table, fn, data); in pmu_for_each_core_metric()
770 tables->name; in find_sys_events_table()
772 if (!strcmp(tables->name, name)) in find_sys_events_table()
773 return &tables->event_table; in find_sys_events_table()
781 tables->name; in pmu_for_each_sys_event()
783 int ret = pmu_events_table__for_each_event(&tables->event_table, in pmu_for_each_sys_event()
784 /*pmu=*/ NULL, fn, data); in pmu_for_each_sys_event()
795 tables->name; in pmu_for_each_sys_metric()
797 int ret = pmu_metrics_table__for_each_metric(&tables->metric_table, fn, data); in pmu_for_each_sys_metric()
811 int low = 0, high = (int)ARRAY_SIZE(metricgroups) - 1; in describe_metricgroup()
823 high = mid - 1; in describe_metricgroup()