[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Bug 29085: Avoid monotime usage for rtt estimates if it is not in use.
commit 14ec8b89f83ea9cc4fbc7b8bd24194f5408cfea4
Author: Mike Perry <mikeperry-git@xxxxxxxxxxxxxx>
Date: Wed May 8 00:40:49 2019 +0000
Bug 29085: Avoid monotime usage for rtt estimates if it is not in use.
---
src/core/or/circuitpadding.c | 25 +++++++++++++++++++++----
src/test/test_circuitpadding.c | 1 +
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/src/core/or/circuitpadding.c b/src/core/or/circuitpadding.c
index eeedbc124..7674f3510 100644
--- a/src/core/or/circuitpadding.c
+++ b/src/core/or/circuitpadding.c
@@ -1547,10 +1547,26 @@ circpad_estimate_circ_rtt_on_received(circuit_t *circ,
", %d) after two back to back packets. Current RTT: %d",
circ->n_chan ? circ->n_chan->global_identifier : 0,
circ->n_circ_id, mi->rtt_estimate_usec);
- mi->stop_rtt_update = 1;
+ mi->stop_rtt_update = 1;
+
+ if (!mi->rtt_estimate_usec) {
+ static ratelim_t rtt_lim = RATELIM_INIT(600);
+ log_fn_ratelim(&rtt_lim,LOG_NOTICE,LD_BUG,
+ "Circuit got two cells back to back before estimating RTT.");
+ }
}
} else {
- mi->last_received_time_usec = monotime_absolute_usec();
+ const circpad_state_t *state = circpad_machine_current_state(mi);
+
+ /* Since monotime is unpredictably expensive, only update this field
+ * if rtt estimates are needed. Otherwise, stop the rtt update. */
+ if (state->use_rtt_estimate) {
+ mi->last_received_time_usec = monotime_absolute_usec();
+ } else {
+ /* Let's fast-path future decisions not to update rtt if the
+ * feature is not in use. */
+ mi->stop_rtt_update = 1;
+ }
}
}
@@ -1610,8 +1626,9 @@ circpad_estimate_circ_rtt_on_send(circuit_t *circ,
mi->stop_rtt_update = 1;
if (!mi->rtt_estimate_usec) {
- log_fn(LOG_NOTICE, LD_CIRC,
- "Got two cells back to back on a circuit before estimating RTT.");
+ static ratelim_t rtt_lim = RATELIM_INIT(600);
+ log_fn_ratelim(&rtt_lim,LOG_NOTICE,LD_BUG,
+ "Circuit sent two cells back to back before estimating RTT.");
}
}
}
diff --git a/src/test/test_circuitpadding.c b/src/test/test_circuitpadding.c
index b7dbf022a..13371df68 100644
--- a/src/test/test_circuitpadding.c
+++ b/src/test/test_circuitpadding.c
@@ -415,6 +415,7 @@ helper_create_basic_machine(void)
circ_client_machine.states[CIRCPAD_STATE_START].
next_state[CIRCPAD_EVENT_NONPADDING_RECV] = CIRCPAD_STATE_BURST;
+ circ_client_machine.states[CIRCPAD_STATE_START].use_rtt_estimate = 1;
circ_client_machine.states[CIRCPAD_STATE_BURST].
next_state[CIRCPAD_EVENT_PADDING_RECV] = CIRCPAD_STATE_BURST;
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits