perf_counter tools: kerneltop: display per function percentage along with event count
------------------------------------------------------------------------------ KernelTop: 90551 irqs/sec kernel:15.0% [NMI, 100000 CPU cycles], (all, 4 CPUs) ------------------------------------------------------------------------------ events pcnt RIP kernel function ______ ______ _____ ________________ _______________ 16871.00 - 19.1% - ffffffff80328e20 : clear_page_c 8810.00 - 9.9% - ffffffff8048ce80 : page_fault 4746.00 - 5.4% - ffffffff8048cae2 : _spin_lock 4428.00 - 5.0% - ffffffff80328e70 : copy_page_c 3340.00 - 3.8% - ffffffff80329090 : copy_user_generic_string! 2679.00 - 3.0% - ffffffff8028a16b : get_page_from_freelist 2254.00 - 2.5% - ffffffff80296f19 : unmap_vmas 2082.00 - 2.4% - ffffffff80297e19 : handle_mm_fault 1754.00 - 2.0% - ffffffff80288dc8 : __rmqueue_smallest 1553.00 - 1.8% - ffffffff8048ca58 : _spin_lock_irqsave 1400.00 - 1.6% - ffffffff8028cdc8 : release_pages 1337.00 - 1.5% - ffffffff80285400 : find_get_page 1335.00 - 1.5% - ffffffff80225a23 : do_page_fault 1299.00 - 1.5% - ffffffff802ba8e7 : __d_lookup 1174.00 - 1.3% - ffffffff802b38f3 : __link_path_walk 1155.00 - 1.3% - ffffffff802843e1 : perf_swcounter_ctx_event! 1137.00 - 1.3% - ffffffff8028d118 : ____pagevec_lru_add 963.00 - 1.1% - ffffffff802a670b : kmem_cache_alloc 885.00 - 1.0% - ffffffff8024bc61 : __wake_up_bit Display per function percentage along with event count. Signed-off-by: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
bce379bf35
commit
6278af660f
|
@ -636,16 +636,20 @@ static void print_sym_table(void)
|
|||
int counter;
|
||||
float events_per_sec = events/delay_secs;
|
||||
float kevents_per_sec = (events-userspace_events)/delay_secs;
|
||||
float sum_kevents = 0.0;
|
||||
|
||||
events = userspace_events = 0;
|
||||
memcpy(tmp, sym_table, sizeof(sym_table[0])*sym_table_count);
|
||||
qsort(tmp, sym_table_count, sizeof(tmp[0]), compare);
|
||||
|
||||
for (i = 0; i < sym_table_count && tmp[i].count[0]; i++)
|
||||
sum_kevents += tmp[i].count[0];
|
||||
|
||||
write(1, CONSOLE_CLEAR, strlen(CONSOLE_CLEAR));
|
||||
|
||||
printf(
|
||||
"------------------------------------------------------------------------------\n");
|
||||
printf( " KernelTop:%8.0f irqs/sec kernel:%3.1f%% [%s, ",
|
||||
printf( " KernelTop:%8.0f irqs/sec kernel:%4.1f%% [%s, ",
|
||||
events_per_sec,
|
||||
100.0 - (100.0*((events_per_sec-kevents_per_sec)/events_per_sec)),
|
||||
nmi ? "NMI" : "IRQ");
|
||||
|
@ -679,34 +683,31 @@ static void print_sym_table(void)
|
|||
printf("------------------------------------------------------------------------------\n\n");
|
||||
|
||||
if (nr_counters == 1)
|
||||
printf(" events");
|
||||
printf(" events pcnt");
|
||||
else
|
||||
printf(" weight events");
|
||||
printf(" weight events pcnt");
|
||||
|
||||
printf(" RIP kernel function\n"
|
||||
" ______ ______ ________________ _______________\n\n"
|
||||
" ______ ______ _____ ________________ _______________\n\n"
|
||||
);
|
||||
|
||||
printed = 0;
|
||||
for (i = 0; i < sym_table_count; i++) {
|
||||
for (i = 0, printed = 0; i < sym_table_count; i++) {
|
||||
float pcnt;
|
||||
int count;
|
||||
|
||||
if (nr_counters == 1) {
|
||||
if (printed <= 18 &&
|
||||
tmp[i].count[0] >= count_filter) {
|
||||
printf("%19.2f - %016llx : %s\n",
|
||||
sym_weight(tmp + i), tmp[i].addr, tmp[i].sym);
|
||||
printed++;
|
||||
}
|
||||
} else {
|
||||
if (printed <= 18 &&
|
||||
tmp[i].count[0] >= count_filter) {
|
||||
printf("%8.1f %10ld - %016llx : %s\n",
|
||||
sym_weight(tmp + i),
|
||||
tmp[i].count[0],
|
||||
tmp[i].addr, tmp[i].sym);
|
||||
printed++;
|
||||
}
|
||||
if (printed <= 18 && tmp[i].count[0] >= count_filter) {
|
||||
pcnt = 100.0 - (100.0*((sum_kevents-tmp[i].count[0])/sum_kevents));
|
||||
|
||||
if (nr_counters == 1)
|
||||
printf("%19.2f - %4.1f%% - %016llx : %s\n",
|
||||
sym_weight(tmp + i),
|
||||
pcnt, tmp[i].addr, tmp[i].sym);
|
||||
else
|
||||
printf("%8.1f %10ld - %4.1f%% - %016llx : %s\n",
|
||||
sym_weight(tmp + i),
|
||||
tmp[i].count[0],
|
||||
pcnt, tmp[i].addr, tmp[i].sym);
|
||||
printed++;
|
||||
}
|
||||
/*
|
||||
* Add decay to the counts:
|
||||
|
|
Loading…
Reference in New Issue