The GEA problem sure, but if its there is a single-threaded performance problem on other backhauls, that changes things a bit.
I do wonder still about whether some of the differences seen on various speed testers and servers ends up significantly related to single thread performance.
For instance, if a certain speedtest app only uses, say, 4 connections, and 4 connections along a given route maxes out at a total of x throughput, then that would result in a speedtest of x.
If another server single threaded route is much more capable, then you may see much higher performance. Further more, this may explain differences between different apps / web pages targeting the same servers if the apps have a different threading strategy.
I noted this with Zen's speedtest server vs the Voicehost one earlier. Via the web, the Zen speedtest server was only allowing me around 200Mbps, whereas the Voicehost Norwich one was doing single threads at 800Mbps.
Digging into this a bit more from the command line, where I'm happier, axel is a multithreaded capable HTTP downloader. Using different numbers of threads to download big TBB test file:
01 = 38MB/sec.
03 = 50MB/sec.
05 = 59MB/sec.
10 = 71MB/sec.
20 = 80MB/sec.
30 = 88MB/sec.
40 = 93MB/sec.
I was surprised by the almost unfeasibly large number of connections required to approach line rate here.
(Command line used is (where -n 40 is 40 connections):
rm 512MB.zip ; time axel -U Chrome -n 40 -v -a -o 512MB.zip http://ipv4.download.thinkbroadband.com/512MB.zip
I saw your point earlier that this is fine as web browsers are generally multithread. Of course, not everything can be multithreaded (eg VPN connections).
Interesting to see how variable it is. For example, I often get single threaded connections to this Ubuntu download link via axel at 83MB/sec:
rm bigfile ; time axel -n 1 -v -a -o bigfile https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-desktop-amd64.iso?_ga=2.63790191.1176441848.1661034061-697000926.1661034061
(The TBB downloads appear to need a webbrowser useragent to download, but most others are fine with Axel providing it's own useragent, hence the difference in the commandlines above).