]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
metrics: Add stats when the clock stalls.
authorMike Perry <mikeperry-git@torproject.org>
Thu, 3 Nov 2022 20:08:01 +0000 (20:08 +0000)
committerDavid Goulet <dgoulet@torproject.org>
Mon, 7 Nov 2022 14:55:06 +0000 (09:55 -0500)
Part of #40708.

src/core/or/congestion_control_common.c
src/core/or/congestion_control_common.h
src/feature/relay/relay_metrics.c

index 09d1d501dac7569040cc6d3fd538f5989e48a349..c27eb2fca849a26f420a2be44d0508b5e5efd323 100644 (file)
@@ -94,6 +94,9 @@ void congestion_control_set_cc_enabled(void);
 /* Number of times the RTT value was reset. For MetricsPort. */
 static uint64_t num_rtt_reset;
 
+/* Number of times the clock was stalled. For MetricsPort. */
+static uint64_t num_clock_stalls;
+
 /* Consensus parameters cached. The non static ones are extern. */
 static uint32_t cwnd_max = CWND_MAX_DFLT;
 int32_t cell_queue_high = CELL_QUEUE_HIGH_DFLT;
@@ -136,6 +139,13 @@ congestion_control_get_num_rtt_reset(void)
   return num_rtt_reset;
 }
 
+/** Return the number of clock stalls that have been done. */
+uint64_t
+congestion_control_get_num_clock_stalls(void)
+{
+  return num_clock_stalls;
+}
+
 /**
  * Update global congestion control related consensus parameter values,
  * every consensus update.
@@ -872,6 +882,7 @@ congestion_control_update_circuit_rtt(congestion_control_t *cc,
 
   /* Do not update RTT at all if it looks fishy */
   if (time_delta_stalled_or_jumped(cc, cc->ewma_rtt_usec, rtt)) {
+    num_clock_stalls++; /* Accounting */
     return 0;
   }
 
index e62775eccee8f9ad1864cfb23ed5bc99140f6e25..a2740fb0b6cc1cf6342df0a74bba705dc0ab5150 100644 (file)
@@ -83,6 +83,7 @@ bool congestion_control_validate_sendme_increment(uint8_t sendme_inc);
 char *congestion_control_get_control_port_fields(const origin_circuit_t *);
 
 uint64_t congestion_control_get_num_rtt_reset(void);
+uint64_t congestion_control_get_num_clock_stalls(void);
 
 /* Ugh, C.. these are private. Use the getter instead, when
  * external to the congestion control code. */
index 9ceb61836e39bf995f8e91b93fc0367b0553f71d..af59eb3dcc7b2488c6a5a93b7e242bced1b8f486 100644 (file)
@@ -373,6 +373,15 @@ fill_cc_values(void)
           metrics_format_label("action", "rtt_reset"));
   metrics_store_entry_update(sentry, congestion_control_get_num_rtt_reset());
 
+  sentry = metrics_store_add(the_store, rentry->type, rentry->name,
+                             rentry->help);
+  metrics_store_entry_add_label(sentry,
+          metrics_format_label("state", "clock_stalls"));
+  metrics_store_entry_add_label(sentry,
+          metrics_format_label("action", "rtt_skipped"));
+  metrics_store_entry_update(sentry,
+                             congestion_control_get_num_clock_stalls());
+
   sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                              rentry->help);
   metrics_store_entry_add_label(sentry,