tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

lttng_cc.inc (6543B)


      1 /* Copyright (c) 2021, The Tor Project, Inc. */
      2 /* See LICENSE for licensing information */
      3 
      4 /**
      5 * \file lttng_cc.inc
      6 * \brief LTTng tracing probe declaration for the congestion control subsystem.
      7 *        It is in this .inc file due to the non C standard syntax and the way
      8 *        we guard the header with the LTTng specific
      9 *        TRACEPOINT_HEADER_MULTI_READ.
     10 **/
     11 
     12 #include "orconfig.h"
     13 
     14 /* We only build the following if LTTng instrumentation has been enabled. */
     15 #ifdef USE_TRACING_INSTRUMENTATION_LTTNG
     16 
     17 /* The following defines are LTTng-UST specific. */
     18 #undef TRACEPOINT_PROVIDER
     19 #define TRACEPOINT_PROVIDER tor_cc
     20 
     21 #undef TRACEPOINT_INCLUDE
     22 #define TRACEPOINT_INCLUDE "./src/core/or/lttng_cc.inc"
     23 
     24 #if !defined(LTTNG_CC_INC) || defined(TRACEPOINT_HEADER_MULTI_READ)
     25 #define LTTNG_CC_INC
     26 
     27 #include <lttng/tracepoint.h>
     28 
     29 /*
     30 * Flow Control
     31 */
     32 
     33 /* Emitted every time the flow_control_decide_xon() function is called. */
     34 TRACEPOINT_EVENT(tor_cc, flow_decide_xon,
     35  TP_ARGS(const edge_connection_t *, stream, size_t, n_written),
     36  TP_FIELDS(
     37    ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
     38    ctf_integer(size_t, written_bytes, n_written)
     39    ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
     40    ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
     41    ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
     42    ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
     43    ctf_integer(size_t, outbuf_len,
     44                connection_get_outbuf_len(TO_CONN(stream)))
     45  )
     46 )
     47 
     48 /* Emitted when flow control starts measuring the drain rate. */
     49 TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_start,
     50  TP_ARGS(const edge_connection_t *, stream),
     51  TP_FIELDS(
     52    ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
     53    ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
     54    ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
     55    ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
     56    ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
     57    ctf_integer(size_t, outbuf_len,
     58                connection_get_outbuf_len(TO_CONN(stream)))
     59  )
     60 )
     61 
     62 /* Emitted when the drain rate is updated. The new_drain_rate value is what was
     63 * just computed. */
     64 TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_update,
     65  TP_ARGS(const edge_connection_t *, stream, uint32_t, drain_rate),
     66  TP_FIELDS(
     67    ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
     68    ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
     69    ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
     70    ctf_integer(uint32_t, new_drain_rate, drain_rate)
     71    ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
     72    ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
     73    ctf_integer(size_t, outbuf_len,
     74                connection_get_outbuf_len(TO_CONN(stream)))
     75  )
     76 )
     77 
     78 /* Emitted when an XON cell is sent due to a notice in a drain rate change. */
     79 TRACEPOINT_EVENT(tor_cc, flow_decide_xon_rate_change,
     80  TP_ARGS(const edge_connection_t *, stream),
     81  TP_FIELDS(
     82    ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
     83    ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
     84    ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
     85    ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
     86    ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
     87    ctf_integer(size_t, outbuf_len,
     88                connection_get_outbuf_len(TO_CONN(stream)))
     89  )
     90 )
     91 
     92 /* Emitted when an XON cell is sent because we partially or fully drained the
     93 * edge connection buffer. */
     94 TRACEPOINT_EVENT(tor_cc, flow_decide_xon_partial_drain,
     95  TP_ARGS(const edge_connection_t *, stream),
     96  TP_FIELDS(
     97    ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
     98    ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
     99    ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
    100    ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
    101    ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
    102    ctf_integer(size_t, outbuf_len,
    103                connection_get_outbuf_len(TO_CONN(stream)))
    104  )
    105 )
    106 
    107 /* Emitted when we double the drain rate which is an attempt to see if we can
    108 * speed things up. */
    109 TRACEPOINT_EVENT(tor_cc, flow_decide_xon_drain_doubled,
    110  TP_ARGS(const edge_connection_t *, stream),
    111  TP_FIELDS(
    112    ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
    113    ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
    114    ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
    115    ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
    116    ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
    117    ctf_integer(size_t, outbuf_len,
    118                connection_get_outbuf_len(TO_CONN(stream)))
    119  )
    120 )
    121 
    122 /* XOFF */
    123 
    124 /* Emitted when we send an XOFF cell. */
    125 TRACEPOINT_EVENT(tor_cc, flow_decide_xoff_sending,
    126  TP_ARGS(const edge_connection_t *, stream),
    127  TP_FIELDS(
    128    ctf_integer(uint64_t, stream_id, TO_CONN(stream)->global_identifier)
    129    ctf_integer(uint32_t, drained_bytes_current, stream->drained_bytes)
    130    ctf_integer(uint32_t, drained_bytes_previous, stream->prev_drained_bytes)
    131    ctf_integer(uint32_t, ewma_drain_rate_last, stream->ewma_rate_last_sent)
    132    ctf_integer(uint32_t, ewma_drain_rate_current, stream->ewma_drain_rate)
    133    ctf_integer(size_t, outbuf_len,
    134                connection_get_outbuf_len(TO_CONN(stream)))
    135  )
    136 )
    137 
    138 /*
    139 * Congestion Control
    140 */
    141 
    142 /* Emitted when the BDP value has been updated. */
    143 TRACEPOINT_EVENT(tor_cc, bdp_update,
    144  TP_ARGS(const circuit_t *, circ, const congestion_control_t *, cc,
    145          uint64_t, curr_rtt_usec),
    146  TP_FIELDS(
    147    ctf_integer(uint64_t, circuit_ptr, circ)
    148    ctf_integer(uint32_t, n_circ_id, circ->n_circ_id)
    149    ctf_integer(uint64_t, min_rtt_usec, cc->min_rtt_usec)
    150    ctf_integer(uint64_t, curr_rtt_usec, curr_rtt_usec)
    151    ctf_integer(uint64_t, ewma_rtt_usec, cc->ewma_rtt_usec)
    152    ctf_integer(uint64_t, max_rtt_usec, cc->max_rtt_usec)
    153    ctf_integer(uint64_t, bdp_cwnd_rtt, cc->bdp)
    154  )
    155 )
    156 
    157 #endif /* LTTNG_CC_INC || TRACEPOINT_HEADER_MULTI_READ */
    158 
    159 /* Must be included after the probes declaration. */
    160 #include <lttng/tracepoint-event.h>
    161 
    162 #endif /* USE_TRACING_INSTRUMENTATION_LTTNG */