Jonathan Morton wrote:

On 29 Apr, 2017, at 01:26, Andy Furniss <[email protected]>
wrote:

As I understand it, increase in RTT due to queueing of
packets is the main feedback mechanism for BBR. So dropping
packets, which I already consider harmful, is really harmful
with BBR because you're not telling the sender to slow down.

Actually, BBR considers mainly a measurement of “delivery rate”, and
paces its sending to match that.  It does *not* primarily rely on a
congestion window as most TCPs do; one is provided only as a safety
net of last resort.

Measurements of RTT are mostly used for two purposes: to size the
congestion window so that it doesn’t interfere with normal operation;
and to estimate when “queue draining” is complete after a bandwidth
probe cycle.

Interesting.


If BBR does not slow down when packets are dropped, it's too hostile to use on a public network. The only way for a public network to respond to a flood of traffic higher than what it
can handle is to drop packets (with a possible warning via ECN
shortly before packets get dropped). If BBR doesn't slow down,
it's just going to be wasting bandwidth.

No it isn't. Packet loss does not equal conguestion - it never
did. Dropping packets to signal congestion is an ugly hack for
implementations that are too dumb to understand any proper
congestion control mechanism.

Hmm, I bet a lot of carrier links are policed rather than smart
queue.

Policing should theoretically produce a consistent delivery rate,
which is what BBR needs to work effectively.  A wrinkle here is that
most policers and shapers to date rely on a token-bucket algorithm
which permits bursts at rates well above the policy, and BBR has to
attempt to infer the policy rate from the medium-term behaviour.

Ok, but it's not really going to work (be fair) when a big link with
000s of users is policed overall. Of course this shouldn't really happen
- but contention exists at ISP level and local level for DOCSIS cable users.

It also seems (OK one quick possibly flawed test), that bbr ignores
ECN as well as drops in the sense that marked is just as high as
dropped.

Yes, BBR ignores ECN, which I consider to be an unfortunate feature;
it could quite reasonably be used to terminate bandwidth probes
early, before they build up a significant queue (which then needs to
be drained).

Now that is unfortunate - so ECN is effectively deprecated by BBR :-(


Cake works very well with BBR, provided it is deployed at the
upstream end of the bottleneck link.  In this position, Cake happily
absorbs the temporary standing queue caused by bandwidth probes, and
the deficit-mode shaper means that BBR tends to see a consistent
delivery rate, which it considers ideal.  In practice it matters
little whether the BBR sender negotiates ECN or not, in this case.

When deployed at the downstream end of the bottleneck link, Cake
works less well with BBR - but that’s true to some extent of all
TCPs.  In ingress mode, at least, dropping packets effectively causes
a reduction in the delivery rate, which should influence BBR more
strongly to correct itself.  But if ECN is negotiated, these packet
drops do not occur.  In both cases, the temporary standing queue
collects in the upstream dumb queue, unless Cake is configured to a
conservative enough margin below the bottleneck rate.  Cake does
everything it reasonably can here, but the topology is fundamentally
unfavourable.

Further testing with the aim of reducing drops seems to indicate that
it's not so much target that matters but RTT.

Each output two netperf (x5) runs one marked cs1, one unmarked.

Sending through bulk with higher target and best effort with lower
target isn't much different. Using ingress param for this test, tcp
throughput is low 1.6 mbit (x5)

qdisc cake 1: dev ifb0 root refcnt 2 bandwidth 16Mbit diffserv3 dual-srchost ingress rtt 100.0ms atm overhead 40 via-ethernet
 Sent 20770678 bytes 13819 pkt (dropped 9485, overlimits 36449 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 153Kb of 4Mb
 capacity estimate: 16Mbit
                 Bulk   Best Effort      Voice
  thresh         1Mbit      16Mbit       4Mbit
  target        18.2ms       5.0ms       5.0ms
  interval     113.2ms     100.0ms      10.0ms
  pk_delay      13.0ms       9.6ms         0us
  av_delay      10.0ms       3.9ms         0us
  sp_delay         6us        13us         0us
  pkts           11654       11650           0
  bytes       17565164    17563044           0
  way_inds           0           0           0
  way_miss          10          10           0
  way_cols           0           0           0
  drops           4511        4974           0
  marks              0           0           0
  sp_flows           4           5           0
  bk_flows           2           0           0
  un_flows           0           0           0
  max_len         1514        1514           0

With RTT at 300ms throughput is 2.33 mbit and less drops for similar target.

qdisc cake 1: dev ifb0 root refcnt 2 bandwidth 16Mbit diffserv3 dual-srchost ingress rtt 300.0ms atm overhead 40 via-ethernet
 Sent 31265716 bytes 20758 pkt (dropped 2563, overlimits 43619 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 153Kb of 4Mb
 capacity estimate: 16Mbit
                 Bulk   Best Effort      Voice
  thresh         1Mbit      16Mbit       4Mbit
  target        18.2ms      15.0ms      15.0ms
  interval     303.2ms     300.0ms      30.0ms
  pk_delay      21.2ms      20.1ms         0us
  av_delay      18.9ms      17.0ms         0us
  sp_delay         4us         7us         0us
  pkts           11656       11665           0
  bytes       17564952    17579378           0
  way_inds           0           0           0
  way_miss          10          10           0
  way_cols           0           0           0
  drops           1206        1357           0
  marks              0           0           0
  sp_flows           5           5           0
  bk_flows           0           1           0
  un_flows           0           0           0
  max_len         1514        1514           0

It's even better for loss/throughput (2.44 x5) with higher rtt.

qdisc cake 1: dev ifb0 root refcnt 2 bandwidth 16Mbit diffserv3 dual-srchost ingress rtt 400.0ms atm overhead 40 via-ethernet
 Sent 32594660 bytes 21626 pkt (dropped 1677, overlimits 44556 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 153Kb of 4Mb
 capacity estimate: 16Mbit
                 Bulk   Best Effort      Voice
  thresh         1Mbit      16Mbit       4Mbit
  target        20.0ms      20.0ms      20.0ms
  interval     400.0ms     400.0ms      40.0ms
  pk_delay      21.9ms      20.3ms         0us
  av_delay      19.7ms      18.8ms         0us
  sp_delay         4us         4us         0us
  pkts           11640       11663           0
  bytes       17550552    17583086           0
  way_inds           0           0           0
  way_miss          10          10           0
  way_cols           0           0           0
  drops            836         841           0
  marks              0           0           0
  sp_flows           5           5           0
  bk_flows           0           1           0
  un_flows           0           0           0
  max_len         1514        1514           0


I haven't yet tried cooking up a test that includes a double
queue one 10% faster fifo to see how much the latency is affected.
_______________________________________________
Cake mailing list
[email protected]
https://lists.bufferbloat.net/listinfo/cake

Reply via email to