]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Bug 24769: Reduce and parameterize the cbt learning idle timeout.
authorMike Perry <mikeperry-git@torproject.org>
Wed, 31 Jan 2018 16:27:50 +0000 (16:27 +0000)
committerMike Perry <mikeperry-git@torproject.org>
Wed, 31 Jan 2018 17:21:53 +0000 (17:21 +0000)
This is only half of the changes needed. We should also parameterize the
number of concurrent cbt learning circuits in needs_circuits_for_build().

changes/bug24769 [new file with mode: 0644]
src/or/circuitlist.c

diff --git a/changes/bug24769 b/changes/bug24769
new file mode 100644 (file)
index 0000000..5aee8da
--- /dev/null
@@ -0,0 +1,7 @@
+  o Minor bugfixes (performance):
+    - Reduce the number of circuits that can be opened at once during the
+      circuit build timeout phase. This is done by increasing the idle timeout
+      to 3 minutes, and lowering the maximum number of concurrent learning
+      circuits to 10. Fixes Bug 24769; bugfix on 0.3.1.1-alpha.
+
+
index 8c02cd1c19eebfe8de20afacab554a3ca7d72429..06e955a8fd72846d37113b094a4a4c43fc8f6ec0 100644 (file)
@@ -897,8 +897,10 @@ init_circuit_base(circuit_t *circ)
 
 /** If we haven't yet decided on a good timeout value for circuit
  * building, we close idle circuits aggressively so we can get more
- * data points. */
-#define IDLE_TIMEOUT_WHILE_LEARNING (1*60)
+ * data points. These are the default, min, and max consensus values */
+#define DFLT_IDLE_TIMEOUT_WHILE_LEARNING (3*60)
+#define MIN_IDLE_TIMEOUT_WHILE_LEARNING (10)
+#define MAX_IDLE_TIMEOUT_WHILE_LEARNING (1000*60)
 
 /** Allocate space for a new circuit, initializing with <b>p_circ_id</b>
  * and <b>p_conn</b>. Add it to the global circuit list.
@@ -931,7 +933,11 @@ origin_circuit_new(void)
       circuit_build_times_needs_circuits(get_circuit_build_times())) {
     /* Circuits should be shorter lived if we need more of them
      * for learning a good build timeout */
-    circ->circuit_idle_timeout = IDLE_TIMEOUT_WHILE_LEARNING;
+    circ->circuit_idle_timeout =
+      networkstatus_get_param(NULL, "cbtlearntimeout",
+                              DFLT_IDLE_TIMEOUT_WHILE_LEARNING,
+                              MIN_IDLE_TIMEOUT_WHILE_LEARNING,
+                              MAX_IDLE_TIMEOUT_WHILE_LEARNING);
   } else {
     // This should always be larger than the current port prediction time
     // remaining, or else we'll end up with the case where a circuit times out
@@ -951,7 +957,11 @@ origin_circuit_new(void)
                "%d seconds of predictive building remaining.",
                circ->circuit_idle_timeout,
                prediction_time_remaining);
-      circ->circuit_idle_timeout = IDLE_TIMEOUT_WHILE_LEARNING;
+      circ->circuit_idle_timeout =
+          networkstatus_get_param(NULL, "cbtlearntimeout",
+                  DFLT_IDLE_TIMEOUT_WHILE_LEARNING,
+                  MIN_IDLE_TIMEOUT_WHILE_LEARNING,
+                  MAX_IDLE_TIMEOUT_WHILE_LEARNING);
     }
 
     log_info(LD_CIRC,