Page MenuHomeFreeBSD

TCP rack does not work properly with cubic.
ClosedPublic

Authored by rrs on Sep 26 2022, 11:58 AM.
Tags
None
Referenced Files
Unknown Object (File)
Jan 7 2024, 12:49 AM
Unknown Object (File)
Dec 23 2023, 9:27 AM
Unknown Object (File)
Nov 30 2023, 4:37 PM
Unknown Object (File)
Nov 25 2023, 4:47 AM
Unknown Object (File)
Nov 22 2023, 2:06 AM
Unknown Object (File)
Aug 12 2023, 7:28 PM
Unknown Object (File)
Jul 15 2023, 7:47 AM
Unknown Object (File)
May 21 2023, 12:44 AM

Details

Summary

Right now if you use rack with cubic (the new default cc) you will have
improper results. This is because rack uses different variables than
the base stack (or bbr) and thus tcp_compute_pipe() always returns
so that cubic will choose a 30% backoff not the 50% backoff it should
when it is newreno compatibility mode. The fix is to allow a stack (rack)
to override its own compute_pipe.

Test Plan

This is easy to test in a lab setting where you setup multiple flows with
BB logging on. You then make sure cubic does the "right" thing after
it calls the new compute pipe.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

rrs requested review of this revision.Sep 26 2022, 11:58 AM
rscheff added a subscriber: rscheff.

Hmm... I'm slightly unhappy by not populating the new tfb_compute_pipe field in the base stack, and point that to a do_newreno_compute_pipe(). That would feel somehow more symetrical. However, we already rely on proper (NULL) initialization of the tfb_ struct, so this is good for now.

This revision is now accepted and ready to land.Sep 26 2022, 12:36 PM
This revision was automatically updated to reflect the committed changes.