WIP: backport message flow tracing
This commit is contained in:
parent
c261053186
commit
412d818269
10 changed files with 168 additions and 1 deletions
|
@ -37,6 +37,18 @@ endif()
|
||||||
if(ENABLE_DEADLINE_MISSED)
|
if(ENABLE_DEADLINE_MISSED)
|
||||||
set(DDS_HAS_DEADLINE_MISSED "1")
|
set(DDS_HAS_DEADLINE_MISSED "1")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(PkgConfig)
|
||||||
|
if(PkgConfig_FOUND)
|
||||||
|
pkg_check_modules(LTTNG lttng-ust)
|
||||||
|
if(LTTNG_FOUND)
|
||||||
|
message(STATUS "Building with LTTng instrumentation support")
|
||||||
|
set(DDS_HAS_LTTNG_TRACING "1")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "CYCLONE_ENABLE_TRACING requires lttng-ust")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
configure_file(features.h.in "${CMAKE_CURRENT_BINARY_DIR}/core/include/dds/features.h")
|
configure_file(features.h.in "${CMAKE_CURRENT_BINARY_DIR}/core/include/dds/features.h")
|
||||||
|
|
||||||
add_definitions(-DDDSI_INCLUDE_NETWORK_PARTITIONS -DDDSI_INCLUDE_SSM)
|
add_definitions(-DDDSI_INCLUDE_NETWORK_PARTITIONS -DDDSI_INCLUDE_SSM)
|
||||||
|
|
|
@ -42,6 +42,10 @@ PREPEND(srcs_ddsc "${CMAKE_CURRENT_LIST_DIR}/src"
|
||||||
dds_sertopic_builtintopic.c
|
dds_sertopic_builtintopic.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (DDS_HAS_LTTNG_TRACING)
|
||||||
|
list(APPEND srcs_ddsc "${CMAKE_CURRENT_LIST_DIR}/src/tracing_lttng.c")
|
||||||
|
endif()
|
||||||
|
|
||||||
PREPEND(hdrs_public_ddsc "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include/dds>$<INSTALL_INTERFACE:include/dds>"
|
PREPEND(hdrs_public_ddsc "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include/dds>$<INSTALL_INTERFACE:include/dds>"
|
||||||
dds.h
|
dds.h
|
||||||
ddsc/dds_public_error.h
|
ddsc/dds_public_error.h
|
||||||
|
@ -81,6 +85,7 @@ PREPEND(hdrs_private_ddsc "${CMAKE_CURRENT_LIST_DIR}/src"
|
||||||
dds__whc_builtintopic.h
|
dds__whc_builtintopic.h
|
||||||
dds__serdata_builtintopic.h
|
dds__serdata_builtintopic.h
|
||||||
dds__get_status.h
|
dds__get_status.h
|
||||||
|
tracing_lttng.h
|
||||||
)
|
)
|
||||||
|
|
||||||
generate_export_header(
|
generate_export_header(
|
||||||
|
@ -108,6 +113,10 @@ target_include_directories(ddsc
|
||||||
INTERFACE
|
INTERFACE
|
||||||
$<INSTALL_INTERFACE:include>)
|
$<INSTALL_INTERFACE:include>)
|
||||||
|
|
||||||
|
if (DDS_HAS_LTTNG_TRACING)
|
||||||
|
target_link_libraries(ddsc PRIVATE ${LTTNG_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
install(
|
install(
|
||||||
DIRECTORY
|
DIRECTORY
|
||||||
"${CMAKE_CURRENT_LIST_DIR}/include/"
|
"${CMAKE_CURRENT_LIST_DIR}/include/"
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "dds/ddsi/q_entity.h"
|
#include "dds/ddsi/q_entity.h"
|
||||||
#include "dds/ddsi/ddsi_domaingv.h"
|
#include "dds/ddsi/ddsi_domaingv.h"
|
||||||
#include "dds/ddsi/ddsi_sertopic.h"
|
#include "dds/ddsi/ddsi_sertopic.h"
|
||||||
|
#include "tracing_lttng.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
dds_read_impl: Core read/take function. Usually maxs is size of buf and si
|
dds_read_impl: Core read/take function. Usually maxs is size of buf and si
|
||||||
|
@ -128,6 +129,7 @@ static dds_return_t dds_read_impl (bool take, dds_entity_t reader_or_condition,
|
||||||
}
|
}
|
||||||
dds_entity_unpin (entity);
|
dds_entity_unpin (entity);
|
||||||
thread_state_asleep (ts1);
|
thread_state_asleep (ts1);
|
||||||
|
TRACEPOINT(read, (const void *)rd, (const void *)*buf);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#undef NC_CLEAR_LOAN_OUT
|
#undef NC_CLEAR_LOAN_OUT
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "dds/ddsi/ddsi_entity_index.h"
|
#include "dds/ddsi/ddsi_entity_index.h"
|
||||||
#include "dds/ddsi/ddsi_security_omg.h"
|
#include "dds/ddsi/ddsi_security_omg.h"
|
||||||
#include "dds/ddsi/ddsi_statistics.h"
|
#include "dds/ddsi/ddsi_statistics.h"
|
||||||
|
#include "tracing_lttng.h"
|
||||||
|
|
||||||
DECL_ENTITY_LOCK_UNLOCK (extern inline, dds_reader)
|
DECL_ENTITY_LOCK_UNLOCK (extern inline, dds_reader)
|
||||||
|
|
||||||
|
@ -547,6 +548,11 @@ static dds_entity_t dds_create_reader_int (dds_entity_t participant_or_subscribe
|
||||||
dds_topic_allow_set_qos (tp);
|
dds_topic_allow_set_qos (tp);
|
||||||
dds_topic_unpin (tp);
|
dds_topic_unpin (tp);
|
||||||
dds_subscriber_unlock (sub);
|
dds_subscriber_unlock (sub);
|
||||||
|
|
||||||
|
dds_guid_t guid;
|
||||||
|
(void)dds_get_guid(reader, &guid);
|
||||||
|
TRACEPOINT(create_reader, (const void *)rd, rd->m_topic->m_ktopic->name, guid.v);
|
||||||
|
|
||||||
return reader;
|
return reader;
|
||||||
|
|
||||||
#ifdef DDSI_INCLUDE_SECURITY
|
#ifdef DDSI_INCLUDE_SECURITY
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "dds/ddsi/q_radmin.h"
|
#include "dds/ddsi/q_radmin.h"
|
||||||
#include "dds/ddsi/ddsi_domaingv.h"
|
#include "dds/ddsi/ddsi_domaingv.h"
|
||||||
#include "dds/ddsi/ddsi_deliver_locally.h"
|
#include "dds/ddsi/ddsi_deliver_locally.h"
|
||||||
|
#include "tracing_lttng.h"
|
||||||
|
|
||||||
dds_return_t dds_write (dds_entity_t writer, const void *data)
|
dds_return_t dds_write (dds_entity_t writer, const void *data)
|
||||||
{
|
{
|
||||||
|
@ -168,6 +169,8 @@ dds_return_t dds_write_impl (dds_writer *wr, const void * data, dds_time_t tstam
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
return DDS_RETCODE_BAD_PARAMETER;
|
return DDS_RETCODE_BAD_PARAMETER;
|
||||||
|
|
||||||
|
TRACEPOINT(write, (const void *)wr, (const char *)data, tstamp);
|
||||||
|
|
||||||
/* Check for topic filter */
|
/* Check for topic filter */
|
||||||
if (wr->m_topic->filter_fn && !writekey)
|
if (wr->m_topic->filter_fn && !writekey)
|
||||||
if (! wr->m_topic->filter_fn (data, wr->m_topic->filter_ctx))
|
if (! wr->m_topic->filter_fn (data, wr->m_topic->filter_ctx))
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "dds__whc.h"
|
#include "dds__whc.h"
|
||||||
#include "dds__statistics.h"
|
#include "dds__statistics.h"
|
||||||
#include "dds/ddsi/ddsi_statistics.h"
|
#include "dds/ddsi/ddsi_statistics.h"
|
||||||
|
#include "tracing_lttng.h"
|
||||||
|
|
||||||
DECL_ENTITY_LOCK_UNLOCK (extern inline, dds_writer)
|
DECL_ENTITY_LOCK_UNLOCK (extern inline, dds_writer)
|
||||||
|
|
||||||
|
@ -395,6 +396,11 @@ dds_entity_t dds_create_writer (dds_entity_t participant_or_publisher, dds_entit
|
||||||
dds_topic_allow_set_qos (tp);
|
dds_topic_allow_set_qos (tp);
|
||||||
dds_topic_unpin (tp);
|
dds_topic_unpin (tp);
|
||||||
dds_publisher_unlock (pub);
|
dds_publisher_unlock (pub);
|
||||||
|
|
||||||
|
dds_guid_t guid;
|
||||||
|
(void)dds_get_guid(writer, &guid);
|
||||||
|
TRACEPOINT(create_writer, (const void *)wr, wr->m_topic->m_ktopic->name, guid.v);
|
||||||
|
|
||||||
return writer;
|
return writer;
|
||||||
|
|
||||||
#ifdef DDSI_INCLUDE_SECURITY
|
#ifdef DDSI_INCLUDE_SECURITY
|
||||||
|
|
16
src/core/ddsc/src/tracing_lttng.c
Normal file
16
src/core/ddsc/src/tracing_lttng.c
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Copyright(c) 2021 Christophe Bedard
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||||
|
* v. 1.0 which is available at
|
||||||
|
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define TRACEPOINT_CREATE_PROBES
|
||||||
|
|
||||||
|
#define TRACEPOINT_DEFINE
|
||||||
|
#include "tracing_lttng.h"
|
110
src/core/ddsc/src/tracing_lttng.h
Normal file
110
src/core/ddsc/src/tracing_lttng.h
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
/*
|
||||||
|
* Copyright(c) 2021 Christophe Bedard
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||||
|
* v. 1.0 which is available at
|
||||||
|
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Provide fake header guard for cpplint
|
||||||
|
#undef _DDS_LTTNG_H_
|
||||||
|
#ifndef _DDS_LTTNG_H_
|
||||||
|
#define _DDS_LTTNG_H_
|
||||||
|
|
||||||
|
#include "dds/features.h"
|
||||||
|
|
||||||
|
#undef TRACEPOINT_PROVIDER
|
||||||
|
#define TRACEPOINT_PROVIDER dds
|
||||||
|
|
||||||
|
#define TRACEPOINT(event_name, ...) \
|
||||||
|
tracepoint(TRACEPOINT_PROVIDER, event_name, __VA_ARGS__)
|
||||||
|
|
||||||
|
#undef TRACEPOINT_INCLUDE
|
||||||
|
#define TRACEPOINT_INCLUDE "tracing_lttng.h"
|
||||||
|
|
||||||
|
#if !defined(__DDS_LTTNG_H_) || defined(TRACEPOINT_HEADER_MULTI_READ)
|
||||||
|
#define __DDS_LTTNG_H_
|
||||||
|
|
||||||
|
#include <lttng/tracepoint.h>
|
||||||
|
|
||||||
|
#ifndef LTTNG_UST_HAVE_SDT_INTEGRATION
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
# pragma message ("lttng-ust has not been configured & built with SDT integration (--with-sdt)")
|
||||||
|
# else
|
||||||
|
# warning lttng-ust has not been configured & built with SDT integration (--with-sdt)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#define DDS_GID_STORAGE_SIZE 16u
|
||||||
|
|
||||||
|
TRACEPOINT_EVENT(
|
||||||
|
TRACEPOINT_PROVIDER,
|
||||||
|
create_writer,
|
||||||
|
TP_ARGS(
|
||||||
|
const void *, writer_arg,
|
||||||
|
char *, topic_name_arg,
|
||||||
|
const uint8_t *, gid_arg
|
||||||
|
),
|
||||||
|
TP_FIELDS(
|
||||||
|
ctf_integer_hex(const void *, writer, writer_arg)
|
||||||
|
ctf_string(topic_name, topic_name_arg)
|
||||||
|
ctf_array(uint8_t, gid, gid_arg, DDS_GID_STORAGE_SIZE)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
TRACEPOINT_EVENT(
|
||||||
|
TRACEPOINT_PROVIDER,
|
||||||
|
create_reader,
|
||||||
|
TP_ARGS(
|
||||||
|
const void *, reader_arg,
|
||||||
|
char *, topic_name_arg,
|
||||||
|
const uint8_t *, gid_arg
|
||||||
|
),
|
||||||
|
TP_FIELDS(
|
||||||
|
ctf_integer_hex(const void *, reader, reader_arg)
|
||||||
|
ctf_string(topic_name, topic_name_arg)
|
||||||
|
ctf_array(uint8_t, gid, gid_arg, DDS_GID_STORAGE_SIZE)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
TRACEPOINT_EVENT(
|
||||||
|
TRACEPOINT_PROVIDER,
|
||||||
|
write,
|
||||||
|
TP_ARGS(
|
||||||
|
const void *, writer_arg,
|
||||||
|
const void *, data_arg,
|
||||||
|
int64_t, timestamp_arg
|
||||||
|
),
|
||||||
|
TP_FIELDS(
|
||||||
|
ctf_integer_hex(const void *, writer, writer_arg)
|
||||||
|
ctf_integer_hex(const void *, data, data_arg)
|
||||||
|
ctf_integer(int64_t, timestamp, timestamp_arg)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
TRACEPOINT_EVENT(
|
||||||
|
TRACEPOINT_PROVIDER,
|
||||||
|
read,
|
||||||
|
TP_ARGS(
|
||||||
|
const void *, reader_arg,
|
||||||
|
const void *, buffer_arg
|
||||||
|
),
|
||||||
|
TP_FIELDS(
|
||||||
|
ctf_integer_hex(const void *, reader, reader_arg)
|
||||||
|
ctf_integer_hex(const void *, buffer, buffer_arg)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#endif // __DDS_LTTNG_H_
|
||||||
|
|
||||||
|
#include <lttng/tracepoint-event.h>
|
||||||
|
|
||||||
|
#endif // _DDS_LTTNG_H_
|
||||||
|
|
|
@ -129,7 +129,7 @@ ddsrt_thread_setname(const char *__restrict name)
|
||||||
name exceeds the limit, so silently truncate. */
|
name exceeds the limit, so silently truncate. */
|
||||||
char buf[MAXTHREADNAMESIZE + 1] = "";
|
char buf[MAXTHREADNAMESIZE + 1] = "";
|
||||||
(void)ddsrt_strlcpy(buf, name, sizeof(buf));
|
(void)ddsrt_strlcpy(buf, name, sizeof(buf));
|
||||||
(void)pthread_setname_np(pthread_self(), name);
|
(void)pthread_setname_np(pthread_self(), buf);
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
(void)pthread_setname_np(name);
|
(void)pthread_setname_np(name);
|
||||||
#elif defined(__FreeBSD__)
|
#elif defined(__FreeBSD__)
|
||||||
|
|
|
@ -21,4 +21,7 @@
|
||||||
/* Whether or not support for generating "deadline missed" events is included */
|
/* Whether or not support for generating "deadline missed" events is included */
|
||||||
#cmakedefine DDS_HAS_DEADLINE_MISSED @DDS_HAS_DEADLINE_MISSED@
|
#cmakedefine DDS_HAS_DEADLINE_MISSED @DDS_HAS_DEADLINE_MISSED@
|
||||||
|
|
||||||
|
/* Whether or not support for LTTng tracing instrumentation is included */
|
||||||
|
#cmakedefine DDS_HAS_LTTNG_TRACING @DDS_HAS_LTTNG_TRACING@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue