perf/cover improvements and fixes
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit c2365b9388e8ec19305e3f449c1826e7493d156d:
perf/x86/intel/uncore: Do not use macro DEFINE_PCI_DEVICE_TABLE() (2015-10-01 10:53:03 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
for you to fetch changes up to 19afd10410957b1c808c2c49a88e6dd8b23aa894:
perf stat: Reduce min --interval-print to 10ms (2015-10-02 17:07:55 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:
User visible:
- Do event name substring search as last resort in 'perf list'. (Arnaldo Carvalho de Melo)
E.g.:
# perf list clock
List of pre-defined events (to be used in -e):
cpu-clock [Software event]
task-clock [Software event]
uncore_cbox_0/clockticks/ [Kernel PMU event]
uncore_cbox_1/clockticks/ [Kernel PMU event]
kvm:kvm_pvclock_update [Tracepoint event]
kvm:kvm_update_master_clock [Tracepoint event]
power:clock_disable [Tracepoint event]
power:clock_enable [Tracepoint event]
power:clock_set_rate [Tracepoint event]
syscalls:sys_enter_clock_adjtime [Tracepoint event]
syscalls:sys_enter_clock_getres [Tracepoint event]
syscalls:sys_enter_clock_gettime [Tracepoint event]
syscalls:sys_enter_clock_nanosleep [Tracepoint event]
syscalls:sys_enter_clock_settime [Tracepoint event]
syscalls:sys_exit_clock_adjtime [Tracepoint event]
syscalls:sys_exit_clock_getres [Tracepoint event]
syscalls:sys_exit_clock_gettime [Tracepoint event]
syscalls:sys_exit_clock_nanosleep [Tracepoint event]
syscalls:sys_exit_clock_settime [Tracepoint event]
- Reduce min 'perf stat --interval-print/-I' to 10ms (Kan Liang)
perf stat --interval in action:
# perf stat -e cycles -I 50 -a usleep $((200 * 1000))
print interval < 100ms. The overhead percentage could be high in some cases. Please proceed with caution.
# time counts unit events
0.050233636 48,240,396 cycles
0.100557098 35,492,594 cycles
0.150804687 39,295,112 cycles
0.201032269 33,101,961 cycles
0.201980732 786,379 cycles
#- Allow for max_stack greater than PERF_MAX_STACK_DEPTH, as when synthesizing callchains from Intel PT data (Adrian Hunter)
- Allow probing on kmodules without DWARF (Masami Hiramatsu)
- Fix a segfault when processing a perf.data file with callchains using "perf report --call-graph none" (Namhyung Kim)
- Fix unresolved COMMs in 'perf top' when -s comm is used (Namhyung Kim)
- Register idle thread in 'perf top' (Namhyung Kim)
- Change 'record.samples' type to unsigned long long, fixing output of number of samples in 32-bit architectures (Yang Shi)
----------------------------------------------------------------
Adrian Hunter (1):
perf callchain: Allow for max_stack greater than PERF_MAX_STACK_DEPTH
Arnaldo Carvalho de Melo (2):
perf list: Do event name substring search as last resort when no events found perf list: Honour 'event_glob' whem printing selectable PMUs
Kan Liang (1):
perf stat: Reduce min --interval-print to 10ms
Masami Hiramatsu (1):
perf probe: Allow probing on kmodules without dwarf
Namhyung Kim (4):
perf record: Allocate area for sample_id_hdr in a synthesized comm event perf top: Fix unresolved comm when -s comm is used
perf top: Register idle thread
perf report: Fix a bug on "--call-graph none" option
Yang Shi (1):
perf record: Change 'record.samples' type to unsigned long long
tools/perf/Documentation/perf-list.txt | 2 ++ tools/perf/Documentation/perf-stat.txt | 5 +++-- tools/perf/builtin-list.c | 18 ++++++++++++++++-- tools/perf/builtin-probe.c | 8 +++----- tools/perf/builtin-record.c | 16 ++++++++++++---- tools/perf/builtin-stat.c | 13 +++++++++---- tools/perf/builtin-top.c | 10 ++++++++-- tools/perf/util/hist.c | 2 +- tools/perf/util/machine.c | 2 +- tools/perf/util/pmu.c | 3 ++- tools/perf/util/probe-event.c | 8 +++++--- tools/perf/util/session.c | 2 +- tools/perf/util/session.h | 2 ++ 13 files changed, 65 insertions(+), 26 deletions(-)
Arnaldo Carvalho de Melo
maintainerPATCH 1/10 perf record: Allocate area for sample_id_hdr in a synthesized comm event
From: Namhyung Kim <[email protected]>
A previous patch added a synthesized comm event for forked child process but it missed that the event should contain area for sample_id_hdr at the end. It worked by accident since the perf_event union contains bigger event structs like mmap_events.
This patch fixes it by dynamically allocating event struct including those area like in perf_event__synthesize_thread_map().
--- tools/perf/builtin-record.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
tools/perf/builtin-record.c +10 -2
@@ -637,17 +637,25 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)* Let the child rip */ if (forks) { -union perf_event event; +union perf_event *event; + + event =malloc (sizeof (event->comm) + machine->id_hdr_size); +if (event ==NULL ) { + err = -ENOMEM ; + goto out_child; + } +/* * Some H/W events are generated before COMM event * which is emitted during exec(), so perf script * cannot see a correct process name for those events. * Synthesize COMM event to prevent it. */ -perf_event__synthesize_comm (tool, &event, +perf_event__synthesize_comm (tool, event, rec->evlist->workload.pid, process_synthesized_event, machine); +free (event);perf_evlist__start_workload (rec->evlist); }
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 2/10 perf top: Fix unresolved comm when -s comm is used
In reply to Arnaldo Carvalho de MeloFrom: Namhyung Kim <[email protected]>
The perf top uses 'dso,symbol' sort keys by default so it overlooked a problem in task's comm resolving. When the sort key contains 'comm', some task's comm is not shown properly. This is because the perf_top__mmap_read_idx() checks the cpumode value improperly.
The cpumode value of non-sample events are 0 (PERF_RECORD_MISC_CPUMODE_ UNKNOWN) so the events will be ignored by the switch statement. This patch allows it for non-sample events.
--- tools/perf/builtin-top.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
tools/perf/builtin-top.c +5 -2
@@ -857,9 +857,12 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)* TODO: we don't process guest user from host side * except simple counting. */ -/* Fall thru */ -default : goto next_event; +default : +if (event->header.type ==PERF_RECORD_SAMPLE ) + goto next_event; + machine = &session->machines.host; +break ; }
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 3/10 perf top: Register idle thread
In reply to Arnaldo Carvalho de MeloFrom: Namhyung Kim <[email protected]>
The perf top didn't add the idle/swapper thread to the machine's thread list and its comm was displayed as ':0'. Fix it.
--- tools/perf/builtin-top.c | 3 +++ tools/perf/util/session.c | 2 +- tools/perf/util/session.h | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-)
tools/perf/builtin-top.c +3 -0
@@ -964,6 +964,9 @@ static int __cmd_top(struct perf_top *top)if (ret) goto out_delete; +if (perf_session__register_idle_thread (top->session) ==NULL ) + goto out_delete; +machine__synthesize_threads (&top->session->machines.host, &opts->target, top->evlist->threads, false, opts->proc_map_timeout);
tools/perf/util/session.c +1 -1
@@ -1311,7 +1311,7 @@ struct thread *perf_session__findnew(struct perf_session *session, pid_t pid)return machine__findnew_thread (&session->machines.host,-1 , pid); } -static struct thread *perf_session__register_idle_thread (struct perf_session *session) +struct thread *perf_session__register_idle_thread (struct perf_session *session) {struct thread *thread;
tools/perf/util/session.h +2 -0
@@ -89,6 +89,8 @@ struct machine *perf_session__findnew_machine(struct perf_session *session, pid_ }struct thread *perf_session__findnew (struct perf_session *session,pid_t pid); +struct thread *perf_session__register_idle_thread (struct perf_session *session); +size_t perf_session__fprintf (struct perf_session *session,FILE *fp);size_t perf_session__fprintf_dsos (struct perf_session *session,FILE *fp);
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 4/10 perf report: Fix a bug on "--call-graph none" option
In reply to Arnaldo Carvalho de MeloFrom: Namhyung Kim <[email protected]>
The patch f9db0d0f1b2c ("perf callchain: Allow disabling call graphs per event") added an ability to enable/disable callchain recording per event. But it had a problem when the enablement setting is changed at 'perf report' time using -g/--call-graph option.
For example, the following scenario will get a segfault.
$ perf record -ag sleep 1 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.500 MB perf.data (2555 samples) ]
$ perf report -g none perf: Segmentation fault -------- backtrace -------- perf[0x53a98a] /usr/lib/libc.so.6(+0x335af)[0x7f4e91df95af]
This is because callchain_param.sort() callback was not set but it tried to call the function as it had the PERF_SAMPLE_CALLCHAIN bit.
--- tools/perf/util/hist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/hist.c +1 -1
@@ -1151,7 +1151,7 @@ void hists__output_resort(struct hists *hists, struct ui_progress *prog)struct perf_evsel *evsel =hists_to_evsel (hists);bool use_callchain; -if (evsel && !symbol_conf.show_ref_callgraph) +if (evsel && symbol_conf.use_callchain && !symbol_conf.show_ref_callgraph) use_callchain = evsel->attr.sample_type &PERF_SAMPLE_CALLCHAIN ;else use_callchain = symbol_conf.use_callchain;
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 5/10 perf callchain: Allow for max_stack greater than PERF_MAX_STACK_DEPTH
In reply to Arnaldo Carvalho de MeloFrom: Adrian Hunter <[email protected]>
Adjust the validation to allow for max_stack greater than PERF_MAX_STACK_DEPTH.
--- tools/perf/util/machine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/machine.c +1 -1
@@ -1831,7 +1831,7 @@ static int thread__resolve_callchain_sample(struct thread *thread, } check_calls: -if (chain->nr >PERF_MAX_STACK_DEPTH ) { +if (chain->nr >PERF_MAX_STACK_DEPTH && (int )chain->nr > max_stack) {pr_warning ("corrupted callchain. skipping...\n" );return 0 ; }
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 6/10 perf list: Do event name substring search as last resort when no events found
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Before:
# perf list _alloc_ | head -10 #
After:
# perf list _alloc_ | head -10
ext4:ext4_alloc_da_blocks [Tracepoint event]
ext4:ext4_get_implied_cluster_alloc_exit [Tracepoint event]
kmem:kmem_cache_alloc_node [Tracepoint event]
kmem:mm_page_alloc_extfrag [Tracepoint event]
kmem:mm_page_alloc_zone_locked [Tracepoint event]
xen:xen_mmu_alloc_ptpage [Tracepoint event]
#And it works for all types of events:
# perf list br
List of pre-defined events (to be used in -e):
branch-instructions OR branches [Hardware event]
branch-misses [Hardware event]
branch-load-misses [Hardware cache event]
branch-loads [Hardware cache event]
branch-instructions OR cpu/branch-instructions/ [Kernel PMU event]
branch-misses OR cpu/branch-misses/ [Kernel PMU event]
filelock:break_lease_block [Tracepoint event]
filelock:break_lease_noblock [Tracepoint event]
filelock:break_lease_unblock [Tracepoint event]
syscalls:sys_enter_brk [Tracepoint event]
syscalls:sys_exit_brk [Tracepoint event]
#
--- tools/perf/Documentation/perf-list.txt | 2 ++ tools/perf/builtin-list.c | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-)
tools/perf/Documentation/perf-list.txt +2 -0
@@ -125,6 +125,8 @@ To limit the list use: . If none of the above is matched, it will apply the supplied glob to all events, printing the ones that match. +. As a last resort, it will do a substring search in all event names. + One or more types can be used at the same time, listing the events for the types specified.
tools/perf/builtin-list.c +16 -2
@@ -45,6 +45,8 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused) }for (i =0 ; i < argc; ++i) { +char *sep, *s; +if (strcmp (argv[i],"tracepoint" ) ==0 )print_tracepoint_events (NULL ,NULL , raw_dump); else if (strcmp(argv[i], "hw") == 0 ||
@@ -60,8 +62,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)print_hwcache_events (NULL , raw_dump); else if (strcmp(argv[i], "pmu") == 0) print_pmu_events(NULL, raw_dump); - else { -char *sep =strchr (argv[i],':' ), *s; + else if ((sep = strchr(argv[i], ':')) != NULL) {int sep_idx;if (sep ==NULL ) {
@@ -76,6 +77,19 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused) s[sep_idx] ='\0' ;print_tracepoint_events (s, s + sep_idx +1 , raw_dump);free (s); + }else { +if (asprintf (&s,"*%s*" , argv[i]) <0 ) { +printf ("Critical: Not enough memory! Trying to continue...\n" ); +continue ; + } +print_symbol_events (s,PERF_TYPE_HARDWARE , + event_symbols_hw,PERF_COUNT_HW_MAX , raw_dump); +print_symbol_events (s,PERF_TYPE_SOFTWARE , + event_symbols_sw,PERF_COUNT_SW_MAX , raw_dump); +print_hwcache_events (s, raw_dump); +print_pmu_events (s, raw_dump); +print_tracepoint_events (NULL , s, raw_dump); +free (s); } }return 0 ;
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 7/10 perf list: Honour 'event_glob' whem printing selectable PMUs
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Some PMUs, like the 'intel_bts' one can be used as an event name, i.e.:
$ perf record -e intel_bts:// usleep 1
Is a valid event name.
But the code printing such PMUs was not honouring the 'event_glob' parameter, so the following line was always appearing:
$ intel_bts// [Kernel PMU event]
Fix it:
$ [acme@felicio linux]$ perf list data
List of pre-defined events (to be used in -e):
uncore_imc/data_reads/ [Kernel PMU event]
uncore_imc/data_writes/ [Kernel PMU event]
$
--- tools/perf/util/pmu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/perf/util/pmu.c +2 -1
@@ -1008,7 +1008,8 @@ void print_pmu_events(const char *event_glob, bool name_only) goto out_enomem; j++; } -if (pmu->selectable) { +if (pmu->selectable && + (event_glob ==NULL ||strglobmatch (pmu->name, event_glob))) {char *s;if (asprintf (&s,"%s//" , pmu->name) <0 ) goto out_enomem;
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 8/10 perf probe: Allow probing on kmodules without dwarf
In reply to Arnaldo Carvalho de MeloFrom: Masami Hiramatsu <[email protected]>
Allow probing on kernel modules when 'perf' is built without debuginfo support.
Currently perf-probe --module requires linking with libdw, but this doesn't make sense.
E.g.
----
# make NO_DWARF=1
# ./perf probe -m pcspkr pcspkr_event%return
Error: unknown switch `m'
----With this patch
----
# ./perf probe -m pcspkr pcspkr_event%return
Added new event:
probe:pcspkr_event (on pcspkr_event%return in pcspkr)You can now use it in all perf tools, such as:
perf record -e probe:pcspkr_event -aR sleep 1
----
--- tools/perf/builtin-probe.c | 8 +++----- tools/perf/util/probe-event.c | 8 +++++--- 2 files changed, 8 insertions(+), 8 deletions(-)
tools/perf/builtin-probe.c +3 -5
@@ -182,10 +182,8 @@ static int opt_set_target(const struct option *opt, const char *str,if (str) {if (!strcmp (opt->long_name,"exec" )) params.uprobes = true; -#ifdef HAVE_DWARF_SUPPORT else if (!strcmp (opt->long_name,"module" )) params.uprobes = false; -#endif else return ret;
@@ -490,9 +488,6 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) "file", "vmlinux pathname"), OPT_STRING('s', "source", &symbol_conf.source_prefix, "directory", "path to kernel source"), -OPT_CALLBACK ('m' ,"module" ,NULL ,"modname|path" , -"target module name (for online) or path (for offline)" , - opt_set_target), OPT_BOOLEAN('\0', "no-inlines", &probe_conf.no_inlines, "Don't search inlined functions"),#endif
@@ -509,6 +504,9 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) opt_set_filter),OPT_CALLBACK ('x' ,"exec" ,NULL ,"executable|path" ,"target executable name or path" , opt_set_target), +OPT_CALLBACK ('m' ,"module" ,NULL ,"modname|path" , +"target module name (for online) or path (for offline)" , + opt_set_target),OPT_BOOLEAN (0 ,"demangle" , &symbol_conf.demangle,"Enable symbol demangling" ), OPT_BOOLEAN(0, "demangle-kernel", &symbol_conf.demangle_kernel,
tools/perf/util/probe-event.c +5 -3
@@ -2543,7 +2543,8 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev, goto out; } -if (!pev->uprobes && !pp->retprobe) { +/* Note that the symbols in the kmodule are not relocated */ +if (!pev->uprobes && !pp->retprobe && !pev->target) { reloc_sym =kernel_get_ref_reloc_sym ();if (!reloc_sym) {pr_warning ("Relocated base symbol is not found!\n" );
@@ -2580,8 +2581,9 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev, }/* Add one probe point */ tp->address = map->unmap_ip (map, sym->start) + pp->offset; -/* If we found a wrong one, mark it by NULL symbol */ -if (!pev->uprobes && + +/* Check the kprobe (not in module) is within .text */ +if (!pev->uprobes && !pev->target &&kprobe_warn_out_range (sym->name, tp->address)) { tp->symbol =NULL ;/* Skip it */ skipped++;
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 9/10 perf record: Change 'record.samples' type to unsigned long long
In reply to Arnaldo Carvalho de MeloFrom: Yang Shi <[email protected]>
When run "perf record -e", the number of samples showed up is wrong on some 32 bit systems, i.e. powerpc and arm.
For example, run the below commands on 32 bit powerpc:
perf probe -x /lib/libc.so.6 malloc
perf record -e probe_libc:malloc -a ls perf.data
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.036 MB perf.data (13829241621624967218 samples) ]
Actually, "perf script" just shows 21 samples. The number of samples is also absurd since samples is long type, but it is printed as PRIu64.
Build test ran on x86-64, x86, aarch64, arm, mips, ppc and ppc64.
--- tools/perf/builtin-record.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/builtin-record.c +2 -2
@@ -49,7 +49,7 @@ struct record {int realtime_prio;bool no_buildid;bool no_buildid_cache; -long samples; +unsigned long long samples; };static int record__write (struct record *rec,void *bf,size_t size)
@@ -667,7 +667,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) auxtrace_snapshot_enabled =1 ;for (;;) { -int hits = rec->samples; +unsigned long long hits = rec->samples;if (record__mmap_read_all (rec) <0 ) { auxtrace_snapshot_enabled =0 ;
Signature · 1 line
2.1.0
Arnaldo Carvalho de Melo
maintainerPATCH 10/10 perf stat: Reduce min --interval-print to 10ms
In reply to Arnaldo Carvalho de MeloFrom: Kan Liang <[email protected]>
The --interval-print parameter was limited to 100ms. However, for example, 10ms is required to do sophisticated bandwidth analysis using uncore events.
The test shows that the overhead of the system-wide uncore monitoring with 10ms interval is only ~2%. So this patch reduces the minimal interval-print allowd to 10ms.
But 10ms may not work well for all cases. For example, when the cpus/threads number is very large, for system-wide core event monitoring the overhead could be high.
To handle this issue, a warning will be displayed when the interval-print is set between 10ms to 100ms. So users can make a decision according to their specific cases.
# perf stat -e uncore_imc_1/cas_count_read/ -a --interval-print 10 -- sleep 1
print interval < 100ms. The overhead percentage could be high in some cases. Please proceed with caution.
# time counts unit events
0.010200451 0.10 MiB uncore_imc_1/cas_count_read/
0.020475117 0.02 MiB uncore_imc_1/cas_count_read/
0.030692800 0.01 MiB uncore_imc_1/cas_count_read/
0.040948161 0.02 MiB uncore_imc_1/cas_count_read/
0.051159564 0.00 MiB uncore_imc_1/cas_count_read/--- tools/perf/Documentation/perf-stat.txt | 5 +++-- tools/perf/builtin-stat.c | 13 +++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-)
tools/perf/Documentation/perf-stat.txt +3 -2
@@ -128,8 +128,9 @@ perf stat --repeat 10 --null --sync --pre 'make -s O=defconfig-build/clean' -- m -I msecs:: --interval-print msecs:: - Print count deltas every N milliseconds (minimum: 100ms) - example: perf stat -I 1000 -e cycles -a sleep 5 +Print count deltas every N milliseconds (minimum: 10ms) +The overhead percentage could be high in some cases, for instance with small, sub 100ms intervals. Use with caution. + example: 'perf stat -I 1000 -e cycles -a sleep 5' --per-socket:: Aggregate counts per processor socket for system-wide mode measurements. This
tools/perf/builtin-stat.c +9 -4
@@ -1179,7 +1179,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused)OPT_STRING (0 ,"post" , &post_cmd,"command" ,"command to run after to the measured command" ),OPT_UINTEGER ('I' ,"interval-print" , &stat_config.interval, -"print counts at regular interval in ms (>= 100)" ), +"print counts at regular interval in ms (>= 10)" ),OPT_SET_UINT (0 ,"per-socket" , &stat_config.aggr_mode,"aggregate counts per processor socket" ,AGGR_SOCKET ), OPT_SET_UINT(0, "per-core", &stat_config.aggr_mode,
@@ -1332,9 +1332,14 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused)thread_map__read_comms (evsel_list->threads);if (interval && interval <100 ) { -pr_err ("print interval must be >= 100ms\n" ); -parse_options_usage (stat_usage, options,"I" ,1 ); - goto out; +if (interval <10 ) { +pr_err ("print interval must be >= 10ms\n" ); +parse_options_usage (stat_usage, options,"I" ,1 ); + goto out; + }else +pr_warning ("print interval < 100ms. " +"The overhead percentage could be high in some cases. " +"Please proceed with caution.\n" ); }if (perf_evlist__alloc_stats (evsel_list, interval))
Signature · 1 line
2.1.0
Quoted 108 lines · Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit
c2365b9388e8ec19305e3f449c1826e7493d156d:perf/x86/intel/uncore: Do not use macro
DEFINE_PCI_DEVICE_TABLE()(2015-10-01 10:53:03 +0200)are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingofor you to fetch changes up to
19afd10410957b1c808c2c49a88e6dd8b23aa894:perf stat: Reduce min --interval-print to 10ms (2015-10-02 17:07:55 -0300)----------------------------------------------------------------
perf/core improvements and fixes:User visible:
- Do event name substring search as last resort in 'perf list'. (Arnaldo Carvalho de Melo)
E.g.:
# perf list clockList of pre-defined events (to be used in -e):
cpu-clock [Software event]
task-clock [Software event]uncore_cbox_0/clockticks/ [Kernel PMU event]
uncore_cbox_1/clockticks/ [Kernel PMU event]kvm:kvm_pvclock_update [Tracepoint event]
kvm:kvm_update_master_clock [Tracepoint event]
power:clock_disable [Tracepoint event]
power:clock_enable [Tracepoint event]
power:clock_set_rate [Tracepoint event]
syscalls:sys_enter_clock_adjtime [Tracepoint event]
syscalls:sys_enter_clock_getres [Tracepoint event]
syscalls:sys_enter_clock_gettime [Tracepoint event]
syscalls:sys_enter_clock_nanosleep [Tracepoint event]
syscalls:sys_enter_clock_settime [Tracepoint event]
syscalls:sys_exit_clock_adjtime [Tracepoint event]
syscalls:sys_exit_clock_getres [Tracepoint event]
syscalls:sys_exit_clock_gettime [Tracepoint event]
syscalls:sys_exit_clock_nanosleep [Tracepoint event]
syscalls:sys_exit_clock_settime [Tracepoint event]- Reduce min 'perf stat --interval-print/-I' to 10ms (Kan Liang)
perf stat --interval in action:
# perf stat -e cycles -I 50 -a usleep $((200 * 1000)) print interval < 100ms. The overhead percentage could be high in some cases. Please proceed with caution. # time counts unit events 0.050233636 48,240,396 cycles 0.100557098 35,492,594 cycles 0.150804687 39,295,112 cycles 0.201032269 33,101,961 cycles 0.201980732 786,379 cycles #- Allow for
max_stackgreater thanPERF_MAX_STACK_DEPTH, as when synthesizing callchains from Intel PT data (Adrian Hunter)- Allow probing on kmodules without DWARF (Masami Hiramatsu)
- Fix a segfault when processing a perf.data file with callchains using "perf report --call-graph none" (Namhyung Kim)
- Fix unresolved COMMs in 'perf top' when -s comm is used (Namhyung Kim)
- Register idle thread in 'perf top' (Namhyung Kim)
- Change 'record.samples' type to unsigned long long, fixing output of number of samples in 32-bit architectures (Yang Shi)
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Adrian Hunter (1):
perf callchain: Allow formax_stackgreater thanPERF_MAX_STACK_DEPTHArnaldo Carvalho de Melo (2):
perf list: Do event name substring search as last resort when no events found perf list: Honour 'event_glob' whem printing selectable PMUsKan Liang (1):
perf stat: Reduce min --interval-print to 10msMasami Hiramatsu (1):
perf probe: Allow probing on kmodules without dwarfNamhyung Kim (4):
perf record: Allocate area forsample_id_hdrin a synthesized comm event perf top: Fix unresolved comm when -s comm is used
perf top: Register idle thread
perf report: Fix a bug on "--call-graph none" optionYang Shi (1):
perf record: Change 'record.samples' type to unsigned long long
Quoted 14 lines
tools/perf/Documentation/perf-list.txt | 2 ++ tools/perf/Documentation/perf-stat.txt | 5 +++-- tools/perf/builtin-list.c | 18 ++++++++++++++++-- tools/perf/builtin-probe.c | 8 +++----- tools/perf/builtin-record.c | 16 ++++++++++++---- tools/perf/builtin-stat.c | 13 +++++++++---- tools/perf/builtin-top.c | 10 ++++++++-- tools/perf/util/hist.c | 2 +- tools/perf/util/machine.c | 2 +- tools/perf/util/pmu.c | 3 ++- tools/perf/util/probe-event.c | 8 +++++--- tools/perf/util/session.c | 2 +- tools/perf/util/session.h | 2 ++ 13 files changed, 65 insertions(+), 26 deletions(-)
Pulled, thanks a lot Arnaldo!
Btw., incidentally I noticed an UI detail: in the 'perf report' and 'perf top' TUI, PageUp does not move the cursor to the topmost line, it stays at whatever partial page position it is.
I think it would be better to behave here like good editors do: PageUp in the first partial page moves to the first line (like 'Home') - and PageDown on the last page of output moves to the last line (like 'End').
Btw., even popular TUI editors get this wrong sometimes:
- 'nano' (joe clone, popular mail editor) gets this right in both directions.
- 'vim' behaves this way on PageDown, but not on PageUp. Nor does it recognize Home/End, only Ctrl-Home/End works.
- 'emacs (e3 package) gets the PageUp/PageDown behavior right, but no Home/End key combo works (and exiting the editor is painful as well ;-)
Thanks,
Ingo