From 3217d5187f222592799897baa5422fc8ef491a70 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 18 Feb 2021 14:56:46 +0100 Subject: [PATCH] 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 --- src/probes.d | 2 ++ src/stats.c | 13 +++++++++++++ tapset/libosmocore.stp | 11 +++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/probes.d b/src/probes.d index c16eb1ee9..e4150f0cf 100644 --- a/src/probes.d +++ b/src/probes.d @@ -1,4 +1,6 @@ provider libosmocore { probe log_start(); probe log_done(); + probe stats_start(); + probe stats_done(); }; diff --git a/src/stats.c b/src/stats.c index c91a97800..a0834d293 100644 --- a/src/stats.c +++ b/src/stats.c @@ -90,6 +90,17 @@ #include #include +#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; } diff --git a/tapset/libosmocore.stp b/tapset/libosmocore.stp index 0ec3c423c..a3e8f211b 100644 --- a/tapset/libosmocore.stp +++ b/tapset/libosmocore.stp @@ -16,3 +16,14 @@ probe libosmocore_log_done = process("libosmocore").mark("log_done") { probestr = sprintf("%s", $$name); } + +probe libosmocore_stats_start = process("libosmocore").mark("statsd_start") +{ + count = $arg1; + probestr = sprintf("%s(count=%d), $$name, count); +} + +probe libosmocore_stats_done = process("libosmocore").mark("statsd_done") +{ + probestr = sprintf("%s", $$name); +}