Hi Sebastian -
regarding slow start and video, I was just thinking and I came up with a 
possible answer regarding the slow start issue compatible with the Internet 
architecture. Read the whole piece below, I hope it makes sense.
Since the "bottleneck link" in Starlink will almost certainly be the downlink 
shared among multiple dishys, which to me is like the CMTS in a cable modem 
system, I think the reasoning is more general than Starlink.  Oddly, :-) the 
idea has to do with AQM and TCP flow control. Our common interest.
 
It's a concept, not a full implementation. It doesn't require massive 
rethinking of the whole Internet. Which means, unlike the QUIC project, it can 
be experimented with in just a part of the Internet, but would require a 
video-server partner and a bottleneck-link operator partner.
 
Please steal and improve if you like it.
 
- David
 
> Date: Thu, 1 Sep 2022 09:58:16 +0200

> From: Sebastian Moeller <[email protected]>
> To: Ulrich Speidel <[email protected]>
> Cc: David Lang <[email protected]>, Ulrich Speidel via Starlink
> <[email protected]>
> Subject: Re: [Starlink] Starlink "beam spread"
 
<snip>
> I am prepared to eat crow on this in the future, but I am highly skeptical 
> about
> CDNs in space (in spite of it being a cool project from the technological 
> side).
>
You and me both...
> 
> *) As it looks slow start is getting a bad rep from multiple sides, but I see 
> not
> better alternative out there that solves the challenge slow-start tackles in a
> better way. Namely gradual ramping and probing of sending rates/congestion 
> windows
> to avoid collapse, this in turn means that short flows will never reach 
> capacity,
> the solution to which might well be, use longer flows then...


I'm old enough to remember how the TCP slow start problem was first dealt with 
in HTTP pretty well (good enough for the time, and focused on the end-to-end 
picture of the WWW architecture (REST).
My friend Jim Gettys was involved, as were a couple of others - I think Jeff 
Mogul, too.
 
The answer was HTTP 1.1. That is, using a single TCP flow for all HTTP requests 
to a server. That would increase the flow to get through slow start more 
quickly (aggregating many flows) and holding the flow open, assuming (almost 
always correctly) that between the user's clicks and the multiple parts of 
content, this would keep the flow out of slow start. (HTTP 1.1's multiplexing 
of requests onto a single TCP flow had other advantages, too - OS Internet 
stacks couldn't handle many simultaneous HTTP connections, adding more delay 
when a web page was sourced from many servers).
 
As far as "pretty good" solution Akamai also solved the bulk of the Web's  
problem - NOT by caching at all, but by letting ISPs *purchase* server capacity 
closer to the bulk of their consumers, and letting that *purchased* capacity 
pay for Akamai's costs. This moved the function of what to cache "out of the 
network" to the edge, and didn't require ANY changes to HTTP (in fact, it 
tended to concentrate more traffic into a single HTTP 1.1 flow, to a shared 
Akamai server.
 
You may not see where I'm going with this yet - but actually it's an End-to-End 
Argument against putting "function into the network" when the function is about 
the end points. With HTTP 1.1, a small change *at the endpoints of the Web* was 
easier and simpler than some hypothetical "intelligence" in the network that 
would obviate "slow start". With Akamai, a small change that allowed heavily 
trafficed web services to "buy server capacity" in Akamai's server fabric, 
which was "at the endpoints of the Internet" itself just distributed around the 
edges of the Internet was good enough.
 
So, let's look at video traffic. Well, first of all, any response time needs it 
has is mostly fixed by buffering at the receiver. Not needing any fixes "in the 
network" - you want to receive video, allocate a big buffer and fill it at the 
start. (This is where slow start gets in the way, perhaps).
I'm pretty sure *most* video watching doesn't go over RTP anymore - it goes 
over TCP now. [Dropped frames are interpolated, but instead retransmitted, 
because the buffer is sufficient in all video watching gear at the viewing end. 
RTP is useful for two-way videoconferencing, but that's because conferencing 
has the 100 msec. need for RTT, unless you are conferencing with Mars or the 
Moon.]
 
So "slow start" of some sort is the current solution that deals with the 
congestion burst that would disrupt others early in a video watching session.
 
But I think you are right - there are better ways to deal with the shared 
bottleneck link that a new video session might encounter. - something like slow 
start is needed ONLY if the bottleneck is *shared* among multiple users.
 
The problem is the potential of "starvation" of other flows at the bottleneck 
link along the video's path.
 
And this is a problem we now have one partial solution for, but it's not 
deployed where it needs to be. That is, in a word - "fair" queuing plus 
aggressive packet dropping (and maybe aggressive ECN marking). Notice I say it 
needs to be at the *bottleneck link*, not the home router, which isn't the 
bottleneck in practice.
Now "fair" queueing's most important property is that it eliminates starvation 
or (near starvation) caused by one flow against another.
 
And the key about putting it in the bottleneck link (with packet drops being 
the default means of signalling incipient congestion) is that the bottleneck 
link is the only place in the network where any computer knows what the 
competing traffic is. You need to somehow get both the new flow and the 
competing flows to negotiate a new "fair" balance of usage, without building up 
unacceptable queueing delay.
 
So where is the "bottleneck link" today?  Well, in cable Internet, it's the 
CMTS almost all the time. That is, not at the premises of the watcher. This is 
where the congestion needs to be signalled to ALL users from. Some need to slow 
down (including the new video watching stream, which has to slow down relative 
to what it is asking for which is to fill up the buffer as fast as possible 
when you start watching).
 
The problem with video watching is that when you tune to a new video, you want 
the buffer to fill "as fast as possible", but the others sharing the Internet 
resources don't want to be "starved". They want "fair" queuing (not Harrison 
Bergeron fairness - look that up), but a "best efforts" (to use the Cerf and 
Kahn phrase) fairness, which is non-starvation.
 
But fair queueing only works if the sources of the traffic cut their rate as a 
result of congestion signalling.
The real "fairness" requires pushing the problem to the endpoints. It's an 
end-to-end argument. That's why we need to replace "slow start" gradually with 
something better.
 
I don't know what the better thing is, but it needs to trigger the AQM 
mechanism more quickly than does slow start (including causing early signals to 
the sharers of the bottleneck link).
If we assume that packet drops are the only effective signals (because ECN just 
has failed to be sufficiently widely deployed - a problem that really, really 
bothers me), that means that during the initial phase of a TCP session you need 
some packets to get dropped between source and sink, and also some packets on 
the competing flows to get dropped. But you don't want too much multiplicative 
decrease to be triggered in the AIMD control loop of the TCPs involved (or in 
the QUIC control loops whatever they may be).

So ideally, a single very high-speed burst of noise packets sent over a period 
of say 10msec. This would probably only cause a single round of Multiplicative 
Decrease. These "noise packets" could be all duplicates of the same packet, and 
would thus not require retransmission. But they'd trigger a brief moment of 
congestion.
_______________________________________________
Starlink mailing list
[email protected]
https://lists.bufferbloat.net/listinfo/starlink

Reply via email to