]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MINOR: quic: support a tolerance for spurious losses
authorWilly Tarreau <w@1wt.eu>
Thu, 25 Jul 2024 12:46:10 +0000 (14:46 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 21 Aug 2024 06:34:30 +0000 (08:34 +0200)
commit67bf1d6c9e9410424cc5adc0a77477a820a14ad5
tree4a8b748bedb7f4f6f87a2371bb909c0135285f49
parentfab0e99aa16071daf3968e1079de75a81b908919
MINOR: quic: support a tolerance for spurious losses

Tests performed between a 1 Gbps connected server and a 100 mbps client,
distant by 95ms showed that:

  - we need 1.1 MB in flight to fill the link
  - rare but inevitable losses are sufficient to make cubic's window
    collapse fast and long to recover
  - a 100 MB object takes 69s to download
  - tolerance for 1 loss between two ACKs suffices to shrink the download
    time to 20-22s
  - 2 losses go to 17-20s
  - 4 losses reach 14-17s

At 100 concurrent connections that fill the server's link:
  - 0 loss tolerance shows 2-3% losses
  - 1 loss tolerance shows 3-5% losses
  - 2 loss tolerance shows 10-13% losses
  - 4 loss tolerance shows 23-29% losses

As such while there can be a significant gain sometimes in setting this
tolerance above zero, it can also significantly waste bandwidth by sending
far more than can be received. While it's probably not a solution to real
world problems, it repeatedly proved to be a very effective troubleshooting
tool helping to figure different root causes of low transfer speeds. In
spirit it is comparable to the no-cc congestion algorithm, i.e. it must
not be used except for experimentation.
doc/configuration.txt
include/haproxy/global-t.h
include/haproxy/quic_cc-t.h
src/cfgparse-quic.c
src/quic_cc_cubic.c