Quicr / old-quicrq

BSD 2-Clause "Simplified" License
4 stars 2 forks source link

Pipelining of Warp and Rush objects #138

Closed huitema closed 1 year ago

huitema commented 1 year ago

The goal is to forward the bytes received on Rush or Warp streams as soon as they arrive at the relay, without waiting for the whole object to be received. This could result in significant latency improvements, for example in the congestion tests. This work requires knowing the object length "up front", which implies changing the formats of the control messages and object headers.

The first commit in this PR updates the object headers. This needs to be verified before actually changing Rust or Warp.

huitema commented 1 year ago

The code is complete. However, the expect latency gains did not materialize. The delays observed in the congestion tests are on par with the non modified implementations of Rush and Warp, with slightly fewer congestion drops but also very slightly higher average delays. Still, relaying fragments immediately does improve the "best case" delays, and avoiding extra copies reduces memory allocation and CPU load.