Development issues regarding the cerowrt test router project
 help / color / mirror / Atom feed
From: Jonathan Morton <chromatix99@gmail.com>
To: Stephen Hemminger <stephen@networkplumber.org>
Cc: Dave Taht <dave.taht@gmail.com>, David Reed <dpreed@reed.com>,
	bloat <bloat@lists.bufferbloat.net>,
	Ketan Kulkarni <ketkulka@gmail.com>,
	"cerowrt-devel@lists.bufferbloat.net"
	<cerowrt-devel@lists.bufferbloat.net>
Subject: Re: [Cerowrt-devel] [Bloat] Bechtolschiem
Date: Fri, 2 Jul 2021 23:28:52 +0300	[thread overview]
Message-ID: <5DAEFFA0-8ACF-413E-89F7-22D34CEB4EBB@gmail.com> (raw)
In-Reply-To: <20210702095924.0427b579@hermes.local>

> On 2 Jul, 2021, at 7:59 pm, Stephen Hemminger <stephen@networkplumber.org> wrote:
> 
> In real world tests, TCP Cubic will consume any buffer it sees at a
> congested link. Maybe that is what they mean by capture effect.

First, I'll note that what they call "small buffer" corresponds to about a tenth of a millisecond at the port's link rate.  This would be ludicrously small at Internet scale, but is actually reasonable for datacentre conditions where RTTs are often in the microseconds.

Assuming the effect as described is real, it ultimately stems from a burst of traffic from a particular flow arriving at a queue that is *already* full.  Such bursts are expected from ack-clocked flows coming out of application-limited mode (ie. on completion of a disk read), in slow-start, or recovering from earlier losses.  It is also possible for a heavily coalesced ack to abruptly open the receive and congestion windows and trigger a send burst.  These bursts occur much less in paced flows, because the object of pacing is to avoid bursts.

The queue is full because tail drop upon queue overflow is the only congestion signal provided by the switch, and ack-clocked capacity-seeking transports naturally keep the queue as full as they can - especially under high statistical multiplexing conditions where a single multiplicative decrease event does not greatly reduce the total traffic demand. CUBIC arguably spends more time with the queue very close to full than Reno does, due to the plateau designed into it, but at these very short RTTs I would not be surprised if CUBIC is equivalent to Reno in practice.

The solution is to keep some normally-unused space in the queue for bursts of traffic to use occasionally.  This is most naturally done using ECN applied by some AQM algorithm, or the AQM can pre-emptively and selectively drop packets in Not-ECT flows.  And because the AQM is more likely to mark or drop packets from flows that occupy more link time or queue capacity, it has a natural equalising effect between flows.

Applying ECN requires some Layer 3 awareness in the switch, which might not be practical.  A simple alternative it to drop packets instead.  Single packet losses are easily recovered from by retransmission after approximately one RTT.  There are also emerging techniques for applying congestion signals at Layer 2, which can be converted into ECN signals at some convenient point downstream.

However it is achieved, the point is that keeping the *standing* queue down to some fraction of the total queue depth reserves space for accommodating those bursts which are expected occasionally in normal traffic.  Because those bursts are not lost, the flows experiencing them are not disadvantaged and the so-called "capture effect" will not occur.

 - Jonathan Morton

  parent reply	other threads:[~2021-07-02 20:29 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-06 15:29 [Cerowrt-devel] trying to make sense of what switch vendors say wrt buffer bloat Eric Johansson
2016-06-06 16:53 ` Toke Høiland-Jørgensen
2016-06-06 17:46   ` Jonathan Morton
2016-06-06 18:37     ` Mikael Abrahamsson
2016-06-06 21:16       ` Ketan Kulkarni
2016-06-07  2:52         ` dpreed
2016-06-07  2:58           ` dpreed
2016-06-07 10:46             ` Mikael Abrahamsson
2016-06-07 14:46               ` Dave Taht
2016-06-07 17:51             ` Eric Johansson
2016-06-10 21:45               ` dpreed
2016-06-11  1:36                 ` Jonathan Morton
2016-06-11  8:25                 ` Sebastian Moeller
2021-07-02 16:42           ` [Cerowrt-devel] Bechtolschiem Dave Taht
2021-07-02 16:59             ` [Cerowrt-devel] [Bloat] Bechtolschiem Stephen Hemminger
2021-07-02 19:46               ` Matt Mathis
2021-07-07 22:19                 ` [Cerowrt-devel] Abandoning Window-based CC Considered Harmful (was Re: [Bloat] Bechtolschiem) Bless, Roland (TM)
2021-07-07 22:38                   ` Matt Mathis
2021-07-08 11:24                     ` [Cerowrt-devel] " Bless, Roland (TM)
2021-07-08 13:29                       ` Matt Mathis
2021-07-08 14:05                         ` [Cerowrt-devel] " Bless, Roland (TM)
2021-07-08 14:40                         ` [Cerowrt-devel] [Bloat] Abandoning Window-based CC Considered Harmful (was Bechtolschiem) Jonathan Morton
2021-07-08 20:14                           ` David P. Reed
2021-07-08 13:29                       ` Neal Cardwell
2021-07-02 20:28               ` Jonathan Morton [this message]
2016-06-07 22:31 ` [Cerowrt-devel] trying to make sense of what switch vendors say wrt buffer bloat Valdis.Kletnieks

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/cerowrt-devel.lists.bufferbloat.net/

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

  git send-email \
    --in-reply-to=5DAEFFA0-8ACF-413E-89F7-22D34CEB4EBB@gmail.com \
    --to=chromatix99@gmail.com \
    --cc=bloat@lists.bufferbloat.net \
    --cc=cerowrt-devel@lists.bufferbloat.net \
    --cc=dave.taht@gmail.com \
    --cc=dpreed@reed.com \
    --cc=ketkulka@gmail.com \
    --cc=stephen@networkplumber.org \
    /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