[Bloat] sce materials from ietf
Jonathan Morton
chromatix99 at gmail.com
Fri Nov 29 20:39:42 EST 2019
> I don't see what you gain by going after the Prague requirements. They're internal requirements for a TCP that would fulfill the L4S goals if classified into the L4S side of a DualQ AQM: 'Packet Identification' means that the L4S AQM can identify L4S supporting flows. This seems like a distraction from your main pitch to me. It would seem better to compare against the actual goals of L4S (AFAICT, low latency at the 99th percentile, in the presence of Reno-compatible flows, with some fairness requirement which I increasingly don't understand).
We're certainly not treating the Prague Requirements as our only goals. We just looked over them and realised we do sufficiently well on them already to compare favourably against L4S. They are failing on their own merits. Like it or not, we are somewhat in competition with them in IETF space, so this sort of comparison should help to bolster our standing.
A brief summary of the Prague Requirements:
1: Packet Identifier.
We ID ourselves as RFC-3168 compliant using ECT(0), because we are.
L4S has to identify itself more specifically to the network, because it is *not* RFC-3168 compliant. It additionally relies on AQMs in the network understanding this distinction, which at present none do. We would much prefer that they use a DSCP for this purpose, but at present they use ECT(1).
2: Accurate ECN Feedback.
We use a spare bit in the header of TCP acks to feed back SCE marks, and the existing ECE/CWR mechanism from RFC-3168 unchanged for CE marks. The SCE feedback is "accurate" but not "reliable", because it can tolerate large errors (as much as 100% relative) without departing the control loop. The scheme is very simple and straightforward to implement at the receiver, and interpret at the sender.
L4S uses AccECN to give CE mark feedback that is both "accurate" and "reliable". It is a somewhat complex specification which takes over three TCP header bits, including the two used for RFC-3168 feedback.
3: TCP-friendly response to packet loss.
Both SCE and L4S do this without difficulty.
4: TCP-friendly response to RFC-3168 CE marking.
SCE does this by design, retaining the existing feedback mechanism for CE marks and implementing an RFC-8511 (ABE) compliant response in each of the TCP algorithms presented so far. We can do this easily because CE and SCE information from the network is unambiguous.
L4S presently does not do this, largely because CE marks from RFC-3168 AQMs are not easily distinguished vice CE marks from an L4S AQM. They seem to be working on some sort of solution, but it has not yet been demonstrated to work, and their paper describing it leaves a lot of open questions (including tuning constants). That we saw no demonstration of it at IETF-106 (indeed they even skipped over their planned talk on it in a side session dedicated to L4S) suggests to me that they found flaws that were difficult to overcome at short notice, and possibly even managed to look bad next to our demonstration of jitter tolerance at the Hackathon.
This point has always been the main difference between L4S and SCE.
5: Reduced RTT dependence
This is a mathematically interesting requirement which, at present, neither L4S nor SCE meets.
Fundamentally, any two flows following the same congestion-signal response which makes average cwnd dependent solely on marking probability, and which share the same bottleneck queue and AQM and therefore experience the same marking probability, will converge to the same average cwnd and their relative throughputs will therefore be inversely proportional to their RTTs. This adequately describes both the pure AIMD response of Reno, and the so-called 1/p response of DCTCP (which TCP Prague apes slavishly).
The steady-state cwnd formula for CUBIC, however, is a function of both p(CE) and RTT, such that its throughput should be proportional to the reciprocal quartic root of RTT, rather than linearly reciprocal. This assumes that CUBIC is not in its Reno compatibility regime, of course. So CUBIC is the standard to beat, or at least match, for this requirement.
As I mentioned, I have an idea for how to do this. I've seen no evidence that the L4S team have any equivalent ideas; again, they're failing their own requirements.
6: Scale down to fractional effective cwnd.
We technically achieve this with our preferred choice of pacing parameters, reducing send rate to 80% of a segment per RTT at the min-cwnd of 2 segments. We could easily do better with different pacing ratios.
L4S have apparently implemented a packet size adjustment. We haven't tried it out yet, but we'll take their word for it for the moment. There's no inherent technical reason why we couldn't do the same.
7: Reordering tolerance on time basis (ie. RACK).
Both SCE and L4S inherit this capability from the Linux TCP stack, so it's not a problem. FreeBSD also has a RACK compliant TCP stack which is being stabilised.
Other criteria which we are actively considering are listed in, for example, RFC-5033. That makes a fun read if you're a masochist; I wonder about Pete sometimes. :-)
- Jonathan Morton
More information about the Bloat
mailing list