revolutions per minute - a new metric for measuring responsiveness
 help / color / mirror / Atom feed
From: Christoph Paasch <cpaasch@apple.com>
To: Sebastian Moeller <moeller0@gmx.de>
Cc: Jonathan Morton <chromatix99@gmail.com>, Rpm <rpm@lists.bufferbloat.net>
Subject: Re: [Rpm] Alternate definitions of "working condition" -	unnecessary?
Date: Fri, 08 Oct 2021 16:32:11 -0700	[thread overview]
Message-ID: <YWDU+4QwOvIaVdjR@MacBook-Pro-2.local> (raw)
In-Reply-To: <45E18E9B-DD71-4F8A-92C2-AB5AA4439DC0@gmx.de>

On 10/07/21 - 12:30, Sebastian Moeller wrote:
> Hi Christoph,
> 
> > On Oct 7, 2021, at 02:11, Christoph Paasch via Rpm
> > <rpm@lists.bufferbloat.net> wrote:
> > 
> > On 10/07/21 - 02:18, Jonathan Morton via Rpm wrote:
> >>> On 7 Oct, 2021, at 12:22 am, Dave Taht via Rpm
> >>> <rpm@lists.bufferbloat.net> wrote: There are additional cases where,
> >>> perhaps, the fq component works, and the aqm doesn't.
> >> 
> >> Such as Apple's version of FQ-Codel?  The source code is public, so we
> >> might as well talk about it.
> > 
> > Let's not just talk about it, but actually read it ;-)
> > 
> >> There are two deviations I know about in the AQM portion of that.
> >> First is that they do the marking and/or dropping at the tail of the
> >> queue, not the head.  Second is that the marking/dropping frequency is
> >> fixed, instead of increasing during a continuous period of congestion
> >> as real Codel does.
> > 
> > We don't drop/mark locally generated traffic (which is the use-case we
> > care abhout).
> 
> 	In this discussion probably true, but I recall that one reason why
> 	sch_fq_codel is a more versatile qdisc compared to sch_fq under
> 	Linux is that fq excels for locally generated traffic, while
> 	fq_codel is also working well for forwarded traffic. And I use
> 	"forwarding" here to encompass things like VMs running on a host,
> 	where direct "back-pressure" will not work... 

Our main use-case is iOS. This is by far the most common case and thus there
are no VMs or alike. All traffic is generated locally by our TCP
implementation.

>> > We signal flow-control straight back to the TCP-stack at which point the
> > queue is entirely drained before TCP starts transmitting again.
> > 
> > So, drop-frequency really doesn't matter because there is no drop.
> 
> 	But is it still codel/fq_codel if it does not implement head drop
> 	(as described in
> 	https://datatracker.ietf.org/doc/html/rfc8290#section-4.2) and if
> 	the control loop
> 	(https://datatracker.ietf.org/doc/html/rfc8289#section-3.3) is
> 	changed? (I am also wondering how reducing the default number of
> 	sub-queues from 1024 to 128 behaves on the background of the
> 	birthday paradox).

Not sure where the 128 comes from ?
And birthday paradox does not apply. The magic happens in inp_calc_flowhash() ;-)


Cheers,
Christoph


> Best Regards Sebastian
> 
> P.S.: My definition of working conditions entails bidirectionally
> saturating traffic with responsive and (transiently) under-responsive
> flows. Something like a few long running TCP transfers to generate
> "base-load" and a higher number of TCP flows in IW or slow start to add
> some spice to the whole. In the future, once QUIC actually takes off*,
> adding more well defined/behaved UDP flows to the mix seems reasonable. My
> off the cuff test for the effect of IW used to be to start a browser and
> open a collection of (30-50) tabs getting a nice "thundering herd" of TCP
> flows starting around the same time. But it seems browser makers got too
> smart for me and will not do what I want any more but temporally space the
> different sites in the tabs so that my nice thundering herd is less
> obnoxious (which IMHO is actually the right thing to do for actual usage,
> but for testing it sucks).
> 
> *) Occasionally browsing the NANOG archives makes me wonder how the move
> from HTTP/TCP to  QUIC/UDP is going to play with operators propensity to
> rate-limit UDP, but that is a different kettle of fish...
> 
> 
> > 
> > 
> > Christoph
> > 
> >> 
> >> I predict the consequences of these mistakes will differ according to
> >> the type of traffic applied:
> >> 
> >> With TCP traffic over an Internet-scale path, the consequences are not
> >> serious.  The tail-drop means that the response at the end of
> >> slow-start will be slower, with a higher peak of intra-flow induced
> >> delay, and there is also a small but measurable risk of tail-loss
> >> causing a more serious application-level delay.  These alone *should*
> >> be enough to prompt a fix, if Apple are actually serious about
> >> improving application responsiveness.  The fixed marking frequency,
> >> however, is probably invisible for this traffic.
> >> 
> >> With TCP traffic over a short-RTT path, the effects are more
> >> pronounced.  The delay excursion at the end of slow-start will be
> >> larger in comparison to the baseline RTT, and when the latter is short
> >> enough, the fixed congestion signalling frequency means there will be
> >> some standing queue that real Codel would get rid of.  This standing
> >> queue will influence the TCP stack's RTT estimator and thus RTO value,
> >> increasing the delay consequent to tail loss.
> >> 
> >> Similar effects to the above can be expected with other reliable stream
> >> transports (SCTP, QUIC), though the details may differ.
> >> 
> >> The consequences with non-congestion-controlled traffic could be much
> >> more serious.  Real Codel will increase its drop frequency continuously
> >> when faced with overload, eventually gaining control of the queue depth
> >> as long as the load remains finite and reasonably constant.  Because
> >> Apple's AQM doesn't increase its drop frequency, the queue depth for
> >> such a flow will increase continuously until either a delay-sensitive
> >> rate selection mechanism is triggered at the sender, or the queue
> >> overflows and triggers burst losses.
> >> 
> >> So in the context of this discussion, is it worth generating a type of
> >> load that specifically exercises this failure mode?  If so, what does
> >> it look like?
> >> 
> >> - Jonathan Morton _______________________________________________ Rpm
> >> mailing list Rpm@lists.bufferbloat.net
> >> https://lists.bufferbloat.net/listinfo/rpm
> > _______________________________________________ Rpm mailing list
> > Rpm@lists.bufferbloat.net https://lists.bufferbloat.net/listinfo/rpm
> 

  parent reply	other threads:[~2021-10-08 23:32 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-06 19:11 Rich Brown
2021-10-06 20:36 ` Jonathan Foulkes
2021-10-07 16:40   ` Toke Høiland-Jørgensen
2021-10-07 18:49     ` Dave Taht
2021-10-08 17:51       ` Toke Høiland-Jørgensen
2021-10-07 21:39   ` Rich Brown
2021-10-06 21:22 ` Dave Taht
2021-10-06 23:18   ` Jonathan Morton
2021-10-07  0:11     ` Christoph Paasch
2021-10-07 10:29       ` Jonathan Morton
2021-10-07 15:44         ` [Rpm] apple's fq_"codel" implementation Dave Taht
2021-10-07 10:30       ` [Rpm] Alternate definitions of "working condition" - unnecessary? Sebastian Moeller
2021-10-08  0:33         ` Jonathan Morton
2021-10-08 23:32         ` Christoph Paasch [this message]
2021-10-11  7:31           ` Sebastian Moeller
2021-10-11  9:01             ` Jonathan Morton
2021-10-11 10:03               ` Sebastian Moeller
2021-10-11 17:34             ` Christoph Paasch
2021-10-12 10:23               ` Sebastian Moeller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.bufferbloat.net/postorius/lists/rpm.lists.bufferbloat.net/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YWDU+4QwOvIaVdjR@MacBook-Pro-2.local \
    --to=cpaasch@apple.com \
    --cc=chromatix99@gmail.com \
    --cc=moeller0@gmx.de \
    --cc=rpm@lists.bufferbloat.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox