LTTng logger (CTF)
This commit introduces LTTng logging mechanism which is an open source tracing tool. URL: https://lttng.org/
This commit is contained in:
committed by
Robert Schmidt
parent
8abf975faf
commit
582e8302c6
@@ -15,5 +15,6 @@ By default, this facility is included at build-time and activated at run-time. T
|
||||
* [runtime usage](rtusage.md)
|
||||
* [developer usage](devusage.md)
|
||||
* [module architecture](arch.md)
|
||||
* [lttng usage](lttng_logs.md)
|
||||
|
||||
[oai Wikis home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
# OAI gNB LTTng Tracing Setup Guide
|
||||
|
||||
## Overview
|
||||
|
||||
This guide will walk you through setting up tracing for an OpenAirInterface (OAI) gNB (gNodeB) using LTTng (Linux Trace Toolkit Next Generation) and Babeltrace.
|
||||
### What is LTTng and Why Use It?
|
||||
|
||||
LTTng, or Linux Trace Toolkit Next Generation, is a powerful logging framework designed for Linux systems. It provides low-overhead tracing capabilities, allowing developers to monitor and analyze system behavior in real-time without significant performance impact. LTTng offers several advantages:
|
||||
|
||||
- **Low Overhead**: LTTng introduces minimal overhead to the system, making it suitable for use in production environments without affecting system performance.
|
||||
|
||||
- **Customizable**: LTTng allows users to define custom tracepoints in their applications, providing fine-grained control over what events to trace and collect.
|
||||
|
||||
- **Scalability**: It can scale to large distributed systems, making it suitable for tracing complex software stacks across multiple nodes.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Ubuntu system
|
||||
|
||||
Note: only LTTng 2.3.8 is supported.
|
||||
|
||||
## Building OAI gNB
|
||||
|
||||
1. **Clean and Build OAI gNB with LTTng:**
|
||||
|
||||
1.1 Install Dependencies
|
||||
|
||||
```bash
|
||||
./build_oai --ninja -I --clean --enable-LTTNG
|
||||
|
||||
```
|
||||
1.2 Build gNB and nrUE
|
||||
```
|
||||
./build_oai --ninja --gNB --nrUE -w SIMU --enable-LTTNG
|
||||
```
|
||||
## Setting up LTTng
|
||||
|
||||
1. **Start LTTng Session and Relay:**
|
||||
|
||||
```bash
|
||||
sudo lttng-sessiond -d
|
||||
sudo lttng-relayd -d
|
||||
```
|
||||
|
||||
2. **Create Live LTTng Session:**
|
||||
|
||||
```bash
|
||||
sudo lttng create my-session --live --set-url=net://127.0.0.1
|
||||
```
|
||||
|
||||
3. **Enable gNB Trace Events:**
|
||||
|
||||
```bash
|
||||
sudo lttng enable-event --userspace OAI:gNB
|
||||
```
|
||||
|
||||
4. **Start LTTng Tracing:**
|
||||
|
||||
```bash
|
||||
sudo lttng start
|
||||
```
|
||||
|
||||
## Running the gNB
|
||||
|
||||
1. **Run gNB:**
|
||||
|
||||
```bash
|
||||
./$binary_path -O $configuration_file PARALLEL_SINGLE_THREAD --rfsimulator.serveraddr server --rfsim --sa -E
|
||||
```
|
||||
|
||||
## Verifying Tracepoints
|
||||
|
||||
1. **List Active Tracepoints:**
|
||||
|
||||
```bash
|
||||
sudo lttng list -u
|
||||
```
|
||||
|
||||
*Possible Output:*
|
||||
|
||||
```
|
||||
UST events:
|
||||
-------------
|
||||
|
||||
PID: 1154722 - Name: /home/firecell/Desktop/FirecellRepos/firecellrd-oai5g-ran/cmake_targets/ran_build/build/nr-softmodem
|
||||
OAI:gNB (loglevel: TRACE_DEBUG_FUNCTION (12)) (type: tracepoint)
|
||||
```
|
||||
|
||||
## Analyzing Traces
|
||||
|
||||
1. **Install Babeltrace:**
|
||||
|
||||
```bash
|
||||
sudo apt-get install babeltrace
|
||||
```
|
||||
|
||||
|
||||
2. **Capture Trace Logs Live:**
|
||||
|
||||
- To learn the full path of the trace session:
|
||||
|
||||
```bash
|
||||
babeltrace --input-format=lttng-live net://localhost
|
||||
```
|
||||
|
||||
- Trace logs using the full path:
|
||||
|
||||
```bash
|
||||
babeltrace --input-format=lttng-live net://localhost/host/firecell-XPS-15-9530/my-session
|
||||
```
|
||||
|
||||
*Possible Output:*
|
||||
|
||||
```
|
||||
[19:35:32.181608002] (+2.664882127) firecell-XPS-15-9530 OAI:gNB: { cpu_id = 10 }, { MODNAME = "OAI-NR_MAC info", EVENTID = -1, SFN = -1, SLOT = -1, FUNCTION = "gNB_dlsch_ulsch_scheduler", LINE = 246, MSG = "Frame.Slot 0.0\n" }
|
||||
```
|
||||
3. **Capture Trace Logs Offline:**
|
||||
|
||||
- Create an offline trace session with a specified output directory:
|
||||
|
||||
```bash
|
||||
sudo lttng create offline_session --output=/home/trace_offline/
|
||||
```
|
||||
|
||||
- Enable gNB trace events:
|
||||
|
||||
```bash
|
||||
sudo lttng enable-event --userspace OAI:gNB
|
||||
```
|
||||
|
||||
- Start capturing trace logs:
|
||||
|
||||
```bash
|
||||
sudo lttng start
|
||||
```
|
||||
|
||||
- Stop the trace capture:
|
||||
|
||||
```bash
|
||||
sudo lttng stop
|
||||
```
|
||||
|
||||
- Destroy the trace session:
|
||||
|
||||
```bash
|
||||
sudo lttng destroy
|
||||
```
|
||||
|
||||
- Use Babeltrace to analyze the captured trace logs:
|
||||
|
||||
```bash
|
||||
sudo babeltrace /home/trace_offline/
|
||||
```
|
||||
@@ -603,6 +603,25 @@ void logRecord_mt(const char *file,
|
||||
log_output_memory(c, file,func,line,comp,level,format,args);
|
||||
va_end(args);
|
||||
}
|
||||
#if ENABLE_LTTNG
|
||||
void logRecord_lttng(const char *file, const char *func, int line, int comp, int level, const char *format, ...)
|
||||
{
|
||||
log_component_t *c = &g_log->log_component[comp];
|
||||
char header[48];
|
||||
char buf[MAX_LOG_TOTAL];
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
vsnprintf(buf, sizeof(buf) - 1, format, args);
|
||||
va_end(args);
|
||||
|
||||
if (map_int_to_str(log_level_names, level) != NULL)
|
||||
snprintf(header, sizeof(header), "OAI-%s %s", c->name, map_int_to_str(log_level_names, level));
|
||||
else
|
||||
snprintf(header, sizeof(header), "OAI-%s", c->name);
|
||||
|
||||
LOG_FC(header, func, line, buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
void vlogRecord_mt(const char *file,
|
||||
const char *func,
|
||||
|
||||
+52
-3
@@ -52,6 +52,9 @@
|
||||
#endif
|
||||
#include <pthread.h>
|
||||
#include <common/utils/utils.h>
|
||||
#if ENABLE_LTTNG
|
||||
#include "lttng-log.h"
|
||||
#endif
|
||||
/*----------------------------------------------------------------------------*/
|
||||
#include <assert.h>
|
||||
#ifdef NDEBUG
|
||||
@@ -234,6 +237,10 @@ void logTerm (void);
|
||||
int isLogInitDone (void);
|
||||
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
|
||||
void vlogRecord_mt(const char *file, const char *func, int line, int comp, int level, const char *format, va_list args );
|
||||
#if ENABLE_LTTNG
|
||||
void logRecord_lttng(const char *file, const char *func, int line, int comp, int level, const char *format, ...)
|
||||
__attribute__((format(printf, 6, 7)));
|
||||
#endif
|
||||
void log_dump(int component, void *buffer, int buffsize,int datatype, const char *format, ... );
|
||||
int set_log(int component, int level);
|
||||
void set_glog(int level);
|
||||
@@ -425,9 +432,50 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
||||
|
||||
/* define variable only used in LOG macro's */
|
||||
#define LOG_VAR(A, B) A B
|
||||
|
||||
#else /* no T_TRACER */
|
||||
|
||||
#else /* T_TRACER */
|
||||
#if ENABLE_LTTNG
|
||||
#define LOG_E(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_ERR) { \
|
||||
logRecord_lttng(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ERR, x); \
|
||||
} \
|
||||
} while (0)
|
||||
#define LOG_W(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_WARNING) { \
|
||||
logRecord_lttng(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_WARNING, x); \
|
||||
} \
|
||||
} while (0)
|
||||
#define LOG_A(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_ANALYSIS) { \
|
||||
logRecord_lttng(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ANALYSIS, x); \
|
||||
} \
|
||||
} while (0)
|
||||
#define LOG_I(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_INFO) { \
|
||||
logRecord_lttng(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_INFO, x); \
|
||||
} \
|
||||
} while (0)
|
||||
#define LOG_D(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_DEBUG) { \
|
||||
logRecord_lttng(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_DEBUG, x); \
|
||||
} \
|
||||
} while (0)
|
||||
#define LOG_T(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_TRACE) { \
|
||||
logRecord_lttng(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \
|
||||
} \
|
||||
} while (0)
|
||||
#define LOG_DDUMP(c, b, s, f, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
|
||||
log_dump(c, b, s, f, x); \
|
||||
} while (0)
|
||||
#else
|
||||
#define LOG_E(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_ERR) \
|
||||
@@ -469,6 +517,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
||||
if (g_log->log_component[c].level >= OAILOG_TRACE) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define VLOG(c, l, f, args) \
|
||||
do { \
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file lttng-log.h
|
||||
* \brief LTTng Log interface
|
||||
* \author Anurag Asokan
|
||||
* \date 2024
|
||||
* \version 0.5
|
||||
* @ingroup util
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __LTTNG_LOG_H__
|
||||
#define __LTTNG_LOG_H__
|
||||
#if ENABLE_LTTNG
|
||||
#include "lttng-tp.h"
|
||||
|
||||
#define LOG_FC(component, func, line, log) \
|
||||
do { \
|
||||
tracepoint(OAI, gNB, component, -1, -1, -1, func, line, log); \
|
||||
} while (0)
|
||||
#else
|
||||
#define LOG_FC(component, func, line, log)
|
||||
#endif
|
||||
|
||||
#endif /** __LTTNG_LOG_H__ */
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file lttng-tp.c
|
||||
* \brief Lttng trace implementaion
|
||||
* \author Anurag Asokan
|
||||
* \date 2024
|
||||
* \version 0.5
|
||||
* @ingroup util
|
||||
|
||||
*/
|
||||
//This file is used to define the tracepoints for the lttng tracing.In order to to do linkage with the lttng-tp.h file, we need to define the tracepoints here.
|
||||
#define TRACEPOINT_CREATE_PROBES
|
||||
#define TRACEPOINT_DEFINE
|
||||
|
||||
#include "lttng-tp.h"
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file lttng-tp.h
|
||||
* \brief Lttng tracer implementaion
|
||||
* \author Anurag Asokan
|
||||
* \date 2024
|
||||
* \version 0.5
|
||||
* @ingroup util
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _LTTNG_TP_H
|
||||
#define _LTTNG_TP_H
|
||||
|
||||
#undef TRACEPOINT_PROVIDER
|
||||
#define TRACEPOINT_PROVIDER OAI
|
||||
|
||||
#undef TRACEPOINT_INCLUDE
|
||||
#define TRACEPOINT_INCLUDE "./common/utils/LOG/lttng-tp.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <lttng/tracepoint.h>
|
||||
|
||||
TRACEPOINT_EVENT(
|
||||
OAI,
|
||||
gNB,
|
||||
TP_ARGS(const char*, log_modName, int, event_id, int, sfn, int, slot, const char*, funcName, int, lineNo, const char*, msg),
|
||||
TP_FIELDS(ctf_string(MODNAME, log_modName) ctf_integer(int32_t, EVENTID, event_id) ctf_integer(int32_t, SFN, sfn)
|
||||
ctf_integer(int32_t, SLOT, slot) ctf_string(FUNCTION, funcName) ctf_integer(int32_t, LINE, lineNo)
|
||||
ctf_string(MSG, msg)))
|
||||
TRACEPOINT_LOGLEVEL(OAI, gNB, TRACE_DEBUG_FUNCTION)
|
||||
|
||||
#endif /* _LTTNG_TP_H */
|
||||
|
||||
#include <lttng/tracepoint-event.h>
|
||||
Reference in New Issue
Block a user