diff options
author | Harald Welte <laforge@osmocom.org> | 2021-02-18 14:56:46 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2021-02-22 09:58:00 +0100 |
commit | 3217d5187f222592799897baa5422fc8ef491a70 (patch) | |
tree | 9dfbedd10e7ebfd90a04edbd4e4818fee183a765 /src/stats.c | |
parent | 6e9dd02bf8ca7a02bedc39d8bc1ce7eb9f3240e7 (diff) |
support for stats static userspace probes via systemtap
We currently only have probes for the logging sub-system.
This patch adds two tracepoints for tracing the performance
impact of statistics reporting: stat_start and stat_done.
They can be used to trace the amount of time a libosmocore-using
application spends in reporting/exporting statistics. This includes
both the CPU time for encoding the statistics, as well as the system
calls for sending them.
Change-Id: I7208c45f6d051505dd2435305c67b4d26c0b1dd2
Related: OS#4311
Related: SYS#4877
Diffstat (limited to 'src/stats.c')
-rw-r--r-- | src/stats.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/stats.c b/src/stats.c index c91a9780..a0834d29 100644 --- a/src/stats.c +++ b/src/stats.c @@ -90,6 +90,17 @@ #include <osmocom/core/counter.h> #include <osmocom/core/msgb.h> +#ifdef HAVE_SYSTEMTAP +/* include the generated probes header and put markers in code */ +#include "probes.h" +#define TRACE(probe) probe +#define TRACE_ENABLED(probe) probe ## _ENABLED() +#else +/* Wrap the probe to allow it to be removed when no systemtap available */ +#define TRACE(probe) +#define TRACE_ENABLED(probe) (0) +#endif /* HAVE_SYSTEMTAP */ + #define STATS_DEFAULT_INTERVAL 5 /* secs */ #define STATS_DEFAULT_BUFLEN 256 @@ -781,6 +792,7 @@ static void flush_all_reporters() int osmo_stats_report() { /* per group actions */ + TRACE(LIBOSMOCORE_STATS_START()); osmo_counters_for_each(handle_counter, NULL); rate_ctr_for_each_group(rate_ctr_group_handler, NULL); osmo_stat_item_for_each_group(osmo_stat_item_group_handler, NULL); @@ -788,6 +800,7 @@ int osmo_stats_report() /* global actions */ osmo_stat_item_discard_all(¤t_stat_item_index); flush_all_reporters(); + TRACE(LIBOSMOCORE_STATS_DONE()); return 0; } |