Use lttng built from source as a workaround
This commit is contained in:
parent
182fc771ee
commit
031f30460a
2 changed files with 23 additions and 19 deletions
7
trace.py
7
trace.py
|
@ -12,11 +12,10 @@ def main(argv=sys.argv):
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
session_name = argv[1]
|
session_name = argv[1]
|
||||||
path = argv[2]
|
path = argv[2] + '/' + session_name
|
||||||
# TODO fix kernel tracing
|
lttng_setup(session_name, path)
|
||||||
lttng_setup(session_name, path, kernel_events=None)
|
|
||||||
lttng_start(session_name)
|
lttng_start(session_name)
|
||||||
print('tracing session started')
|
print(f'tracing session started: {path}')
|
||||||
|
|
||||||
# TODO integrate this with launch + ROS shutdown
|
# TODO integrate this with launch + ROS shutdown
|
||||||
input('press enter to stop...')
|
input('press enter to stop...')
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
# LTTng tracing interface
|
# LTTng tracing interface
|
||||||
|
|
||||||
|
# Temporary workaround
|
||||||
|
import sys
|
||||||
|
sys.path = ['/usr/local/lib/python3.6/site-packages'] + sys.path
|
||||||
|
|
||||||
from lttng import *
|
from lttng import *
|
||||||
from .names import DEFAULT_EVENTS_ROS, DEFAULT_EVENTS_KERNEL, DEFAULT_CONTEXT
|
from .names import DEFAULT_EVENTS_ROS, DEFAULT_EVENTS_KERNEL, DEFAULT_CONTEXT
|
||||||
|
|
||||||
def lttng_setup(session_name, path, ros_events=DEFAULT_EVENTS_ROS, kernel_events=DEFAULT_EVENTS_KERNEL, context_names=DEFAULT_CONTEXT):
|
def lttng_setup(session_name, directory, ros_events=DEFAULT_EVENTS_ROS, kernel_events=DEFAULT_EVENTS_KERNEL, context_names=DEFAULT_CONTEXT):
|
||||||
"""
|
"""
|
||||||
Setup LTTng session, with events and context
|
Setup LTTng session, with events and context
|
||||||
:param session_name (str): the name of the session
|
:param session_name (str): the name of the session
|
||||||
:param path (str): the path to write trace data to
|
:param directory (str): the path of the main directory to write trace data to
|
||||||
:param ros_events (list(str)): list of ROS events to enable
|
:param ros_events (list(str)): list of ROS events to enable
|
||||||
:param kernel_events (list(str)): list of kernel events to enable
|
:param kernel_events (list(str)): list of kernel events to enable
|
||||||
:param context_names (list(str)): list of context elements to enable
|
:param context_names (list(str)): list of context elements to enable
|
||||||
|
@ -21,10 +25,11 @@ def lttng_setup(session_name, path, ros_events=DEFAULT_EVENTS_ROS, kernel_events
|
||||||
if ust_enabled:
|
if ust_enabled:
|
||||||
domain_ust = Domain()
|
domain_ust = Domain()
|
||||||
domain_ust.type = DOMAIN_UST
|
domain_ust.type = DOMAIN_UST
|
||||||
|
domain_ust.buf_type = BUFFER_PER_UID
|
||||||
channel_ust = Channel()
|
channel_ust = Channel()
|
||||||
channel_ust.name = 'ros2'
|
channel_ust.name = 'ros2'
|
||||||
channel_ust.attr.overwrite = 0
|
channel_ust.attr.overwrite = 0
|
||||||
channel_ust.attr.subbuf_size = 4096
|
channel_ust.attr.subbuf_size = 2*4096
|
||||||
channel_ust.attr.num_subbuf = 8
|
channel_ust.attr.num_subbuf = 8
|
||||||
channel_ust.attr.switch_timer_interval = 0
|
channel_ust.attr.switch_timer_interval = 0
|
||||||
channel_ust.attr.read_timer_interval = 200
|
channel_ust.attr.read_timer_interval = 200
|
||||||
|
@ -33,19 +38,19 @@ def lttng_setup(session_name, path, ros_events=DEFAULT_EVENTS_ROS, kernel_events
|
||||||
if kernel_enabled:
|
if kernel_enabled:
|
||||||
domain_kernel = Domain()
|
domain_kernel = Domain()
|
||||||
domain_kernel.type = DOMAIN_KERNEL
|
domain_kernel.type = DOMAIN_KERNEL
|
||||||
|
domain_kernel.buf_type = BUFFER_GLOBAL
|
||||||
channel_kernel = Channel()
|
channel_kernel = Channel()
|
||||||
channel_kernel.name = 'kchan'
|
channel_kernel.name = 'kchan'
|
||||||
# TODO fix kernel tracing
|
channel_kernel.attr.overwrite = 0
|
||||||
# channel_kernel.attr.overwrite = 0
|
channel_kernel.attr.subbuf_size = 8*4096
|
||||||
# channel_kernel.attr.subbuf_size = 4096
|
channel_kernel.attr.num_subbuf = 8
|
||||||
# channel_kernel.attr.num_subbuf = 8
|
channel_kernel.attr.switch_timer_interval = 0
|
||||||
# channel_kernel.attr.switch_timer_interval = 0
|
channel_kernel.attr.read_timer_interval = 200
|
||||||
# channel_kernel.attr.read_timer_interval = 200
|
channel_kernel.attr.output = EVENT_MMAP
|
||||||
# channel_kernel.attr.output = EVENT_MMAP
|
|
||||||
events_list_kernel = _create_events(kernel_events)
|
events_list_kernel = _create_events(kernel_events)
|
||||||
|
|
||||||
# Session
|
# Session
|
||||||
_create_session(session_name, path)
|
_create_session(session_name, directory)
|
||||||
|
|
||||||
# Handles, channels, events
|
# Handles, channels, events
|
||||||
handle_ust = None
|
handle_ust = None
|
||||||
|
@ -101,17 +106,17 @@ def _create_events(event_names_list):
|
||||||
events_list.append(e)
|
events_list.append(e)
|
||||||
return events_list
|
return events_list
|
||||||
|
|
||||||
def _create_session(session_name, path):
|
def _create_session(session_name, directory):
|
||||||
"""
|
"""
|
||||||
Create session from name and path, and check for errors
|
Create session from name and directory path, and check for errors
|
||||||
"""
|
"""
|
||||||
result = create(session_name, path)
|
result = create(session_name, directory)
|
||||||
LTTNG_ERR_EXIST_SESS = -28
|
LTTNG_ERR_EXIST_SESS = -28
|
||||||
if result == LTTNG_ERR_EXIST_SESS:
|
if result == LTTNG_ERR_EXIST_SESS:
|
||||||
# Sessions seem to persist, so if it already exists,
|
# Sessions seem to persist, so if it already exists,
|
||||||
# just destroy it and try again
|
# just destroy it and try again
|
||||||
lttng_destroy(session_name)
|
lttng_destroy(session_name)
|
||||||
result = create(session_name, path)
|
result = create(session_name, directory)
|
||||||
if result < 0:
|
if result < 0:
|
||||||
raise RuntimeError(f'session creation failed: {strerror(result)}')
|
raise RuntimeError(f'session creation failed: {strerror(result)}')
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue