libperf: Add threads to struct perf_evsel
Move 'threads' from tools/perf's evsel to libperf's perf_evsel struct. 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: Michael Petlan <mpetlan@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20190721112506.12306-53-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
fe1f61b37f
commit
af663bd01b
@@ -739,7 +739,7 @@ static int record__open(struct record *rec)
|
|||||||
|
|
||||||
evlist__for_each_entry(evlist, pos) {
|
evlist__for_each_entry(evlist, pos) {
|
||||||
try_again:
|
try_again:
|
||||||
if (evsel__open(pos, pos->core.cpus, pos->threads) < 0) {
|
if (evsel__open(pos, pos->core.cpus, pos->core.threads) < 0) {
|
||||||
if (perf_evsel__fallback(pos, errno, msg, sizeof(msg))) {
|
if (perf_evsel__fallback(pos, errno, msg, sizeof(msg))) {
|
||||||
if (verbose > 0)
|
if (verbose > 0)
|
||||||
ui__warning("%s\n", msg);
|
ui__warning("%s\n", msg);
|
||||||
|
|||||||
@@ -1899,7 +1899,7 @@ static struct scripting_ops *scripting_ops;
|
|||||||
|
|
||||||
static void __process_stat(struct evsel *counter, u64 tstamp)
|
static void __process_stat(struct evsel *counter, u64 tstamp)
|
||||||
{
|
{
|
||||||
int nthreads = thread_map__nr(counter->threads);
|
int nthreads = thread_map__nr(counter->core.threads);
|
||||||
int ncpus = perf_evsel__nr_cpus(counter);
|
int ncpus = perf_evsel__nr_cpus(counter);
|
||||||
int cpu, thread;
|
int cpu, thread;
|
||||||
static int header_printed;
|
static int header_printed;
|
||||||
@@ -1921,7 +1921,7 @@ static void __process_stat(struct evsel *counter, u64 tstamp)
|
|||||||
|
|
||||||
printf("%3d %8d %15" PRIu64 " %15" PRIu64 " %15" PRIu64 " %15" PRIu64 " %s\n",
|
printf("%3d %8d %15" PRIu64 " %15" PRIu64 " %15" PRIu64 " %15" PRIu64 " %s\n",
|
||||||
counter->core.cpus->map[cpu],
|
counter->core.cpus->map[cpu],
|
||||||
thread_map__pid(counter->threads, thread),
|
thread_map__pid(counter->core.threads, thread),
|
||||||
counts->val,
|
counts->val,
|
||||||
counts->ena,
|
counts->ena,
|
||||||
counts->run,
|
counts->run,
|
||||||
|
|||||||
@@ -6,12 +6,14 @@
|
|||||||
#include <linux/perf_event.h>
|
#include <linux/perf_event.h>
|
||||||
|
|
||||||
struct perf_cpu_map;
|
struct perf_cpu_map;
|
||||||
|
struct perf_thread_map;
|
||||||
|
|
||||||
struct perf_evsel {
|
struct perf_evsel {
|
||||||
struct list_head node;
|
struct list_head node;
|
||||||
struct perf_event_attr attr;
|
struct perf_event_attr attr;
|
||||||
struct perf_cpu_map *cpus;
|
struct perf_cpu_map *cpus;
|
||||||
struct perf_cpu_map *own_cpus;
|
struct perf_cpu_map *own_cpus;
|
||||||
|
struct perf_thread_map *threads;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __LIBPERF_INTERNAL_EVSEL_H */
|
#endif /* __LIBPERF_INTERNAL_EVSEL_H */
|
||||||
|
|||||||
@@ -167,8 +167,8 @@ static void __perf_evlist__propagate_maps(struct evlist *evlist,
|
|||||||
evsel->core.cpus = perf_cpu_map__get(evsel->core.own_cpus);
|
evsel->core.cpus = perf_cpu_map__get(evsel->core.own_cpus);
|
||||||
}
|
}
|
||||||
|
|
||||||
perf_thread_map__put(evsel->threads);
|
perf_thread_map__put(evsel->core.threads);
|
||||||
evsel->threads = perf_thread_map__get(evlist->threads);
|
evsel->core.threads = perf_thread_map__get(evlist->threads);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void perf_evlist__propagate_maps(struct evlist *evlist)
|
static void perf_evlist__propagate_maps(struct evlist *evlist)
|
||||||
@@ -1407,7 +1407,7 @@ int evlist__open(struct evlist *evlist)
|
|||||||
perf_evlist__update_id_pos(evlist);
|
perf_evlist__update_id_pos(evlist);
|
||||||
|
|
||||||
evlist__for_each_entry(evlist, evsel) {
|
evlist__for_each_entry(evlist, evsel) {
|
||||||
err = evsel__open(evsel, evsel->core.cpus, evsel->threads);
|
err = evsel__open(evsel, evsel->core.cpus, evsel->core.threads);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1327,7 +1327,7 @@ void perf_evsel__exit(struct evsel *evsel)
|
|||||||
cgroup__put(evsel->cgrp);
|
cgroup__put(evsel->cgrp);
|
||||||
perf_cpu_map__put(evsel->core.cpus);
|
perf_cpu_map__put(evsel->core.cpus);
|
||||||
perf_cpu_map__put(evsel->core.own_cpus);
|
perf_cpu_map__put(evsel->core.own_cpus);
|
||||||
perf_thread_map__put(evsel->threads);
|
perf_thread_map__put(evsel->core.threads);
|
||||||
zfree(&evsel->group_name);
|
zfree(&evsel->group_name);
|
||||||
zfree(&evsel->name);
|
zfree(&evsel->name);
|
||||||
perf_evsel__object.fini(evsel);
|
perf_evsel__object.fini(evsel);
|
||||||
@@ -3065,7 +3065,7 @@ static int store_evsel_ids(struct evsel *evsel, struct evlist *evlist)
|
|||||||
int perf_evsel__store_ids(struct evsel *evsel, struct evlist *evlist)
|
int perf_evsel__store_ids(struct evsel *evsel, struct evlist *evlist)
|
||||||
{
|
{
|
||||||
struct perf_cpu_map *cpus = evsel->core.cpus;
|
struct perf_cpu_map *cpus = evsel->core.cpus;
|
||||||
struct perf_thread_map *threads = evsel->threads;
|
struct perf_thread_map *threads = evsel->core.threads;
|
||||||
|
|
||||||
if (perf_evsel__alloc_id(evsel, cpus->nr, threads->nr))
|
if (perf_evsel__alloc_id(evsel, cpus->nr, threads->nr))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|||||||
@@ -123,7 +123,6 @@ struct evsel {
|
|||||||
u64 db_id;
|
u64 db_id;
|
||||||
struct cgroup *cgrp;
|
struct cgroup *cgrp;
|
||||||
void *handler;
|
void *handler;
|
||||||
struct perf_thread_map *threads;
|
|
||||||
unsigned int sample_size;
|
unsigned int sample_size;
|
||||||
int id_pos;
|
int id_pos;
|
||||||
int is_pos;
|
int is_pos;
|
||||||
|
|||||||
@@ -1392,7 +1392,7 @@ process_stat(struct evsel *counter, int cpu, int thread, u64 tstamp,
|
|||||||
static void python_process_stat(struct perf_stat_config *config,
|
static void python_process_stat(struct perf_stat_config *config,
|
||||||
struct evsel *counter, u64 tstamp)
|
struct evsel *counter, u64 tstamp)
|
||||||
{
|
{
|
||||||
struct perf_thread_map *threads = counter->threads;
|
struct perf_thread_map *threads = counter->core.threads;
|
||||||
struct perf_cpu_map *cpus = counter->core.cpus;
|
struct perf_cpu_map *cpus = counter->core.cpus;
|
||||||
int cpu, thread;
|
int cpu, thread;
|
||||||
|
|
||||||
|
|||||||
@@ -116,9 +116,9 @@ static void aggr_printout(struct perf_stat_config *config,
|
|||||||
case AGGR_THREAD:
|
case AGGR_THREAD:
|
||||||
fprintf(config->output, "%*s-%*d%s",
|
fprintf(config->output, "%*s-%*d%s",
|
||||||
config->csv_output ? 0 : 16,
|
config->csv_output ? 0 : 16,
|
||||||
perf_thread_map__comm(evsel->threads, id),
|
perf_thread_map__comm(evsel->core.threads, id),
|
||||||
config->csv_output ? 0 : -8,
|
config->csv_output ? 0 : -8,
|
||||||
thread_map__pid(evsel->threads, id),
|
thread_map__pid(evsel->core.threads, id),
|
||||||
config->csv_sep);
|
config->csv_sep);
|
||||||
break;
|
break;
|
||||||
case AGGR_GLOBAL:
|
case AGGR_GLOBAL:
|
||||||
@@ -744,7 +744,7 @@ static void print_aggr_thread(struct perf_stat_config *config,
|
|||||||
struct evsel *counter, char *prefix)
|
struct evsel *counter, char *prefix)
|
||||||
{
|
{
|
||||||
FILE *output = config->output;
|
FILE *output = config->output;
|
||||||
int nthreads = thread_map__nr(counter->threads);
|
int nthreads = thread_map__nr(counter->core.threads);
|
||||||
int ncpus = cpu_map__nr(counter->core.cpus);
|
int ncpus = cpu_map__nr(counter->core.cpus);
|
||||||
int thread, sorted_threads, id;
|
int thread, sorted_threads, id;
|
||||||
struct perf_aggr_thread_value *buf;
|
struct perf_aggr_thread_value *buf;
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ static void perf_evsel__free_prev_raw_counts(struct evsel *evsel)
|
|||||||
static int perf_evsel__alloc_stats(struct evsel *evsel, bool alloc_raw)
|
static int perf_evsel__alloc_stats(struct evsel *evsel, bool alloc_raw)
|
||||||
{
|
{
|
||||||
int ncpus = perf_evsel__nr_cpus(evsel);
|
int ncpus = perf_evsel__nr_cpus(evsel);
|
||||||
int nthreads = thread_map__nr(evsel->threads);
|
int nthreads = thread_map__nr(evsel->core.threads);
|
||||||
|
|
||||||
if (perf_evsel__alloc_stat_priv(evsel) < 0 ||
|
if (perf_evsel__alloc_stat_priv(evsel) < 0 ||
|
||||||
perf_evsel__alloc_counts(evsel, ncpus, nthreads) < 0 ||
|
perf_evsel__alloc_counts(evsel, ncpus, nthreads) < 0 ||
|
||||||
@@ -308,7 +308,7 @@ process_counter_values(struct perf_stat_config *config, struct evsel *evsel,
|
|||||||
static int process_counter_maps(struct perf_stat_config *config,
|
static int process_counter_maps(struct perf_stat_config *config,
|
||||||
struct evsel *counter)
|
struct evsel *counter)
|
||||||
{
|
{
|
||||||
int nthreads = thread_map__nr(counter->threads);
|
int nthreads = thread_map__nr(counter->core.threads);
|
||||||
int ncpus = perf_evsel__nr_cpus(counter);
|
int ncpus = perf_evsel__nr_cpus(counter);
|
||||||
int cpu, thread;
|
int cpu, thread;
|
||||||
|
|
||||||
@@ -485,7 +485,7 @@ int create_perf_stat_counter(struct evsel *evsel,
|
|||||||
if (target__has_cpu(target) && !target__has_per_thread(target))
|
if (target__has_cpu(target) && !target__has_per_thread(target))
|
||||||
return perf_evsel__open_per_cpu(evsel, evsel__cpus(evsel));
|
return perf_evsel__open_per_cpu(evsel, evsel__cpus(evsel));
|
||||||
|
|
||||||
return perf_evsel__open_per_thread(evsel, evsel->threads);
|
return perf_evsel__open_per_thread(evsel, evsel->core.threads);
|
||||||
}
|
}
|
||||||
|
|
||||||
int perf_stat_synthesize_config(struct perf_stat_config *config,
|
int perf_stat_synthesize_config(struct perf_stat_config *config,
|
||||||
|
|||||||
Reference in New Issue
Block a user