mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
Add lttng trace support.
Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
819b69244a
commit
896c16c3b1
@ -82,6 +82,7 @@ noinst_HEADERS += \
|
||||
src/core/or/entry_port_cfg_st.h \
|
||||
src/core/or/extend_info_st.h \
|
||||
src/core/or/listener_connection_st.h \
|
||||
src/core/or/lttng_cc.inc \
|
||||
src/core/or/lttng_circuit.inc \
|
||||
src/core/or/onion.h \
|
||||
src/core/or/or.h \
|
||||
@ -115,7 +116,9 @@ noinst_HEADERS += \
|
||||
|
||||
if USE_TRACING_INSTRUMENTATION_LTTNG
|
||||
LIBTOR_APP_A_SOURCES += \
|
||||
src/core/or/trace_probes_cc.c \
|
||||
src/core/or/trace_probes_circuit.c
|
||||
noinst_HEADERS += \
|
||||
src/core/or/trace_probes_cc.h \
|
||||
src/core/or/trace_probes_circuit.h
|
||||
endif
|
||||
|
166
src/core/or/lttng_cc.inc
Normal file
166
src/core/or/lttng_cc.inc
Normal file
@ -0,0 +1,166 @@
|
||||
/* Copyright (c) 2021, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
* \file lttng_cc.inc
|
||||
* \brief LTTng tracing probe declaration for the congestion control subsystem.
|
||||
* It is in this .inc file due to the non C standard syntax and the way
|
||||
* we guard the header with the LTTng specific
|
||||
* TRACEPOINT_HEADER_MULTI_READ.
|
||||
**/
|
||||
|
||||
#include "orconfig.h"
|
||||
|
||||
/* We only build the following if LTTng instrumentation has been enabled. */
|
||||
#ifdef USE_TRACING_INSTRUMENTATION_LTTNG
|
||||
|
||||
/* The following defines are LTTng-UST specific. */
|
||||
#undef TRACEPOINT_PROVIDER
|
||||
#define TRACEPOINT_PROVIDER tor_cc
|
||||
|
||||
#undef TRACEPOINT_INCLUDE
|
||||
#define TRACEPOINT_INCLUDE "./src/core/or/lttng_cc.inc"
|
||||
|
||||
#if !defined(LTTNG_CC_INC) || defined(TRACEPOINT_HEADER_MULTI_READ)
|
||||
#define LTTNG_CC_INC
|
||||
|
||||
#include <lttng/tracepoint.h>
|
||||
|
||||
/*
|
||||
* Flow Control
|
||||
*/
|
||||
|
||||
/* Emitted everytime the flow_control_decide_xon() function is called. */
|
||||
TRACEPOINT_EVENT(tor_cc, flow_decide_xon,
|
||||
TP_ARGS(const edge_connection_t *, stream, size_t, n_written),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
|
||||
ctf_integer(size_t, written_bytes, n_written)
|
||||
ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
|
||||
ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
|
||||
ctf_integer(size_t, outbuf_len,
|
||||
connection_get_outbuf_len(TO_CONN(stream)))
|
||||
)
|
||||
)
|
||||
|
||||
/* Emitted when flow control starts measuring the drain rate. */
|
||||
TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_start,
|
||||
TP_ARGS(const edge_connection_t *, stream),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
|
||||
ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
|
||||
ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
|
||||
ctf_integer(size_t, outbuf_len,
|
||||
connection_get_outbuf_len(TO_CONN(stream)))
|
||||
)
|
||||
)
|
||||
|
||||
/* Emitted when the drain rate is updated. The new_drain_rate value is what was
|
||||
* just computed. */
|
||||
TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_update,
|
||||
TP_ARGS(const edge_connection_t *, stream, uint32_t, drain_rate),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
|
||||
ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
|
||||
ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
|
||||
ctf_integer(uint32_t, new_drain_rate, drain_rate)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
|
||||
ctf_integer(size_t, outbuf_len,
|
||||
connection_get_outbuf_len(TO_CONN(stream)))
|
||||
)
|
||||
)
|
||||
|
||||
/* Emitted when an XON cell is sent due to a notice in a drain rate change. */
|
||||
TRACEPOINT_EVENT(tor_cc, flow_decide_xon_rate_change,
|
||||
TP_ARGS(const edge_connection_t *, stream),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
|
||||
ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
|
||||
ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
|
||||
ctf_integer(size_t, outbuf_len,
|
||||
connection_get_outbuf_len(TO_CONN(stream)))
|
||||
)
|
||||
)
|
||||
|
||||
/* Emitted when an XON cell is sent because we partially or fully drained the
|
||||
* edge connection buffer. */
|
||||
TRACEPOINT_EVENT(tor_cc, flow_decide_xon_partial_drain,
|
||||
TP_ARGS(const edge_connection_t *, stream),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
|
||||
ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
|
||||
ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
|
||||
ctf_integer(size_t, outbuf_len,
|
||||
connection_get_outbuf_len(TO_CONN(stream)))
|
||||
)
|
||||
)
|
||||
|
||||
/* Emitted when we double the drain rate which is an attempt to see if we can
|
||||
* speed things up. */
|
||||
TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_doubled,
|
||||
TP_ARGS(const edge_connection_t *, stream),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
|
||||
ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
|
||||
ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
|
||||
ctf_integer(size_t, outbuf_len,
|
||||
connection_get_outbuf_len(TO_CONN(stream)))
|
||||
)
|
||||
)
|
||||
|
||||
/* XOFF */
|
||||
|
||||
/* Emitted when we send an XOFF cell. */
|
||||
TRACEPOINT_EVENT(tor_cc, flow_decide_xoff_sending,
|
||||
TP_ARGS(const edge_connection_t *, stream),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
|
||||
ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
|
||||
ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
|
||||
ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
|
||||
ctf_integer(size_t, outbuf_len,
|
||||
connection_get_outbuf_len(TO_CONN(stream)))
|
||||
)
|
||||
)
|
||||
|
||||
/*
|
||||
* Congestion Control
|
||||
*/
|
||||
|
||||
/* Emitted when the BDP value has been updated. */
|
||||
TRACEPOINT_EVENT(tor_cc, bdp_update,
|
||||
TP_ARGS(const circuit_t *, circ, const congestion_control_t *, cc,
|
||||
uint64_t, curr_rtt_usec, uint64_t, sendme_rate_bdp),
|
||||
TP_FIELDS(
|
||||
ctf_integer(uint64_t, circuit_ptr, circ)
|
||||
ctf_integer(uint32_t, n_circ_id, circ->n_circ_id)
|
||||
ctf_integer(uint64_t, min_rtt_usec, cc->min_rtt_usec)
|
||||
ctf_integer(uint64_t, curr_rtt_usec, curr_rtt_usec)
|
||||
ctf_integer(uint64_t, ewma_rtt_usec, cc->ewma_rtt_usec)
|
||||
ctf_integer(uint64_t, max_rtt_usec, cc->max_rtt_usec)
|
||||
ctf_integer(uint64_t, bdp_inflight_rtt, cc->bdp[BDP_ALG_INFLIGHT_RTT])
|
||||
ctf_integer(uint64_t, bdp_cwnd_rtt, cc->bdp[BDP_ALG_CWND_RTT])
|
||||
ctf_integer(uint64_t, bdp_sendme_rate, cc->bdp[BDP_ALG_SENDME_RATE])
|
||||
ctf_integer(uint64_t, bdp_piecewise, cc->bdp[BDP_ALG_PIECEWISE])
|
||||
ctf_integer(uint64_t, sendme_rate_bdp, sendme_rate_bdp)
|
||||
)
|
||||
)
|
||||
|
||||
#endif /* LTTNG_CC_INC || TRACEPOINT_HEADER_MULTI_READ */
|
||||
|
||||
/* Must be included after the probes declaration. */
|
||||
#include <lttng/tracepoint-event.h>
|
||||
|
||||
#endif /* USE_TRACING_INSTRUMENTATION_LTTNG */
|
33
src/core/or/trace_probes_cc.c
Normal file
33
src/core/or/trace_probes_cc.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* Copyright (c) 2021, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
* \file trace_probes_cc.c
|
||||
* \brief Tracepoint provider source file for the cc subsystem. Probes
|
||||
* are generated within this C file for LTTng-UST
|
||||
**/
|
||||
|
||||
#include "orconfig.h"
|
||||
|
||||
/*
|
||||
* Following section is specific to LTTng-UST.
|
||||
*/
|
||||
#ifdef USE_TRACING_INSTRUMENTATION_LTTNG
|
||||
|
||||
/* Header files that the probes need. */
|
||||
#include "core/or/or.h"
|
||||
#include "core/or/channel.h"
|
||||
#include "core/or/circuit_st.h"
|
||||
#include "core/or/circuitlist.h"
|
||||
#include "core/or/congestion_control_st.h"
|
||||
#include "core/or/connection_st.h"
|
||||
#include "core/or/edge_connection_st.h"
|
||||
#include "core/or/or_circuit_st.h"
|
||||
#include "core/or/origin_circuit_st.h"
|
||||
|
||||
#define TRACEPOINT_DEFINE
|
||||
#define TRACEPOINT_CREATE_PROBES
|
||||
|
||||
#include "core/or/trace_probes_cc.h"
|
||||
|
||||
#endif /* defined(USE_TRACING_INSTRUMENTATION_LTTNG) */
|
22
src/core/or/trace_probes_cc.h
Normal file
22
src/core/or/trace_probes_cc.h
Normal file
@ -0,0 +1,22 @@
|
||||
/* Copyright (c) 2021, The Tor Project, Inc. */
|
||||
/* See LICENSE for licensing information */
|
||||
|
||||
/**
|
||||
* \file trace_probes_cc.c
|
||||
* \brief The tracing probes for the congestion control subsystem.
|
||||
* Currently, only LTTng-UST probes are available.
|
||||
**/
|
||||
|
||||
#ifndef TOR_TRACE_PROBES_CC_H
|
||||
#define TOR_TRACE_PROBES_CC_H
|
||||
|
||||
#include "lib/trace/events.h"
|
||||
|
||||
/* We only build the following if LTTng instrumentation has been enabled. */
|
||||
#ifdef USE_TRACING_INSTRUMENTATION_LTTNG
|
||||
|
||||
#include "core/or/lttng_cc.inc"
|
||||
|
||||
#endif /* USE_TRACING_INSTRUMENTATION_LTTNG */
|
||||
|
||||
#endif /* !defined(TOR_TRACE_PROBES_CC_H) */
|
Loading…
Reference in New Issue
Block a user