[Bug 276890] Getting fq_codel correct on inbound shaping

From: <bugzilla-noreply_at_freebsd.org>
Date: Thu, 08 Feb 2024 11:14:12 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276890

            Bug ID: 276890
           Summary: Getting fq_codel correct on inbound shaping
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: bugs@FreeBSD.org
          Reporter: dave.taht@gmail.com

Over the years, particularly in the opnsense universe, there has been much
angst and hairpulling with a variety of claims saying that "fq_codel" does not
work properly on inbound shaping, and others that went to the Linux version on
the same hardware, saying that it worked much better.

The paper and code to my eye, looked pretty close to correct, but it was,
indeed, very different than the Linux version, *and* that paper did not test
inbound shaping:
https://www.researchgate.net/publication/322784709_Dummynet_AQM_v02_--_CoDel_FQ-CoDel_PIE_and_FQ-PIE_for_FreeBSD%27s_ipfwdummynet_framework 


So anyway, this reddit thread came up where I concluded there is something
weird about how the freebsd inbound path actually functions in some cases:

https://www.reddit.com/r/opnsense/comments/18z68ec/anyone_who_hasnt_configured_codel_limiters_do_it/

I am not a freebsd developer, and the effort required for me to "get in there"
and test (or worse, patch) is a bit much (I live on a boat nowadays).  What I
would like is to find someone that can run 3 simple tests on my behalf, and
give me the packet captures, so I can verify correctness. Ideally driving more
complex tests through flent to my cloud would be great, but I would settle for,
at some RTT (ideally 10-40ms - not LOCAL[1] - ideally over a GPON fiber network
to the cloud) is the following test:

Setup inbound shaping at 100Mbit, 300mbit, and 800mbit. (on a link capable of
those speeds, and on x86 or arm hardware also capable)

Run iperf or netperf for 1 minute on a tcp download while capturing
tcpdump -i the_interface -s 128 -w 100mbit.cap (etc)

And send me the capture, please?  [2]

There are plenty of reasons why inbound shaping can have problems, like
batchyness or timing outside of the fq_codel implementation, and people set
their expectations too high for it (particularly against torrent), and I have
tried (with libreqos, etc) to make egress shaping far more the default across
the internet. But I should be able to verify basic correctness with just those
three captures. [3]

Bonus points would be enabling RFC3168 style ECN across the test (which shows
up really nicely in a packet cap) and capturing from the server, rather than
client. 

Thanks for any help you can offer. 

[1] Longer RTTs engage the AQM component of fq_codel more visibly
[2] Or plot yourself with wireshark and/or xplot.org
[3] and gain a reference plot for future work, if needed 

PS The openbsd version of fq_codel is *definately* broken, but codebase
entirely different. It caps the "count" (drop) variable to 400 when it should
run freely. Working on fixing that too.

-- 
You are receiving this mail because:
You are the assignee for the bug.