Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Feb 2024 01:18:05 +0000
From:      bugzilla-noreply@freebsd.org
To:        net@FreeBSD.org
Subject:   [Bug 276890] Getting fq_codel correct on inbound shaping
Message-ID:  <bug-276890-7501-7KyWIFpv2u@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-276890-7501@https.bugs.freebsd.org/bugzilla/>
References:  <bug-276890-7501@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D276890

--- Comment #5 from Dave Taht <dave.taht@gmail.com> ---

I am a little dubious about the "active" idea.

http://fxr.watson.org/fxr/source/netpfil/ipfw/dn_sched_fq_codel.c#L413

Also.

 if (!si->flows[idx].active ) {
  319                 STAILQ_INSERT_TAIL(&si->newflows, &si->flows[idx],
flowchain);
  320                 si->flows[idx].deficit =3D param->quantum;
  321                 si->flows[idx].cst.dropping =3D false;
  322                 si->flows[idx].cst.first_above_time =3D 0;
  323                 si->flows[idx].active =3D 1;
  324                 //D("activate %d",idx);
  325         }

In the linux version we do not touch the codel state variables at this phas=
e at
all, but retain the previous settings. It may be that dropping and
first_above_time get set in roughly the same way in my version, but perhaps=
 if
I describe the intent of what should happen, I too will understand this code
better.=20

The idea of a flow going out of an "active" state is not that any of it=C2=
=B4s state
needs to be reset. The overall target of fq_codel is to reduce the total de=
lay
in all the queues to the target (usually 5ms). It maintains a cache of the =
last
"good" drop rate.=20

If a single flow, out of dozens, has an arrival rate like this:

A                      A                    A                 A

And that is still too much relative to the other flows, it needs to get more
drops.=20

Anyway, instead of checking for or maintaining an active or inactive "state=
" we
just check to see if queue length > 0.

Just saving my state here on this subtley. Also we use the global queue len=
gth
not the per queue length to turn off the global dropper, which I have to go
looking through here to see if it is correct.

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-276890-7501-7KyWIFpv2u>