]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
metrics: Add running average of CC cwnd in slow start when closing circuit
authorMike Perry <mikeperry-git@torproject.org>
Thu, 3 Nov 2022 19:48:16 +0000 (19:48 +0000)
committerDavid Goulet <dgoulet@torproject.org>
Mon, 7 Nov 2022 14:55:06 +0000 (09:55 -0500)
Count slow start separately.

Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
src/core/or/circuitlist.c
src/core/or/circuitlist.h
src/feature/relay/relay_metrics.c

index b21d95ade74526631d66dfd482401223fb50ddec..ddcb9bebe42beae6d526fb4fe79c56ba2a298929 100644 (file)
@@ -151,8 +151,12 @@ static int any_opened_circs_cached_val = 0;
 
 /** Moving average of the cc->cwnd from each closed circuit. */
 double cc_stats_circ_close_cwnd_ma = 0;
-/* Running count of this moving average. Needed so we can update it. */
+/** Moving average of the cc->cwnd from each closed slow-start circuit. */
+double cc_stats_circ_close_ss_cwnd_ma = 0;
+
+/* Running count of the above moving averages. Needed so we can update it. */
 static double stats_circ_close_cwnd_ma_count = 0;
+static double stats_circ_close_ss_cwnd_ma_count = 0;
 
 /********* END VARIABLES ************/
 
@@ -2234,9 +2238,21 @@ circuit_mark_for_close_, (circuit_t *circ, int reason, int line,
 
   /* Update stats. */
   if (circ->ccontrol) {
-    stats_circ_close_cwnd_ma_count++;
-    STATS_UPDATE_AVG(cc_stats_circ_close_cwnd_ma,
-                     circ->ccontrol->cwnd, stats_circ_close_cwnd_ma_count);
+    if (circ->ccontrol->in_slow_start) {
+      /* If we are in slow start, only count the ss cwnd if we've sent
+       * enough data to get RTT measurements such that we have a min
+       * and a max RTT, and they are not the same. This prevents us from
+       * averaging and reporting unused and low-use circuits here */
+      if (circ->ccontrol->max_rtt_usec != circ->ccontrol->min_rtt_usec) {
+        stats_circ_close_ss_cwnd_ma_count++;
+        STATS_UPDATE_AVG(cc_stats_circ_close_ss_cwnd_ma,
+                   circ->ccontrol->cwnd, stats_circ_close_ss_cwnd_ma_count);
+      }
+    } else {
+      stats_circ_close_cwnd_ma_count++;
+      STATS_UPDATE_AVG(cc_stats_circ_close_cwnd_ma,
+                       circ->ccontrol->cwnd, stats_circ_close_cwnd_ma_count);
+    }
   }
 
   if (circuits_pending_close == NULL)
index 1a99083bc64d13a95771cb0b2b5130146a879aab..281ea1f76fef845aa9e2fe888b59e39eba7ea0be 100644 (file)
 
 /** Stats. */
 extern double cc_stats_circ_close_cwnd_ma;
+extern double cc_stats_circ_close_ss_cwnd_ma;
 
 /** Convert a circuit_t* to a pointer to the enclosing or_circuit_t.  Assert
  * if the cast is impossible. */
index b95ca4ba06db9705c4d9cad1895ca09de631633a..9ceb61836e39bf995f8e91b93fc0367b0553f71d 100644 (file)
@@ -375,7 +375,6 @@ fill_cc_values(void)
 
   sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                              rentry->help);
-
   metrics_store_entry_add_label(sentry,
           metrics_format_label("state", "slow_start_exit"));
   metrics_store_entry_add_label(sentry,
@@ -385,7 +384,6 @@ fill_cc_values(void)
 
   sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                              rentry->help);
-
   metrics_store_entry_add_label(sentry,
           metrics_format_label("state", "on_circ_close"));
   metrics_store_entry_add_label(sentry,
@@ -393,6 +391,15 @@ fill_cc_values(void)
   metrics_store_entry_update(sentry,
                              tor_llround(cc_stats_circ_close_cwnd_ma));
 
+  sentry = metrics_store_add(the_store, rentry->type, rentry->name,
+                             rentry->help);
+  metrics_store_entry_add_label(sentry,
+          metrics_format_label("state", "on_circ_close"));
+  metrics_store_entry_add_label(sentry,
+          metrics_format_label("action", "ss_cwnd"));
+  metrics_store_entry_update(sentry,
+                             tor_llround(cc_stats_circ_close_ss_cwnd_ma));
+
   sentry = metrics_store_add(the_store, rentry->type, rentry->name,
                              rentry->help);
   metrics_store_entry_add_label(sentry,