neqo icon indicating copy to clipboard operation
neqo copied to clipboard

feat: auto-tune stream receive window

Open mxinden opened this issue 1 year ago • 3 comments

Previously the stream send and receive window had a hard limit at 1MB. On high latency and/or high bandwidth connections (i.e. large bandwidth-delay product), 1 MB is not enough to exhaust the available bandwidth.

Sample scenario:

delay_s = 0.05
window_bits = 1 * 1024 * 1024 * 8
bandwidth_bits_s = window_bits / delay_s
bandwidth_mbits_s = bandwidth_bits_s / 1024 / 1024 # 160.0

In other words, on a 50 ms connection a 1 MB window can at most achieve 160 Mbit/s.

This commit introduces an auto-tuning algorithm for the stream receive window, increasing the window towards the bandwidth-delay product of the connection.


Work in progress for now. Able to transfer >160Mbit/s on a 50ms link already.

Currently implementing the algorithm proposed in https://github.com/mozilla/neqo/issues/733#issuecomment-2065966029. I still have to familiarize myself with the algorithm proposed in https://github.com/mozilla/neqo/issues/733#issuecomment-2081974078. Which ever is chosen, both need the same scaffolding.

Fixes https://github.com/mozilla/neqo/issues/733.

TODO

  • [ ] Reasonable upper limit (e.g. 500ms and 1gbit/s)
  • [ ] Shrink buffers
  • [ ] Investigate only linear CC increase on simulator (no loss)

mxinden avatar May 02 '24 10:05 mxinden

Failed Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

All results

Succeeded Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

Unsupported Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

github-actions[bot] avatar May 07 '24 10:05 github-actions[bot]

Firefox builds for this PR

The following builds are available for testing. Crossed-out builds did not succeed.

github-actions[bot] avatar May 07 '24 12:05 github-actions[bot]