Congestion control should not update unless cwnd is full
While staring at conflux algorithms, I found a very interesting congestion control bug: We're updating the congestion window even if it is not full. This means for chatty protocols that don't cause queue, they may inflate their congestion window too much and overshoot. Then, when they do have data to send, they cause queue overload.
There's a few possible fixes. Here's a simple one: mikeperry/tor@663bfb55
The benefits from a shadow run with this were considerable, without much impact on performance. Queue use over 1000 disappeared, so we can lower circ_max_cell_queue_size
down to ~750.
Other options include using inflight
instead of cwnd
to estimate BDP and queue use, in which case we could still backoff, but we just would not increase the cwnd in these cases. I am going to test those.
This may also enable us to make our congestion control parameters more aggressive again. Quite the find.
Cc: @dgoulet