General list for discussing Bufferbloat
 help / color / mirror / Atom feed
From: Jonathan Morton <chromatix99@gmail.com>
To: jb <justin@dslr.net>
Cc: bloat <bloat@lists.bufferbloat.net>
Subject: Re: [Bloat] DSLReports Speed Test has latency measurement built-in
Date: Tue, 21 Apr 2015 12:37:26 +0300	[thread overview]
Message-ID: <CAJq5cE132nju1GE4NQbHh8ZzbA7PYKJh0GuyfGDvSkhLoaWd9w@mail.gmail.com> (raw)
In-Reply-To: <CAH3Ss94OnRuj4g0HdOQJ8Y_zFAwuidLCM+Lp+qLQXaDPjM9bwg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2969 bytes --]

I would explain it a bit differently to David. There are a lot of
interrelated components and concepts in TCP, and its sometimes hard to see
which ones are relevant in a given situation.

The key insight though is that there are two windows which are maintained
by the sender and receiver respectively, and data can only be sent if it
fits into BOTH windows. The receive window is effectively set by that
sysctl, and the congestion window (maintained by the sender) is the one
that changes dynamically.

The correct size of both windows is the bandwidth delay product of the path
between the two hosts. However, this size varies, so you can't set a single
size which works in all our even most situations. The general approach that
has the best chance of working is to set the receive window large and rely
on the congestion window to adapt.

Incidentally, 200ms at say 2Mbps gives a BDP of about 40KB.

The problem with that is that in most networks today, there is insufficient
information for the congestion window to find its ideal size. It will grow
until it receives an unambiguous congestion signal, typically a lost packet
or ECN flag. But that will most likely occur on queue overflow at the
bottleneck, and due to the resulting induced delay, the sender will have
been overdosing that queue for a while before it gets the signal to back
off - so probably a whole bunch of packets got lost in the meantime. Then,
after transmitting the lost packets, the sender has to wait for the
receiver to catch up with the smaller congestion window before it can
resume.

Meanwhile, the receiver can't deliver any of the data it's receiving
because the lost packets belong in front of it. If you've ever noticed a
transfer that seems to stall and then suddenly catch up, that's due to a
lost packet and retransmission. The effect is known as "head of line
blocking", and can be used to detect packet loss at the application layer.

Ironically, most hardware designers will tell you that buffers are meant to
smooth data delivery. It's true, but only when it doesn't overflow - and
TCP will always overflow a dumb queue if allowed to.

Reducing the receive window, to a value below the native BDP of the path
plus the bottleneck queue length, can be used as a crude way to prevent the
bottleneck queue from overflowing. Then, the congestion window will grow to
the receive window size and stay there, and TCP will enter a steady state
where every ack results in the next packet(s) being sent. (Most receivers
won't send an ack for every received packet, as long as none are missing.)

However, running multiple flows in parallel using a receive window tuned
for one flow will double the data in flight, and the queue may once again
overflow. If you look only at aggregate throughput, you might not notice
this because parallel TCPs tend to fill in each others' gaps. But the
individual flow throughputs will show the same "head of line blocking"
effect.

- Jonathan Morton

[-- Attachment #2: Type: text/html, Size: 3203 bytes --]

  parent reply	other threads:[~2015-04-21  9:37 UTC|newest]

Thread overview: 183+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-19  5:26 jb
2015-04-19  7:36 ` David Lang
2015-04-19  7:48   ` David Lang
2015-04-19  9:33   ` jb
2015-04-19 10:45     ` David Lang
2015-04-19  8:28 ` Alex Burr
2015-04-19 10:20 ` Sebastian Moeller
2015-04-19 10:46   ` Jonathan Morton
2015-04-19 16:30     ` Sebastian Moeller
2015-04-19 17:41       ` Jonathan Morton
2015-04-19 19:40         ` Sebastian Moeller
2015-04-19 20:53           ` Jonathan Morton
2015-04-21  2:56             ` Simon Barber
2015-04-21  4:15               ` jb
2015-04-21  4:47                 ` David Lang
2015-04-21  7:35                   ` jb
2015-04-21  9:14                     ` Steinar H. Gunderson
2015-04-21 14:20                     ` David Lang
2015-04-21 14:25                       ` David Lang
2015-04-21 14:28                         ` David Lang
2015-04-21 22:13                           ` jb
2015-04-21 22:39                             ` Aaron Wood
2015-04-21 23:17                             ` jb
2015-04-22  2:14                               ` Simon Barber
2015-04-22  2:56                                 ` jb
2015-04-22 14:32                       ` Simon Barber
2015-04-22 17:35                         ` David Lang
2015-04-23  1:37                           ` Simon Barber
2015-04-24 16:54                             ` David Lang
2015-04-24 17:00                               ` Rick Jones
2015-04-21  9:37                 ` Jonathan Morton [this message]
2015-04-21 10:35                   ` jb
2015-04-22  4:04                     ` Steinar H. Gunderson
2015-04-22  4:28                       ` Eric Dumazet
2015-04-22  8:51                         ` [Bloat] RE : " luca.muscariello
2015-04-22 12:02                           ` jb
2015-04-22 13:08                             ` Jonathan Morton
     [not found]                             ` <14ce17a7810.27f7.e972a4f4d859b00521b2b659602cb2f9@superduper.net>
2015-04-22 14:15                               ` Simon Barber
2015-04-22 13:50                           ` [Bloat] " Eric Dumazet
2015-04-22 14:09                             ` Steinar H. Gunderson
2015-04-22 15:26                             ` [Bloat] RE : " luca.muscariello
2015-04-22 15:44                               ` [Bloat] " Eric Dumazet
2015-04-22 16:35                                 ` MUSCARIELLO Luca IMT/OLN
2015-04-22 17:16                                   ` Eric Dumazet
2015-04-22 17:24                                     ` Steinar H. Gunderson
2015-04-22 17:28                                     ` MUSCARIELLO Luca IMT/OLN
2015-04-22 17:45                                       ` MUSCARIELLO Luca IMT/OLN
2015-04-23  5:27                                         ` MUSCARIELLO Luca IMT/OLN
2015-04-23  6:48                                           ` Eric Dumazet
     [not found]                                             ` <CAH3Ss96VwE_fWNMOMOY4AgaEnVFtCP3rPDHSudOcHxckSDNMqQ@mail.gmail.com>
2015-04-23 10:08                                               ` jb
2015-04-24  8:18                                                 ` Sebastian Moeller
2015-04-24  8:29                                                   ` Toke Høiland-Jørgensen
2015-04-24  8:55                                                     ` Sebastian Moeller
2015-04-24  9:02                                                       ` Toke Høiland-Jørgensen
2015-04-24 13:32                                                         ` jb
2015-04-24 13:58                                                           ` Toke Høiland-Jørgensen
2015-04-24 16:51                                                           ` David Lang
2015-04-25  3:15                                                       ` Simon Barber
2015-04-25  4:04                                                         ` Dave Taht
2015-04-25  4:26                                                           ` Simon Barber
2015-04-25  6:03                                                             ` Sebastian Moeller
2015-04-27 16:39                                                               ` Dave Taht
2015-04-28  7:18                                                                 ` Sebastian Moeller
2015-04-28  8:01                                                                   ` David Lang
2015-04-28  8:19                                                                     ` Toke Høiland-Jørgensen
2015-04-28 15:42                                                                       ` David Lang
2015-04-28  8:38                                                                     ` Sebastian Moeller
2015-04-28 12:09                                                                       ` Rich Brown
2015-04-28 15:26                                                                         ` David Lang
2015-04-28 15:39                                                                       ` David Lang
2015-04-28 11:04                                                                     ` Mikael Abrahamsson
2015-04-28 11:49                                                                       ` Sebastian Moeller
2015-04-28 12:24                                                                         ` Mikael Abrahamsson
2015-04-28 13:44                                                                           ` Sebastian Moeller
2015-04-28 19:09                                                                             ` Rick Jones
2015-04-28 14:06                                                                       ` Dave Taht
2015-04-28 14:02                                                                   ` Dave Taht
2015-05-06  5:08                                                               ` Simon Barber
2015-05-06  8:50                                                                 ` Sebastian Moeller
2015-05-06 15:30                                                                   ` Jim Gettys
2015-05-06 18:03                                                                     ` Sebastian Moeller
2015-05-06 20:25                                                                     ` Jonathan Morton
2015-05-06 20:43                                                                       ` Toke Høiland-Jørgensen
2015-05-07  7:33                                                                         ` Sebastian Moeller
2015-05-07  4:29                                                                       ` Mikael Abrahamsson
2015-05-07  7:08                                                                         ` jb
2015-05-07  7:18                                                                           ` Jonathan Morton
2015-05-07  7:24                                                                             ` Mikael Abrahamsson
2015-05-07  7:40                                                                               ` Sebastian Moeller
2015-05-07  9:16                                                                                 ` Mikael Abrahamsson
2015-05-07 10:44                                                                                   ` jb
2015-05-07 11:36                                                                                     ` Sebastian Moeller
2015-05-07 11:44                                                                                     ` Mikael Abrahamsson
2015-05-07 13:10                                                                                       ` Jim Gettys
2015-05-07 13:18                                                                                         ` Mikael Abrahamsson
2015-05-07 13:14                                                                                       ` jb
2015-05-07 13:26                                                                                         ` Neil Davies
2015-05-07 14:45                                                                                         ` Simon Barber
2015-05-07 22:27                                                                                           ` Dave Taht
2015-05-07 22:45                                                                                             ` Dave Taht
2015-05-07 23:09                                                                                             ` Dave Taht
2015-05-08  2:05                                                                                               ` jb
2015-05-08  4:16                                                                                                 ` David Lang
2015-05-08  3:54                                                                                               ` Eric Dumazet
2015-05-08  4:20                                                                                                 ` Dave Taht
2015-05-08 13:20                                                                                     ` [Bloat] DSLReports Jitter/PDV test Rich Brown
2015-05-08 14:22                                                                                       ` jb
2015-05-07  7:37                                                                             ` [Bloat] DSLReports Speed Test has latency measurement built-in Sebastian Moeller
2015-05-07  7:19                                                                           ` Mikael Abrahamsson
2015-05-07  6:19                                                                       ` Sebastian Moeller
2015-04-25  3:23                                                       ` Simon Barber
2015-04-24 15:20                                                     ` Bill Ver Steeg (versteb)
2015-04-25  2:24                                                   ` Simon Barber
2015-04-23 10:17                                             ` renaud sallantin
2015-04-23 14:10                                               ` Eric Dumazet
2015-04-23 14:38                                                 ` renaud sallantin
2015-04-23 15:52                                                   ` Jonathan Morton
2015-04-23 16:00                                                     ` Simon Barber
2015-04-23 13:17                                             ` MUSCARIELLO Luca IMT/OLN
2015-04-22 18:22                                       ` Eric Dumazet
2015-04-22 18:39                                         ` [Bloat] Pacing --- was " MUSCARIELLO Luca IMT/OLN
2015-04-22 19:05                                           ` Jonathan Morton
2015-04-22 15:59                               ` [Bloat] RE : " Steinar H. Gunderson
2015-04-22 16:16                                 ` Eric Dumazet
2015-04-22 16:19                                 ` Dave Taht
2015-04-22 17:15                                   ` Rick Jones
2015-04-19 12:14 ` [Bloat] " Toke Høiland-Jørgensen
  -- strict thread matches above, loose matches on Subject: below --
2015-04-19 12:56 jb
2015-04-19 13:10 ` Toke Høiland-Jørgensen
2015-04-19 13:53   ` jb
2015-04-19 15:38     ` Toke Høiland-Jørgensen
2015-04-19 16:38       ` Toke Høiland-Jørgensen
2015-04-19 17:15         ` Mikael Abrahamsson
2015-04-19 17:43           ` Dave Taht
2015-04-19 19:22             ` Dave Taht
2015-04-23 17:03               ` Dave Taht
2015-04-23 18:04                 ` Mikael Abrahamsson
2015-04-23 18:08                   ` Jonathan Morton
2015-04-23 20:19                   ` jb
2015-04-23 20:39                     ` Dave Taht
2015-04-24 21:45                     ` Rich Brown
2015-04-25  1:14                       ` jb
2015-04-23 21:44                   ` Rich Brown
2015-04-23 22:22                     ` Dave Taht
2015-04-23 22:29                       ` Dave Taht
2015-04-24  1:58                       ` Rich Brown
2015-04-24  2:40                         ` Dave Taht
2015-04-24  3:20                           ` Jim Gettys
2015-04-24  3:39                             ` Dave Taht
2015-04-24  4:04                               ` Dave Taht
2015-04-24  4:17                                 ` Dave Taht
2015-04-24 16:13                                   ` Rick Jones
2015-04-24  5:00                                 ` jb
2015-04-27 16:28                                   ` Dave Taht
2015-04-24 16:09                               ` Rick Jones
2015-04-24 13:49                         ` Pedro Tumusok
2015-04-23 22:51                     ` David Lang
2015-04-24  1:38                       ` Rich Brown
2015-04-24  4:16                   ` Mikael Abrahamsson
2015-04-24  4:24                     ` Dave Taht
2015-04-19 17:45           ` Toke Høiland-Jørgensen
2015-04-19 18:26             ` Jonathan Morton
2015-04-19 18:30               ` Toke Høiland-Jørgensen
2015-04-19 19:15                 ` Jonathan Morton
2015-04-20  3:15                 ` Aaron Wood
2015-04-20  7:00                   ` jb
     [not found]                     ` <CACQiMXbF9Uk3H=81at-Z9a2fdYKrRtRorSXRg5dBcPB8-aR4Cw@mail.gmail.com>
2015-04-20  8:11                       ` jb
2015-04-19 19:19             ` Mikael Abrahamsson
2015-04-19 21:57           ` Rich Brown
2015-04-19 23:21             ` jb
2015-04-20 14:51               ` David Lang
2015-04-20 15:51                 ` Dave Taht
2015-04-20 16:15                   ` Dave Taht
2015-04-19  0:57 Rich Brown
2015-04-19  4:01 ` Dave Taht
2015-04-20 14:33   ` Colin Dearborn
2015-04-19  8:29 ` Dave Taht
2015-04-19  8:38   ` Dave Taht
2015-04-19 12:21     ` jb
2015-04-19  9:17   ` MUSCARIELLO Luca IMT/OLN
2015-04-19 12:03     ` jb
2015-04-19 10:53 ` dikshie
2015-04-19 12:11   ` jb

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

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

  git send-email \
    --in-reply-to=CAJq5cE132nju1GE4NQbHh8ZzbA7PYKJh0GuyfGDvSkhLoaWd9w@mail.gmail.com \
    --to=chromatix99@gmail.com \
    --cc=bloat@lists.bufferbloat.net \
    --cc=justin@dslr.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