as for the tail loss/rto problem, doesn't happen unless we are already
in a drop state for a queue, and it doesn't happen very often, and
when it does, it seems like a good idea to me to so thoroughly back
off in the face of so much congestion.
fq_codel originally never dropped the last packet in the queue, which
led to a worst case latency of 1024 * mtu at the bandwidth. That got
fixed and I'm happy with the result. I honestly don't know what cake
does anymore except that jonathan rarely tests at real rtts where the
amount of data in the pipe is a lot more than what's sane to have
queued, where I almost always have realistic path delays.
It would be good to resolve this debate in some direction one day,
perhaps by measuring utilization > 0 on a wide range of tests.
Post by Dave Taht
"So there is no effect on other flows' latency, only subsequent
packets in the same flow - and the flow is always hurt by dropping
packets, rather than marking them."
Disagree. The flow being dropped from will reduce its rate in an rtt,
reducing the latency impact on other flows.
I regard an ideal queue length as 1 packet or aggregate, as "showing"
all flows the closest thing to the real path rtt. You want to store
packets in the path, not buffers.
ecn has mass. It is trivial to demonstrate an ecn marked flow starving
out a non-ecn flow, at low rates.
Post by Jonathan Morton Post by Sebastian Moeller Post by Jonathan Morton
The rationale for that decision still is valid, at low bandwidth every opportunity to send a packet matters…
Yes, which is why the DRR++ algorithm is used to carefully choose which flow to send a packet from.
Well, but look at it that way, the longer the traversal path after the cake instance the higher the probability that the packet gets dropped by a later hop.
That's only true in case Cake is not at the bottleneck, in which case it will only have a transient queue and AQM will disengage anyway. (This assumes you're using an ack-clocked protocol, which TCP is.)
Post by Sebastian Moeller Post by Jonathan Morton
…and every packet being transferred will increase the queued packets delay by its serialization delay.
This is trivially true, but has no effect whatsoever on inter-flow induced latency, only intra-flow delay, which is already managed adequately well by an ECN-aware sender.
I am not sure that I am getting your point…
Evidently. You've been following Cake development for how long, now? This is basic stuff.
Post by Sebastian Moeller
…at 0.5Mbps every full-MTU packet will hog the line foe 20+ milliseconds, so all other flows will incur at least that 20+ ms additional latency, this is independent of inter- or intra-flow perspective, no?.
At the point where the AQM drop decision is made, Cake (and fq_codel) has already decided which flow to service. On a bulk flow, most packets are the same size (a full MTU), and even if the packet delivered is the last one presently in the queue, probably another one will arrive by the time it is next serviced - so the effect of the *flow's* presence remains even into the foreseeable future.
So there is no effect on other flows' latency, only subsequent packets in the same flow - and the flow is always hurt by dropping packets, rather than marking them.
- Jonathan Morton
Bloat mailing list
CEO, TekLibre, LLC
CEO, TekLibre, LLC