Index | Thread | Search

From:
Bjorn Ketelaars <bket@openbsd.org>
Subject:
Re: fq_codel: uncap count
To:
tech@openbsd.org
Cc:
mikeb@openbsd.org, dave.taht@gmail.com
Date:
Tue, 13 Feb 2024 21:20:22 +0100

Download raw body.

Thread
On Mon 12/02/2024 20:57, Bjorn Ketelaars wrote:
> Dave Taht reported a bug of fq_codel count being capped at 400 [0]. Our
> implementation uses a lookup table of the first ~400 inverse square
> roots, which is used to reach target, instead of a free running
> variable.
> I would not go as far of calling this a bug, instead I think this is a
> design choice (?). However you look at it, it is seemingly a deviation
> from RFC 8290, which describes the use of a free running variable, which
> is calculated. Per Dave's suggestion I had a look at the implementation
> of linux and FreeBSD.
> 
> Diff below replaces the lookup table by a calculation based on Newton's
> method for finding the inverse root of a square root. This is the same
> approach as used by FreeBSD.
> 
> I have been running with this diff on amd64 without any noticeable
> impact on performance. I'm hoping that someone is willing to review the
> bits below, and helps testing.
> 
> While here zap a couple of white spaces.
> 
> [0] https://marc.info/?l=openbsd-bugs&m=170741059623394&w=2

I performed additional tests using flent, playing with the number of
flows, and noticed a significant performance drop.
Using the diff, softnet0 hogs all CPU time, latency increases and the
machine becomes unresponsive. Using the same test conditions the current
fq_codel implementation simply just works.

I'm not sure what is causing the above, and I need to dig further. Sorry
for not finding this earlier.

Please ignore this diff for now as it needs more work/testing.