summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pmcstat
diff options
context:
space:
mode:
authorfabient <fabient@FreeBSD.org>2010-09-03 13:54:02 +0000
committerfabient <fabient@FreeBSD.org>2010-09-03 13:54:02 +0000
commit757a8d026a387961065e755dace6ecc97f0b12c3 (patch)
tree73bfd0bd3805598ab724fffe235798ea9c7bad8d /usr.sbin/pmcstat
parent9cb74fce5a363515c8f4250b344250d6f4d3c688 (diff)
downloadFreeBSD-src-757a8d026a387961065e755dace6ecc97f0b12c3.zip
FreeBSD-src-757a8d026a387961065e755dace6ecc97f0b12c3.tar.gz
When an asm location cannot be resolved to a function the cost
will be spread as small value and then filtered by the threshold. As a first step solution display the number of event that cannot be resolved as a valid function location. MFC after: 1week
Diffstat (limited to 'usr.sbin/pmcstat')
-rw-r--r--usr.sbin/pmcstat/pmcpl_callgraph.c2
-rw-r--r--usr.sbin/pmcstat/pmcpl_calltree.c2
-rw-r--r--usr.sbin/pmcstat/pmcstat_log.c1
-rw-r--r--usr.sbin/pmcstat/pmcstat_log.h1
4 files changed, 6 insertions, 0 deletions
diff --git a/usr.sbin/pmcstat/pmcpl_callgraph.c b/usr.sbin/pmcstat/pmcpl_callgraph.c
index d948b77..33998b5 100644
--- a/usr.sbin/pmcstat/pmcpl_callgraph.c
+++ b/usr.sbin/pmcstat/pmcpl_callgraph.c
@@ -149,6 +149,8 @@ pmcstat_cgnode_hash_lookup_pc(struct pmcstat_process *pp, pmc_id_t pmcid,
*/
if ((sym = pmcstat_symbol_search(image, pc)) != NULL)
pc = sym->ps_start;
+ else
+ pmcstat_stats.ps_samples_unknown_function++;
for (hash = i = 0; i < sizeof(uintfptr_t); i++)
hash += (pc >> i) & 0xFF;
diff --git a/usr.sbin/pmcstat/pmcpl_calltree.c b/usr.sbin/pmcstat/pmcpl_calltree.c
index 7ecc56f..c647a32 100644
--- a/usr.sbin/pmcstat/pmcpl_calltree.c
+++ b/usr.sbin/pmcstat/pmcpl_calltree.c
@@ -615,6 +615,8 @@ pmcpl_ct_node_hash_lookup_pc(struct pmcpl_ct_node *parent,
*/
if ((sym = pmcstat_symbol_search(image, pc)) != NULL)
pc = sym->ps_start;
+ else
+ pmcstat_stats.ps_samples_unknown_function++;
for (hash = i = 0; i < (int)sizeof(uintfptr_t); i++)
hash += (pc >> i) & 0xFF;
diff --git a/usr.sbin/pmcstat/pmcstat_log.c b/usr.sbin/pmcstat/pmcstat_log.c
index d9e6059..bebe945 100644
--- a/usr.sbin/pmcstat/pmcstat_log.c
+++ b/usr.sbin/pmcstat/pmcstat_log.c
@@ -2168,6 +2168,7 @@ pmcstat_shutdown_logging(void)
PRINT("#samples/total", samples_total);
PRINT("#samples/unclaimed", samples_unknown_offset);
PRINT("#samples/unknown-object", samples_indeterminable);
+ PRINT("#samples/unknown-function", samples_unknown_function);
PRINT("#callchain/dubious-frames", callchain_dubious_frames);
}
diff --git a/usr.sbin/pmcstat/pmcstat_log.h b/usr.sbin/pmcstat/pmcstat_log.h
index 8936fad..bfa925c 100644
--- a/usr.sbin/pmcstat/pmcstat_log.h
+++ b/usr.sbin/pmcstat/pmcstat_log.h
@@ -164,6 +164,7 @@ struct pmcstat_stats {
int ps_samples_skipped; /* #samples filtered out for any reason */
int ps_samples_unknown_offset; /* #samples of rank 0 not in a map */
int ps_samples_indeterminable; /* #samples in indeterminable images */
+ int ps_samples_unknown_function;/* #samples with unknown function at offset */
int ps_callchain_dubious_frames;/* #dubious frame pointers seen */
};
extern struct pmcstat_stats pmcstat_stats; /* statistics */
OpenPOWER on IntegriCloud