<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/22641">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">initial support for static userspace probes via systemtap<br><br>This adds a --enable-systemtap configure option, which will then<br>add static tracepoints to the generated osmo-bts-* binary.<br><br>At this point, only two sets of tracepoints are supported, and<br>only in osmo-bts-trx: ul_data_{start,done} and dl_rts_{start,done}.<br><br>The probes are intended to be used for analyzing the amount of time<br>needed for processing of uplink bursts / generation of downlink bursts.<br><br>Change-Id: Ibb4962253f1a195dc1a54405bac058ccb2545799<br>---<br>M configure.ac<br>M src/common/Makefile.am<br>A src/common/probes.d<br>M src/osmo-bts-trx/Makefile.am<br>A src/osmo-bts-trx/probes.d<br>M src/osmo-bts-trx/scheduler_trx.c<br>M src/osmo-bts-trx/trx_if.c<br>7 files changed, 97 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/configure.ac b/configure.ac</span><br><span>index 4f2e889..91fe244 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -367,6 +367,38 @@</span><br><span> AC_MSG_RESULT([$enable_ext_tests])</span><br><span> AM_CONDITIONAL(ENABLE_EXT_TESTS, test "x$enable_ext_tests" = "xyes")</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# SystemTap support</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+AC_MSG_CHECKING([whether to include systemtap tracing support])</span><br><span style="color: hsl(120, 100%, 40%);">+AC_ARG_ENABLE([systemtap],</span><br><span style="color: hsl(120, 100%, 40%);">+           [AS_HELP_STRING([--enable-systemtap],</span><br><span style="color: hsl(120, 100%, 40%);">+                         [Enable inclusion of systemtap trace support])],</span><br><span style="color: hsl(120, 100%, 40%);">+              [ENABLE_SYSTEMTAP="${enableval}"], [ENABLE_SYSTEMTAP='no'])</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CONDITIONAL([ENABLE_SYSTEMTAP], [test x$ENABLE_SYSTEMTAP = xyes])</span><br><span style="color: hsl(120, 100%, 40%);">+AC_MSG_RESULT(${ENABLE_SYSTEMTAP})</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if test "x${ENABLE_SYSTEMTAP}" = xyes; then</span><br><span style="color: hsl(120, 100%, 40%);">+  # Additional configuration for --enable-systemtap is HERE</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_CHECK_PROGS(DTRACE, dtrace)</span><br><span style="color: hsl(120, 100%, 40%);">+  if test -z "$DTRACE"; then</span><br><span style="color: hsl(120, 100%, 40%);">+    AC_MSG_ERROR([dtrace not found])</span><br><span style="color: hsl(120, 100%, 40%);">+  fi</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='yes'],</span><br><span style="color: hsl(120, 100%, 40%);">+                [SDT_H_FOUND='no';</span><br><span style="color: hsl(120, 100%, 40%);">+                   AC_MSG_ERROR([systemtap support needs sys/sdt.h header])])</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_DEFINE([HAVE_SYSTEMTAP], [1], [Define to 1 if using SystemTap probes.])</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_ARG_WITH([tapset-install-dir],</span><br><span style="color: hsl(120, 100%, 40%);">+        [AS_HELP_STRING([--with-tapset-install-dir],</span><br><span style="color: hsl(120, 100%, 40%);">+             [The absolute path where the tapset dir will be installed])],</span><br><span style="color: hsl(120, 100%, 40%);">+              [if test "x${withval}" = x; then</span><br><span style="color: hsl(120, 100%, 40%);">+               ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"</span><br><span style="color: hsl(120, 100%, 40%);">+             else</span><br><span style="color: hsl(120, 100%, 40%);">+            ABS_TAPSET_DIR="${withval}"</span><br><span style="color: hsl(120, 100%, 40%);">+               fi], [ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"])</span><br><span style="color: hsl(120, 100%, 40%);">+  AC_SUBST(ABS_TAPSET_DIR)</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # https://www.freedesktop.org/software/systemd/man/daemon.html</span><br><span> AC_ARG_WITH([systemdsystemunitdir],</span><br><span>      [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,</span><br><span>diff --git a/src/common/Makefile.am b/src/common/Makefile.am</span><br><span>index 72438c6..5b69b5c 100644</span><br><span>--- a/src/common/Makefile.am</span><br><span>+++ b/src/common/Makefile.am</span><br><span>@@ -1,4 +1,4 @@</span><br><span style="color: hsl(0, 100%, 40%);">-AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)/include</span><br><span> AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(LIBOSMOCODEC_CFLAGS)</span><br><span> LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOTRAU_LIBS) $(LIBOSMOCODEC_LIBS)</span><br><span> </span><br><span>@@ -44,6 +44,18 @@</span><br><span>         nm_bb_transc_fsm.c \</span><br><span>         nm_channel_fsm.c \</span><br><span>   nm_radio_carrier_fsm.c \</span><br><span style="color: hsl(120, 100%, 40%);">+      probes.d \</span><br><span>   $(NULL)</span><br><span> </span><br><span> libl1sched_a_SOURCES = scheduler.c</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if ENABLE_SYSTEMTAP</span><br><span style="color: hsl(120, 100%, 40%);">+probes.h: probes.d</span><br><span style="color: hsl(120, 100%, 40%);">+  $(DTRACE) -C -h -s $< -o $@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+probes.lo: probes.d</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBTOOL) --mode=compile $(AM_V_lt) --tag=CC env CFLAGS="$(CFLAGS)" $(DTRACE) -C -G -s $< -o $@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BUILT_SOURCES = probes.h probes.lo</span><br><span style="color: hsl(120, 100%, 40%);">+libbts_la_LDADD = probes.lo</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span>diff --git a/src/common/probes.d b/src/common/probes.d</span><br><span>new file mode 100644</span><br><span>index 0000000..aaf9030</span><br><span>--- /dev/null</span><br><span>+++ b/src/common/probes.d</span><br><span>@@ -0,0 +1,2 @@</span><br><span style="color: hsl(120, 100%, 40%);">+provider osmo_bts {</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/osmo-bts-trx/Makefile.am b/src/osmo-bts-trx/Makefile.am</span><br><span>index 54d1af9..afa5414 100644</span><br><span>--- a/src/osmo-bts-trx/Makefile.am</span><br><span>+++ b/src/osmo-bts-trx/Makefile.am</span><br><span>@@ -1,6 +1,7 @@</span><br><span> AM_CPPFLAGS = \</span><br><span>    $(all_includes) \</span><br><span>    -I$(top_srcdir)/include \</span><br><span style="color: hsl(120, 100%, 40%);">+     -I$(top_builddir)/include \</span><br><span>  $(NULL)</span><br><span> </span><br><span> AM_CFLAGS = \</span><br><span>@@ -51,6 +52,7 @@</span><br><span>     trx_provision_fsm.c \</span><br><span>        trx_vty.c \</span><br><span>  loops.c \</span><br><span style="color: hsl(120, 100%, 40%);">+     probes.d \</span><br><span>   $(NULL)</span><br><span> </span><br><span> osmo_bts_trx_LDADD = \</span><br><span>@@ -58,3 +60,14 @@</span><br><span>   $(top_builddir)/src/common/libbts.a \</span><br><span>        $(LDADD) \</span><br><span>   $(NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if ENABLE_SYSTEMTAP</span><br><span style="color: hsl(120, 100%, 40%);">+probes.h: probes.d</span><br><span style="color: hsl(120, 100%, 40%);">+    $(DTRACE) -C -h -s $< -o $@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+probes.lo: probes.d</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBTOOL) --mode=compile $(AM_V_lt) --tag=CC env CFLAGS="$(CFLAGS)" $(DTRACE) -C -G -s $< -o $@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BUILT_SOURCES = probes.h probes.lo</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_bts_trx_LDADD += probes.lo</span><br><span style="color: hsl(120, 100%, 40%);">+endif</span><br><span>diff --git a/src/osmo-bts-trx/probes.d b/src/osmo-bts-trx/probes.d</span><br><span>new file mode 100644</span><br><span>index 0000000..2f905bd</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo-bts-trx/probes.d</span><br><span>@@ -0,0 +1,7 @@</span><br><span style="color: hsl(120, 100%, 40%);">+provider osmo_bts_trx {</span><br><span style="color: hsl(120, 100%, 40%);">+ probe ul_data_start(int, int, int); /* trx_nr, ts_nr, fn */</span><br><span style="color: hsl(120, 100%, 40%);">+   probe ul_data_done(int, int, int); /* trx_nr, ts_nr, fn */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  probe dl_rts_start(int, int, int); /* trx_nr, ts_nr, fn */</span><br><span style="color: hsl(120, 100%, 40%);">+    probe dl_rts_done(int, int, int); /* trx_nr, ts_nr, fn */</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>index 6136b14..1159e59 100644</span><br><span>--- a/src/osmo-bts-trx/scheduler_trx.c</span><br><span>+++ b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>@@ -50,6 +50,19 @@</span><br><span> #include "l1_if.h"</span><br><span> #include "trx_if.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include "btsconfig.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef HAVE_SYSTEMTAP</span><br><span style="color: hsl(120, 100%, 40%);">+/* include the generated probes header and put markers in code */</span><br><span style="color: hsl(120, 100%, 40%);">+#include "probes.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE(probe) probe</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE_ENABLED(probe) probe ## _ENABLED()</span><br><span style="color: hsl(120, 100%, 40%);">+#else</span><br><span style="color: hsl(120, 100%, 40%);">+/* Wrap the probe to allow it to be removed when no systemtap available */</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE(probe)</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE_ENABLED(probe) (0)</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* HAVE_SYSTEMTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define SCHED_FH_PARAMS_FMT "hsn=%u, maio=%u, ma_len=%u"</span><br><span> #define SCHED_FH_PARAMS_VALS(ts) \</span><br><span>        (ts)->hopping.hsn, (ts)->hopping.maio, (ts)->hopping.arfcn_num</span><br><span>@@ -280,8 +293,10 @@</span><br><span>                       struct trx_dl_burst_req *br;</span><br><span> </span><br><span>                     /* ready-to-send */</span><br><span style="color: hsl(120, 100%, 40%);">+                   TRACE(OSMO_BTS_TRX_DL_RTS_START(trx->nr, tn, fn));</span><br><span>                        _sched_rts(l1ts, GSM_TDMA_FN_SUM(fn, plink->u.osmotrx.clock_advance</span><br><span>                                                          + plink->u.osmotrx.rts_advance));</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE(OSMO_BTS_TRX_DL_RTS_DONE(trx->nr, tn, fn));</span><br><span> </span><br><span>                     /* pre-initialized buffer for the Downlink burst */</span><br><span>                  br = &pinst->u.osmotrx.br[tn];</span><br><span>diff --git a/src/osmo-bts-trx/trx_if.c b/src/osmo-bts-trx/trx_if.c</span><br><span>index 914d0e1..9232e64 100644</span><br><span>--- a/src/osmo-bts-trx/trx_if.c</span><br><span>+++ b/src/osmo-bts-trx/trx_if.c</span><br><span>@@ -51,6 +51,19 @@</span><br><span> #include "trx_if.h"</span><br><span> #include "trx_provision_fsm.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include "btsconfig.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef HAVE_SYSTEMTAP</span><br><span style="color: hsl(120, 100%, 40%);">+/* include the generated probes header and put markers in code */</span><br><span style="color: hsl(120, 100%, 40%);">+#include "probes.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE(probe) probe</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE_ENABLED(probe) probe ## _ENABLED()</span><br><span style="color: hsl(120, 100%, 40%);">+#else</span><br><span style="color: hsl(120, 100%, 40%);">+/* Wrap the probe to allow it to be removed when no systemtap available */</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE(probe)</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRACE_ENABLED(probe) (0)</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* HAVE_SYSTEMTAP */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*</span><br><span>  * socket helper functions</span><br><span>  */</span><br><span>@@ -1083,7 +1096,9 @@</span><br><span>                 bi._num_pdus++;</span><br><span> </span><br><span>          /* feed received burst into scheduler code */</span><br><span style="color: hsl(120, 100%, 40%);">+         TRACE(OSMO_BTS_TRX_UL_DATA_START(l1h->phy_inst->trx->nr, bi.tn, bi.fn));</span><br><span>            trx_sched_route_burst_ind(l1h->phy_inst->trx, &bi);</span><br><span style="color: hsl(120, 100%, 40%);">+         TRACE(OSMO_BTS_TRX_UL_DATA_DONE(l1h->phy_inst->trx->nr, bi.tn, bi.fn));</span><br><span>     } while (bi.flags & TRX_BI_F_BATCH_IND);</span><br><span> </span><br><span>     return 0;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/22641">change 22641</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bts/+/22641"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ibb4962253f1a195dc1a54405bac058ccb2545799 </div>
<div style="display:none"> Gerrit-Change-Number: 22641 </div>
<div style="display:none"> Gerrit-PatchSet: 9 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>