initial support for static userspace probes via systemtap
This adds a --enable-systemtap configure option, which will then add static tracepoints to the generated osmo-bts-* binary. At this point, only two sets of tracepoints are supported, and only in osmo-bts-trx: ul_data_{start,done} and dl_rts_{start,done}. The probes are intended to be used for analyzing the amount of time needed for processing of uplink bursts / generation of downlink bursts. Change-Id: Ibb4962253f1a195dc1a54405bac058ccb2545799
This commit is contained in:
parent
778aaedb95
commit
430954630b
32
configure.ac
32
configure.ac
|
@ -367,6 +367,38 @@ AC_MSG_CHECKING([whether to enable VTY/CTRL tests])
|
|||
AC_MSG_RESULT([$enable_ext_tests])
|
||||
AM_CONDITIONAL(ENABLE_EXT_TESTS, test "x$enable_ext_tests" = "xyes")
|
||||
|
||||
#
|
||||
# SystemTap support
|
||||
#
|
||||
AC_MSG_CHECKING([whether to include systemtap tracing support])
|
||||
AC_ARG_ENABLE([systemtap],
|
||||
[AS_HELP_STRING([--enable-systemtap],
|
||||
[Enable inclusion of systemtap trace support])],
|
||||
[ENABLE_SYSTEMTAP="${enableval}"], [ENABLE_SYSTEMTAP='no'])
|
||||
AM_CONDITIONAL([ENABLE_SYSTEMTAP], [test x$ENABLE_SYSTEMTAP = xyes])
|
||||
AC_MSG_RESULT(${ENABLE_SYSTEMTAP})
|
||||
|
||||
if test "x${ENABLE_SYSTEMTAP}" = xyes; then
|
||||
# Additional configuration for --enable-systemtap is HERE
|
||||
AC_CHECK_PROGS(DTRACE, dtrace)
|
||||
if test -z "$DTRACE"; then
|
||||
AC_MSG_ERROR([dtrace not found])
|
||||
fi
|
||||
AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='yes'],
|
||||
[SDT_H_FOUND='no';
|
||||
AC_MSG_ERROR([systemtap support needs sys/sdt.h header])])
|
||||
AC_DEFINE([HAVE_SYSTEMTAP], [1], [Define to 1 if using SystemTap probes.])
|
||||
AC_ARG_WITH([tapset-install-dir],
|
||||
[AS_HELP_STRING([--with-tapset-install-dir],
|
||||
[The absolute path where the tapset dir will be installed])],
|
||||
[if test "x${withval}" = x; then
|
||||
ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"
|
||||
else
|
||||
ABS_TAPSET_DIR="${withval}"
|
||||
fi], [ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"])
|
||||
AC_SUBST(ABS_TAPSET_DIR)
|
||||
fi
|
||||
|
||||
# https://www.freedesktop.org/software/systemd/man/daemon.html
|
||||
AC_ARG_WITH([systemdsystemunitdir],
|
||||
[AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include
|
||||
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)/include
|
||||
AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(LIBOSMOCODEC_CFLAGS)
|
||||
LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOTRAU_LIBS) $(LIBOSMOCODEC_LIBS)
|
||||
|
||||
|
@ -44,6 +44,18 @@ libbts_a_SOURCES = \
|
|||
nm_bb_transc_fsm.c \
|
||||
nm_channel_fsm.c \
|
||||
nm_radio_carrier_fsm.c \
|
||||
probes.d \
|
||||
$(NULL)
|
||||
|
||||
libl1sched_a_SOURCES = scheduler.c
|
||||
|
||||
if ENABLE_SYSTEMTAP
|
||||
probes.h: probes.d
|
||||
$(DTRACE) -C -h -s $< -o $@
|
||||
|
||||
probes.lo: probes.d
|
||||
$(LIBTOOL) --mode=compile $(AM_V_lt) --tag=CC env CFLAGS="$(CFLAGS)" $(DTRACE) -C -G -s $< -o $@
|
||||
|
||||
BUILT_SOURCES = probes.h probes.lo
|
||||
libbts_la_LDADD = probes.lo
|
||||
endif
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
provider osmo_bts {
|
||||
};
|
|
@ -1,6 +1,7 @@
|
|||
AM_CPPFLAGS = \
|
||||
$(all_includes) \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_builddir)/include \
|
||||
$(NULL)
|
||||
|
||||
AM_CFLAGS = \
|
||||
|
@ -51,6 +52,7 @@ osmo_bts_trx_SOURCES = \
|
|||
trx_provision_fsm.c \
|
||||
trx_vty.c \
|
||||
loops.c \
|
||||
probes.d \
|
||||
$(NULL)
|
||||
|
||||
osmo_bts_trx_LDADD = \
|
||||
|
@ -58,3 +60,14 @@ osmo_bts_trx_LDADD = \
|
|||
$(top_builddir)/src/common/libbts.a \
|
||||
$(LDADD) \
|
||||
$(NULL)
|
||||
|
||||
if ENABLE_SYSTEMTAP
|
||||
probes.h: probes.d
|
||||
$(DTRACE) -C -h -s $< -o $@
|
||||
|
||||
probes.lo: probes.d
|
||||
$(LIBTOOL) --mode=compile $(AM_V_lt) --tag=CC env CFLAGS="$(CFLAGS)" $(DTRACE) -C -G -s $< -o $@
|
||||
|
||||
BUILT_SOURCES = probes.h probes.lo
|
||||
osmo_bts_trx_LDADD += probes.lo
|
||||
endif
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
provider osmo_bts_trx {
|
||||
probe ul_data_start(int, int, int); /* trx_nr, ts_nr, fn */
|
||||
probe ul_data_done(int, int, int); /* trx_nr, ts_nr, fn */
|
||||
|
||||
probe dl_rts_start(int, int, int); /* trx_nr, ts_nr, fn */
|
||||
probe dl_rts_done(int, int, int); /* trx_nr, ts_nr, fn */
|
||||
};
|
|
@ -50,6 +50,19 @@
|
|||
#include "l1_if.h"
|
||||
#include "trx_if.h"
|
||||
|
||||
#include "btsconfig.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 SCHED_FH_PARAMS_FMT "hsn=%u, maio=%u, ma_len=%u"
|
||||
#define SCHED_FH_PARAMS_VALS(ts) \
|
||||
(ts)->hopping.hsn, (ts)->hopping.maio, (ts)->hopping.arfcn_num
|
||||
|
@ -280,8 +293,10 @@ static void bts_sched_fn(struct gsm_bts *bts, const uint32_t fn)
|
|||
struct trx_dl_burst_req *br;
|
||||
|
||||
/* ready-to-send */
|
||||
TRACE(OSMO_BTS_TRX_DL_RTS_START(trx->nr, tn, fn));
|
||||
_sched_rts(l1ts, GSM_TDMA_FN_SUM(fn, plink->u.osmotrx.clock_advance
|
||||
+ plink->u.osmotrx.rts_advance));
|
||||
TRACE(OSMO_BTS_TRX_DL_RTS_DONE(trx->nr, tn, fn));
|
||||
|
||||
/* pre-initialized buffer for the Downlink burst */
|
||||
br = &pinst->u.osmotrx.br[tn];
|
||||
|
|
|
@ -51,6 +51,19 @@
|
|||
#include "trx_if.h"
|
||||
#include "trx_provision_fsm.h"
|
||||
|
||||
#include "btsconfig.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 */
|
||||
|
||||
/*
|
||||
* socket helper functions
|
||||
*/
|
||||
|
@ -1083,7 +1096,9 @@ static int trx_data_read_cb(struct osmo_fd *ofd, unsigned int what)
|
|||
bi._num_pdus++;
|
||||
|
||||
/* feed received burst into scheduler code */
|
||||
TRACE(OSMO_BTS_TRX_UL_DATA_START(l1h->phy_inst->trx->nr, bi.tn, bi.fn));
|
||||
trx_sched_route_burst_ind(l1h->phy_inst->trx, &bi);
|
||||
TRACE(OSMO_BTS_TRX_UL_DATA_DONE(l1h->phy_inst->trx->nr, bi.tn, bi.fn));
|
||||
} while (bi.flags & TRX_BI_F_BATCH_IND);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue