laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/28108 )
Change subject: switch sqlite3 to single-threaded mode ......................................................................
switch sqlite3 to single-threaded mode
Looking at 'perf top' of osmo-msc under load shows that there's a significant amount of time spent in terms of locking (mutex,...) which is useless as osmo-msc is a single-threaded application.
Unfortunately libdbi doesn't provide a mechanism to perform sqlite3_config(), so we have to do it directly here, introducing an explicit build-time dependency (and linkage) to libsqlite3.
Related: OS#5559 Change-Id: I5bbea90d28b6d73b64b9e5124ff59304b90a8a75 --- M configure.ac M contrib/osmo-msc.spec.in M debian/control M src/libmsc/db.c M src/osmo-msc/Makefile.am M tests/db_sms/Makefile.am M tests/msc_vlr/Makefile.am M tests/sms_queue/Makefile.am 8 files changed, 14 insertions(+), 0 deletions(-)
Approvals: Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve laforge: Looks good to me, approved
diff --git a/configure.ac b/configure.ac index 3395ecc..1fd7260 100644 --- a/configure.ac +++ b/configure.ac @@ -36,6 +36,7 @@ fi PKG_PROG_PKG_CONFIG([0.20])
+PKG_CHECK_MODULES(LIBSQLITE3, sqlite3) PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.6.0) PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.6.0) PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.6.0) diff --git a/contrib/osmo-msc.spec.in b/contrib/osmo-msc.spec.in index 17c07b9..912804c 100644 --- a/contrib/osmo-msc.spec.in +++ b/contrib/osmo-msc.spec.in @@ -34,6 +34,7 @@ %endif BuildRequires: pkgconfig >= 0.20 BuildRequires: pkgconfig(dbi) +BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(libcrypto) >= 0.9.5 BuildRequires: pkgconfig(libosmo-gsup-client) >= 1.4.0 BuildRequires: pkgconfig(libosmo-mgcp-client) >= 1.9.0 diff --git a/debian/control b/debian/control index 0b2ac6b..d9fccfa 100644 --- a/debian/control +++ b/debian/control @@ -11,6 +11,7 @@ pkg-config, libdbi-dev, libdbd-sqlite3, + libsqlite3-dev, libsctp-dev, libtalloc-dev, libsmpp34-dev (>= 1.14.0), diff --git a/src/libmsc/db.c b/src/libmsc/db.c index a1683be..d3d37c7 100644 --- a/src/libmsc/db.c +++ b/src/libmsc/db.c @@ -28,6 +28,7 @@ #include <string.h> #include <errno.h> #include <time.h> +#include <sqlite3.h> #include <dbi/dbi.h>
#include <osmocom/msc/gsm_data.h> @@ -637,6 +638,8 @@
int db_init(const char *name) { + sqlite3_config(SQLITE_CONFIG_SINGLETHREAD); + dbi_initialize_r(NULL, &inst);
LOGP(DDB, LOGL_NOTICE, "Init database connection to '%s' using %s\n", diff --git a/src/osmo-msc/Makefile.am b/src/osmo-msc/Makefile.am index 7b56c74..1492918 100644 --- a/src/osmo-msc/Makefile.am +++ b/src/osmo-msc/Makefile.am @@ -19,6 +19,7 @@ $(LIBOSMOSIGTRAN_CFLAGS) \ $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(LIBOSMOGSUPCLIENT_CFLAGS) \ + $(LIBSQLITE3_CFLAGS) \ $(NULL)
AM_LDFLAGS = \ @@ -48,6 +49,7 @@ $(LIBOSMOSIGTRAN_LIBS) \ $(LIBOSMOMGCPCLIENT_LIBS) \ $(LIBOSMOGSUPCLIENT_LIBS) \ + $(LIBSQLITE3_LIBS) \ -ldbi \ -lsctp \ $(NULL) diff --git a/tests/db_sms/Makefile.am b/tests/db_sms/Makefile.am index 52fd35e..52e8cab 100644 --- a/tests/db_sms/Makefile.am +++ b/tests/db_sms/Makefile.am @@ -17,6 +17,7 @@ $(LIBSMPP34_CFLAGS) \ $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(LIBOSMOGSUPCLIENT_CFLAGS) \ + $(LIBSQLITE3_CFLAGS) \ $(NULL)
EXTRA_DIST = \ @@ -46,6 +47,7 @@ $(LIBASN1C_LIBS) \ $(LIBOSMOMGCPCLIENT_LIBS) \ $(LIBOSMOGSUPCLIENT_LIBS) \ + $(LIBSQLITE3_LIBS) \ $(LIBRARY_GSM) \ -ldbi \ $(NULL) diff --git a/tests/msc_vlr/Makefile.am b/tests/msc_vlr/Makefile.am index a84ea3f..b1853a1 100644 --- a/tests/msc_vlr/Makefile.am +++ b/tests/msc_vlr/Makefile.am @@ -17,6 +17,7 @@ $(LIBASN1C_CFLAGS) \ $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(LIBOSMOGSUPCLIENT_CFLAGS) \ + $(LIBSQLITE3_CFLAGS) \ $(NULL)
AM_LDFLAGS = \ @@ -41,6 +42,7 @@ $(LIBASN1C_LIBS) \ $(LIBOSMOMGCPCLIENT_LIBS) \ $(LIBOSMOGSUPCLIENT_LIBS) \ + $(LIBSQLITE3_LIBS) \ $(LIBRARY_GSM) \ -ldbi \ $(NULL) diff --git a/tests/sms_queue/Makefile.am b/tests/sms_queue/Makefile.am index a739101..0375497 100644 --- a/tests/sms_queue/Makefile.am +++ b/tests/sms_queue/Makefile.am @@ -15,6 +15,7 @@ $(LIBASN1C_CFLAGS) \ $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(LIBOSMOGSUPCLIENT_CFLAGS) \ + $(LIBSQLITE3_CFLAGS) \ $(NULL)
EXTRA_DIST = \ @@ -43,6 +44,7 @@ $(LIBASN1C_LIBS) \ $(LIBOSMOMGCPCLIENT_LIBS) \ $(LIBOSMOGSUPCLIENT_LIBS) \ + $(LIBSQLITE3_LIBS) \ $(LIBRARY_GSM) \ -ldbi \ $(NULL)