[Starlink] Starlink hidden buffers

David Lang david at lang.hm
Sat May 13 18:57:56 EDT 2023


On Sat, 13 May 2023, Ulrich Speidel via Starlink wrote:

> Here's a bit of a question to you all. See what you make of it.
>
> I've been thinking a bit about the latencies we see in the Starlink 
> network. This is why this list exist (right, Dave?). So what do we know?
>
> 1) We know that RTTs can be in the 100's of ms even in what appear to be 
> bent-pipe scenarios where the physical one-way path should be well under 
> 3000 km, with physical RTT under 20 ms.
> 2) We know from plenty of traceroutes that these RTTs accrue in the 
> Starlink network, not between the Starlink handover point (POP) to the 
> Internet.
> 3) We know that they aren't an artifact of the Starlink WiFi router (our 
> traceroutes were done through their Ethernet adaptor, which bypasses the 
> router), so they must be delays on the satellites or the teleports.

the ethernet adapter bypasses the wifi, but not the router, you have to cut the 
cable and replace the plug to bypass the router

> 4) We know that processing delay isn't a huge factor because we also see 
> RTTs well under 30 ms.
> 5) That leaves queuing delays.
>
> This issue has been known for a while now. Starlink have been innovating 
> their heart out around pretty much everything here - and yet, this 
> bufferbloat issue hasn't changed, despite Dave proposing what appears to 
> be an easy fix compared to a lot of other things they have done. So what 
> are we possibly missing here?
>
> Going back to first principles: The purpose of a buffer on a network 
> device is to act as a shock absorber against sudden traffic bursts. If I 
> want to size that buffer correctly, I need to know at the very least 
> (paraphrasing queueing theory here) something about my packet arrival 
> process.

The question is over what timeframe. If you have a huge buffer, you can buffer 
10s of seconds of traffic and eventually send it. That will make benchmarks look 
good, but not the user experience. The rapid drop in RAM prices (beyond merely 
a free fall) and the benchmark scores that heavily penalized any dropped packets 
encouraged buffers to get larger than is sane.

it's still a good question to define what is sane, the longer the buffer, the 
mor of a chance of finding time to catch up, but having packets in the buffer 
that have timed out (i.e. DNS queries tend to time out after 3 seconds, TCP will 
give up and send replacement packets, making the initial packets meaningless) is 
counterproductive. What is the acceptable delay to your users?

Here at the bufferbloat project, we tend to say that buffers past a few 10s of 
ms worth of traffic are probably bad and are aiming to single-digit ms in many 
cases.

> If I look at conventional routers, then that arrival process involves 
> traffic generated by a user population that changes relatively slowly: 
> WiFi users come and go. One at a time. Computers in a company get turned 
> on and off and rebooted, but there are no instantaneous jumps in load - 
> you don't suddenly have a hundred users in the middle of watching 
> Netflix turning up that weren't there a second ago. Most of what we know 
> about Internet traffic behaviour is based on this sort of network, and 
> this is what we've designed our queuing systems around, right?

not true, for businesses, every hour as meetings start and let out, and as 
people arrive in the morning, arrive back from lunch, you have very sharp 
changes in the traffic.

at home you have less changes in users, but you also may have less bandwidth 
(although many tech enthusiasts have more bandwidth than many companies, two of 
my last 3 jobs have had <400Mb at their main office with hundreds of employees 
while many people would consider that 'slow' for home use). As such a parent 
arriving home with a couple of kids will make a drastic change to the network 
usage in a very short time.

but the active quueing systems that we are designing (cake, fq_codel) handle 
these conditions very well because they don't try to guess what the usage is 
going to be, they just look at the packets that they have to process and figure 
out how to dispatch them out in the best way.

because we have observed that latency tends to be more noticable for short 
connections (DNS, checking if cached web pages are up to date, etc), our 
algorithms give a slight priority to new-low-traffic connections over 
long-running-high-traffic connections rather than just splitting the bandwidth 
evenly across all connections, and can even go further to split bandwith between 
endpoints, not just connections (with endpoints being a configurable definition)

without active queue management, the default is FIFO, which allows the 
high-user-impact, short connection packets to sit in a queue behind the 
low-user-impace, bulk data transfers. For benchmarks, a-packet-is-a-packet and 
they all count, so until you have enough buffering that you start having expired 
packets in flight, it doesn't matter, but for the user experience, there can be 
a huge difference.

David Lang


More information about the Starlink mailing list