2011-01-31 16:50:39 +00:00
|
|
|
#ifndef __PERF_TOP_H
|
|
|
|
#define __PERF_TOP_H 1
|
|
|
|
|
2011-11-28 10:30:20 +00:00
|
|
|
#include "tool.h"
|
2011-01-31 16:50:39 +00:00
|
|
|
#include "types.h"
|
|
|
|
#include <stddef.h>
|
2011-11-28 10:30:20 +00:00
|
|
|
#include <stdbool.h>
|
2011-01-31 16:50:39 +00:00
|
|
|
|
|
|
|
struct perf_evlist;
|
|
|
|
struct perf_evsel;
|
2011-11-28 10:30:20 +00:00
|
|
|
struct perf_session;
|
2011-01-31 16:50:39 +00:00
|
|
|
|
|
|
|
struct perf_top {
|
2011-11-28 10:30:20 +00:00
|
|
|
struct perf_tool tool;
|
2011-01-31 16:50:39 +00:00
|
|
|
struct perf_evlist *evlist;
|
|
|
|
/*
|
|
|
|
* Symbols will be added here in perf_event__process_sample and will
|
|
|
|
* get out after decayed.
|
|
|
|
*/
|
|
|
|
u64 samples;
|
|
|
|
u64 kernel_samples, us_samples;
|
|
|
|
u64 exact_samples;
|
|
|
|
u64 guest_us_samples, guest_kernel_samples;
|
|
|
|
int print_entries, count_filter, delay_secs;
|
perf top: Reuse the 'report' hist_entry/hists classes
This actually fixes several problems we had in the old 'perf top':
1. Unresolved symbols not show, limitation that came from the old
"KernelTop" codebase, to solve it we would need to do changes
that would make sym_entry have most of the hist_entry fields.
2. It was using the number of samples, not the sum of sample->period.
And brings the --sort code that allows us to have all the views in
'perf report', for instance:
[root@emilia ~]# perf top --sort dso
PerfTop: 5903 irqs/sec kernel:77.5% exact: 0.0% [1000Hz cycles], (all, 8 CPUs)
------------------------------------------------------------------------------
31.59% libcrypto.so.1.0.0
21.55% [kernel]
18.57% libpython2.6.so.1.0
7.04% libc-2.12.so
6.99% _backend_agg.so
4.72% sshd
1.48% multiarray.so
1.39% libfreetype.so.6.3.22
1.37% perf
0.71% libgobject-2.0.so.0.2200.5
0.53% [tg3]
0.48% libglib-2.0.so.0.2200.5
0.44% libstdc++.so.6.0.13
0.40% libcairo.so.2.10800.8
0.38% libm-2.12.so
0.34% umath.so
0.30% libgdk-x11-2.0.so.0.1800.9
0.22% libpthread-2.12.so
0.20% libgtk-x11-2.0.so.0.1800.9
0.20% librt-2.12.so
0.15% _path.so
0.13% libpango-1.0.so.0.2800.1
0.11% libatlas.so.3.0
0.09% ft2font.so
0.09% libpangoft2-1.0.so.0.2800.1
0.08% libX11.so.6.3.0
0.07% [vdso]
0.06% cyclictest
^C
All the filter lists can be used as well: --dsos, --comms, --symbols,
etc.
The 'perf report' TUI is also reused, being possible to apply all the
zoom operations, do annotation, etc.
This change will allow multiple simplifications in the symbol system as
well, that will be detailed in upcoming changesets.
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-xzaaldxq7zhqrrxdxjifk1mh@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-10-05 22:16:15 +00:00
|
|
|
int freq;
|
2012-02-08 16:32:52 +00:00
|
|
|
const char *target_pid, *target_tid;
|
2012-01-19 16:08:15 +00:00
|
|
|
uid_t uid;
|
2011-01-31 16:50:39 +00:00
|
|
|
bool hide_kernel_symbols, hide_user_symbols, zero;
|
2011-11-28 11:37:05 +00:00
|
|
|
bool system_wide;
|
|
|
|
bool use_tui, use_stdio;
|
|
|
|
bool sort_has_symbols;
|
|
|
|
bool dont_use_callchains;
|
|
|
|
bool kptr_restrict_warned;
|
|
|
|
bool vmlinux_warned;
|
|
|
|
bool inherit;
|
|
|
|
bool group;
|
|
|
|
bool sample_id_all_avail;
|
|
|
|
bool dump_symtab;
|
2011-01-31 16:50:39 +00:00
|
|
|
const char *cpu_list;
|
perf top: Reuse the 'report' hist_entry/hists classes
This actually fixes several problems we had in the old 'perf top':
1. Unresolved symbols not show, limitation that came from the old
"KernelTop" codebase, to solve it we would need to do changes
that would make sym_entry have most of the hist_entry fields.
2. It was using the number of samples, not the sum of sample->period.
And brings the --sort code that allows us to have all the views in
'perf report', for instance:
[root@emilia ~]# perf top --sort dso
PerfTop: 5903 irqs/sec kernel:77.5% exact: 0.0% [1000Hz cycles], (all, 8 CPUs)
------------------------------------------------------------------------------
31.59% libcrypto.so.1.0.0
21.55% [kernel]
18.57% libpython2.6.so.1.0
7.04% libc-2.12.so
6.99% _backend_agg.so
4.72% sshd
1.48% multiarray.so
1.39% libfreetype.so.6.3.22
1.37% perf
0.71% libgobject-2.0.so.0.2200.5
0.53% [tg3]
0.48% libglib-2.0.so.0.2200.5
0.44% libstdc++.so.6.0.13
0.40% libcairo.so.2.10800.8
0.38% libm-2.12.so
0.34% umath.so
0.30% libgdk-x11-2.0.so.0.1800.9
0.22% libpthread-2.12.so
0.20% libgtk-x11-2.0.so.0.1800.9
0.20% librt-2.12.so
0.15% _path.so
0.13% libpango-1.0.so.0.2800.1
0.11% libatlas.so.3.0
0.09% ft2font.so
0.09% libpangoft2-1.0.so.0.2800.1
0.08% libX11.so.6.3.0
0.07% [vdso]
0.06% cyclictest
^C
All the filter lists can be used as well: --dsos, --comms, --symbols,
etc.
The 'perf report' TUI is also reused, being possible to apply all the
zoom operations, do annotation, etc.
This change will allow multiple simplifications in the symbol system as
well, that will be detailed in upcoming changesets.
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-xzaaldxq7zhqrrxdxjifk1mh@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-10-05 22:16:15 +00:00
|
|
|
struct hist_entry *sym_filter_entry;
|
2011-01-31 16:50:39 +00:00
|
|
|
struct perf_evsel *sym_evsel;
|
2011-09-01 17:27:58 +00:00
|
|
|
struct perf_session *session;
|
2011-11-28 11:37:05 +00:00
|
|
|
struct winsize winsize;
|
|
|
|
unsigned int mmap_pages;
|
|
|
|
int default_interval;
|
|
|
|
int realtime_prio;
|
|
|
|
int sym_pcnt_filter;
|
|
|
|
const char *sym_filter;
|
2012-01-19 16:08:15 +00:00
|
|
|
const char *uid_str;
|
2011-01-31 16:50:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size);
|
|
|
|
void perf_top__reset_sample_counters(struct perf_top *top);
|
|
|
|
#endif /* __PERF_TOP_H */
|