86895b480a
Adding new --per-node option to aggregate counts per NUMA nodes for system-wide mode measurements. You can specify --per-node in live mode: # perf stat -a -I 1000 -e cycles --per-node # time node cpus counts unit events 1.000542550 N0 20 6,202,097 cycles 1.000542550 N1 20 639,559 cycles 2.002040063 N0 20 7,412,495 cycles 2.002040063 N1 20 2,185,577 cycles 3.003451699 N0 20 6,508,917 cycles 3.003451699 N1 20 765,607 cycles ... Or in the record/report stat session: # perf stat record -a -I 1000 -e cycles # time counts unit events 1.000536937 10,008,468 cycles 2.002090152 9,578,539 cycles 3.003625233 7,647,869 cycles 4.005135036 7,032,086 cycles ^C 4.340902364 3,923,893 cycles # perf stat report --per-node # time node cpus counts unit events 1.000536937 N0 20 9,355,086 cycles 1.000536937 N1 20 653,382 cycles 2.002090152 N0 20 7,712,838 cycles 2.002090152 N1 20 1,865,701 cycles 3.003625233 N0 20 6,604,441 cycles 3.003625233 N1 20 1,043,428 cycles 4.005135036 N0 20 6,350,522 cycles 4.005135036 N1 20 681,564 cycles 4.340902364 N0 20 3,403,188 cycles 4.340902364 N1 20 520,705 cycles Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexey Budankov <alexey.budankov@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Joe Mario <jmario@redhat.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Michael Petlan <mpetlan@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/20190904073415.723-4-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
67 lines
2.2 KiB
C
67 lines
2.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __PERF_CPUMAP_H
|
|
#define __PERF_CPUMAP_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
#include <internal/cpumap.h>
|
|
#include <perf/cpumap.h>
|
|
|
|
struct perf_record_cpu_map_data;
|
|
|
|
struct perf_cpu_map *perf_cpu_map__empty_new(int nr);
|
|
struct perf_cpu_map *cpu_map__new_data(struct perf_record_cpu_map_data *data);
|
|
size_t cpu_map__snprint(struct perf_cpu_map *map, char *buf, size_t size);
|
|
size_t cpu_map__snprint_mask(struct perf_cpu_map *map, char *buf, size_t size);
|
|
size_t cpu_map__fprintf(struct perf_cpu_map *map, FILE *fp);
|
|
int cpu_map__get_socket_id(int cpu);
|
|
int cpu_map__get_socket(struct perf_cpu_map *map, int idx, void *data);
|
|
int cpu_map__get_die_id(int cpu);
|
|
int cpu_map__get_die(struct perf_cpu_map *map, int idx, void *data);
|
|
int cpu_map__get_core_id(int cpu);
|
|
int cpu_map__get_core(struct perf_cpu_map *map, int idx, void *data);
|
|
int cpu_map__get_node_id(int cpu);
|
|
int cpu_map__get_node(struct perf_cpu_map *map, int idx, void *data);
|
|
int cpu_map__build_socket_map(struct perf_cpu_map *cpus, struct perf_cpu_map **sockp);
|
|
int cpu_map__build_die_map(struct perf_cpu_map *cpus, struct perf_cpu_map **diep);
|
|
int cpu_map__build_core_map(struct perf_cpu_map *cpus, struct perf_cpu_map **corep);
|
|
int cpu_map__build_node_map(struct perf_cpu_map *cpus, struct perf_cpu_map **nodep);
|
|
const struct perf_cpu_map *cpu_map__online(void); /* thread unsafe */
|
|
|
|
static inline int cpu_map__socket(struct perf_cpu_map *sock, int s)
|
|
{
|
|
if (!sock || s > sock->nr || s < 0)
|
|
return 0;
|
|
return sock->map[s];
|
|
}
|
|
|
|
static inline int cpu_map__id_to_socket(int id)
|
|
{
|
|
return id >> 24;
|
|
}
|
|
|
|
static inline int cpu_map__id_to_die(int id)
|
|
{
|
|
return (id >> 16) & 0xff;
|
|
}
|
|
|
|
static inline int cpu_map__id_to_cpu(int id)
|
|
{
|
|
return id & 0xffff;
|
|
}
|
|
|
|
int cpu__setup_cpunode_map(void);
|
|
|
|
int cpu__max_node(void);
|
|
int cpu__max_cpu(void);
|
|
int cpu__max_present_cpu(void);
|
|
int cpu__get_node(int cpu);
|
|
|
|
int cpu_map__build_map(struct perf_cpu_map *cpus, struct perf_cpu_map **res,
|
|
int (*f)(struct perf_cpu_map *map, int cpu, void *data),
|
|
void *data);
|
|
|
|
int cpu_map__cpu(struct perf_cpu_map *cpus, int idx);
|
|
bool cpu_map__has(struct perf_cpu_map *cpus, int cpu);
|
|
#endif /* __PERF_CPUMAP_H */
|