[PATCH 2/5] log: Add conditional logging based on log_check_level

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Holger Hans Peter Freyther holger at freyther.de
Fri Jan 15 16:01:24 UTC 2016


From: Jacob Erlbeck <jerlbeck at sysmocom.de>

Currently the LOGP/DEBUGP arguments are always evaluated even if
no logging will happen at all. This can be expensive, for instance
if hexdumps or pretty printed object names are generated. This causes
high base load especially on embedded devices and is a major part of
CPU usage e.g. of the osmo-pcu.

This commit uses the log_check_level function to avoid the evaluation
of the parameters if it is known in advance, that no logging entry
will be generated.

Sponsored-by: On-Waves ehf
---
 include/osmocom/core/logging.h | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h
index 290b33d..e51487b 100644
--- a/include/osmocom/core/logging.h
+++ b/include/osmocom/core/logging.h
@@ -19,8 +19,18 @@
 #define DEBUG
 
 #ifdef DEBUG
-#define DEBUGP(ss, fmt, args...) logp(ss, __FILE__, __LINE__, 0, fmt, ## args)
-#define DEBUGPC(ss, fmt, args...) logp(ss, __FILE__, __LINE__, 1, fmt, ## args)
+#define DEBUGP(ss, fmt, args...) \
+	do { \
+		if (log_check_level(ss, LOGL_DEBUG)) \
+			logp(ss, __FILE__, __LINE__, 0, fmt, ## args); \
+	} while(0)
+
+#define DEBUGPC(ss, fmt, args...) \
+	do { \
+		if (log_check_level(ss, LOGL_DEBUG)) \
+			logp(ss, __FILE__, __LINE__, 1, fmt, ## args); \
+	} while(0)
+
 #else
 #define DEBUGP(xss, fmt, args...)
 #define DEBUGPC(ss, fmt, args...)
@@ -39,7 +49,10 @@ void logp(int subsys, const char *file, int line, int cont, const char *format,
  *  \param[in] args variable argument list
  */
 #define LOGP(ss, level, fmt, args...) \
-	logp2(ss, level, __FILE__, __LINE__, 0, fmt, ##args)
+	do { \
+		if (log_check_level(ss, level)) \
+			logp2(ss, level, __FILE__, __LINE__, 0, fmt, ##args); \
+	} while(0)
 
 /*! \brief Continue a log message through the Osmocom logging framework
  *  \param[in] ss logging subsystem (e.g. \ref DLGLOBAL)
@@ -48,7 +61,10 @@ void logp(int subsys, const char *file, int line, int cont, const char *format,
  *  \param[in] args variable argument list
  */
 #define LOGPC(ss, level, fmt, args...) \
-	logp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args)
+	do { \
+		if (log_check_level(ss, level)) \
+			logp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args); \
+	} while(0)
 
 /*! \brief different log levels */
 #define LOGL_DEBUG	1	/*!< \brief debugging information */
-- 
2.6.3




More information about the OpenBSC mailing list