summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2022-07-31 16:38:34 +0000
committerDavid Goulet <dgoulet@torproject.org>2022-08-11 09:26:51 -0400
commit08c3ee8eca4bf60f3218daeb65acf97da554e80f (patch)
tree2c97b0871d484ec0a674d3a5a3edf40460f56fe2
parent832a1d9fae9a006d9f5fcf26718901395d197703 (diff)
downloadtor-08c3ee8eca4bf60f3218daeb65acf97da554e80f.tar.gz
tor-08c3ee8eca4bf60f3218daeb65acf97da554e80f.zip
Create slow-start max for n_ewma_cnt.
Since slow-start now checks every sendme, lower EWMA is better.
-rw-r--r--src/core/or/congestion_control_common.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/core/or/congestion_control_common.c b/src/core/or/congestion_control_common.c
index 8f09a80bae..c1a62cada0 100644
--- a/src/core/or/congestion_control_common.c
+++ b/src/core/or/congestion_control_common.c
@@ -52,6 +52,7 @@
#define N_EWMA_CWND_PCT_DFLT (50)
#define N_EWMA_MAX_DFLT (10)
+#define N_EWMA_SS_DFLT (2)
/* BDP algorithms for each congestion control algorithms use the piecewise
* estimattor. See section 3.1.4 of proposal 324. */
@@ -108,6 +109,11 @@ static uint8_t n_ewma_cwnd_pct;
static uint8_t n_ewma_max;
/**
+ * Maximum number N for the N-count EWMA averaging of RTT in Slow Start.
+ */
+static uint8_t n_ewma_ss;
+
+/**
* Minimum number of sendmes before we begin BDP estimates
*/
static uint8_t bwe_sendme_min;
@@ -196,6 +202,14 @@ congestion_control_new_consensus_params(const networkstatus_t *ns)
N_EWMA_MAX_DFLT,
N_EWMA_MAX_MIN,
N_EWMA_MAX_MAX);
+
+#define N_EWMA_SS_MIN 2
+#define N_EWMA_SS_MAX (INT32_MAX)
+ n_ewma_ss =
+ networkstatus_get_param(NULL, "cc_ewma_ss",
+ N_EWMA_SS_DFLT,
+ N_EWMA_SS_MIN,
+ N_EWMA_SS_MAX);
}
/**
@@ -452,8 +466,18 @@ dequeue_timestamp(smartlist_t *timestamps_u64_usecs)
static inline uint64_t
n_ewma_count(const congestion_control_t *cc)
{
- uint64_t ewma_cnt = MIN(CWND_UPDATE_RATE(cc)*n_ewma_cwnd_pct/100,
+ uint64_t ewma_cnt = 0;
+
+ if (cc->in_slow_start) {
+ /* In slow-start, we check the Vegas condition every sendme,
+ * so much lower ewma counts are needed. */
+ ewma_cnt = n_ewma_ss;
+ } else {
+ /* After slow-start, we check the Vegas condition only once per
+ * CWND, so it is better to average over longer periods. */
+ ewma_cnt = MIN(CWND_UPDATE_RATE(cc)*n_ewma_cwnd_pct/100,
n_ewma_max);
+ }
ewma_cnt = MAX(ewma_cnt, 2);
return ewma_cnt;
}