Bizarre verschil tussen download en upload

Cambrium connectie:

# curl http://speedtest.tele2.net/1GB.zip -o /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1024M  100 1024M    0     0   100M      0  0:00:10  0:00:10 --:--:-- 99.0M

Dan ander testje op dezelfde hardware:

# curl http://speedtest.tele2.net/1GB.zip -o 1GB.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1024M  100 1024M    0     0  89.6M      0  0:00:11  0:00:11 --:--:-- 65.8M

Zelfde systeem (wired verbinding, geen wifi), … in het eerste geval meet je de NETWERK snelheid,
in het Tweede geval meet je de snelheid van NETWERK + DISK … . (in mijn geval een 6gbps Sata, met ruim vrije diskruimte)…
Dus test svp ZONDER naar een schijf te schrijven (ten minste als je netwerk snelheden wil meten: -o /dev/null ).
Als je meerder streams parallel wil testen kun je ze allemaal naar /dev/null laten schrijven.
Schijf bandbreedte is niet alleen afhankelijk van de schijf snelheid, maar ook van Filesystem performance, buffering in het File IO systeem, en hoe vol (en ook gefragmenteerd) een filesystem is.

Overigens is testen met iperf3 of netio vele malen beter. Daar is aan beide zijden GEEN filesystem bij betrokken.
curl … -o /dev/null gaat nog wel door de IOhandler van Linux/Unix/… whatever heen.

Met disk speed zit het wel goed :wink:

➜  ~ dd if=/dev/urandom of=test.bin bs=16m count=128
128+0 records in
128+0 records out
2147483648 bytes transferred in 6.442395 secs (333336229 bytes/sec)

Ook al zit het met de disk speed wel goed copy commando’s werken strict.
read from source, write to dest, read from sour, write to dest… until end of source.
En er is geen overlap op programma niveau, mogelijk een beetje op disk cache, maar die ook maar een paar MB.

Dat is ALTIJD slechter dan: read from source, read fro source, read from source… hoe snel je schijf ook is.
In schijf snelheid zit niet alleen ruwe disk speed, maar ook zoeken in de lijst naar vrije blokken (meest al find first) , veel al zoeken in bitmaps. Administratie bijwerken (sycnhroon) wachten to de File bitmap bij gewerkt is op schijf en dan pas data op gaan slaan…
Be denk dat voor elk blok van ~ 4K naar schijf schrijven je mogelijk wel 2-10 maal een IO moet doen. Zelfs SSD vertraagd.
Dus OF= null device = geen allocatie , maar nog wel dummy write() naar het OS met de vele context switches.
Dus (nogmaals) geen write is best… ==> netio of iperf3.
/dev/urandom is nog relatief traag, en beperkt, die geeft na 32 MiB op, gebruik liever /dev/zero als bron van data.
En als je over de buffer size heen gaat (160MiB block) wordt het gelijk trager.

xx ~ # dd  if=/dev/urandom of=16m.bin bs=16M count=1
1+0 records gelezen
1+0 records geschreven
16777216 bytes (17 MB, 16 MiB) gekopieerd, 0.0940867 s, 178 MB/s
xx ~ # dd  if=/dev/zero of=16m.bin bs=16M count=1
1+0 records gelezen
1+0 records geschreven
16777216 bytes (17 MB, 16 MiB) gekopieerd, 0.0484626 s, 346 MB/s
xx ~ # dd  if=/dev/zero of=16m.bin bs=160M count=1
1+0 records gelezen
1+0 records geschreven
167772160 bytes (168 MB, 160 MiB) gekopieerd, 1.91121 s, 87.8 MB/s
xx ~ # dd  if=/dev/urandom of=16m.bin bs=160M count=1
0+1 records gelezen
0+1 records geschreven
33554431 bytes (34 MB, 32 MiB) gekopieerd, 0.222726 s, 151 MB/s

Invloed van disk allocatie: (overschrijven van bestaand bestand is sneller dan van een nieuw bestand).

~ # dd  if=/dev/zero of=16m.bin bs=160M count=1
1+0 records gelezen
1+0 records geschreven
167772160 bytes (168 MB, 160 MiB) gekopieerd, 0.556951 s, 301 MB/s
1 like

Oke, goed verhaal, maar zoals je in mijn eerdere posts kan zien heb ik OOK iPerf gebruikt, en schrijf ik data direct weg naar /dev/null. Dit is overduidelijk geen probleem met disks.

En als je op ethernet zit, hardwired dus?

Misschien moet dit topic maar worden samengevoegd met:

Het lijkt bij mij ook echt alleen op de downstreams fout te gaan. Zoals ik in het andere topic ook zeg, iets met QoS ofzo?

Het lijkt wel iets beter de afgelopen dagen. Dit is een speedtest met een enkele connectie:

12717775034

curl:

➜  ~ curl http://speedtest.tele2.net/1GB.zip -o /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 32 1024M   32  329M    0     0  80.8M      0  0:00:12  0:00:04  0:00:08 80.8M

SCP:

1gb.bin 59%  607MB  46.2MB/s   00:09 ETA

De rare verschillen tussen download- en upload snelheden hebben onze volle aandacht. Het is een heel lastig probleem omdat we niet zelf de problemen kunnen reproduceren. Maar dat er problemen reëel zijn is ons meer dan duidelijk.

Na inventariseren van de klachten lijken deze zich te beperken tot gigabit aansluitingen op het KPN access-netwerk. We hebben een aantal kandidaat-oorzaken bedacht en zijn die voor zover als we kunnen aan het uitsluiten. Het onderhoud van vannacht is een netwerk-element uitgesloten en we gaan kijken of dit effect heeft. Zo niet dan gaan we verder met het verprutsen van onze nachtrust.

Ook hebben we inmiddels zelf twee privacy-vriendelijke speedtestservers. Door te testen met deze servers kunnen we upstream en peering buiten beschouwing laten. We hebben de servers inmiddels op twee verschillende plekken in het netwerk zitten waardoor we ook weer een aantal elementen kunnen uitsluiten mochten er duidelijke verschillen te zien zijn in resultaten tussen de twee servers.

Die speedtestservers behoeven nog meer werk. Zo hoop ik dat we in de loop van de dag ook HTTP (naast HTTPS) kunnen doen om TLS-overhead weg te werken. Ook zullen we op servers sparse files ter download met curl of wget gaan aanbieden. Ook moeten de servers nog verschillende hostnames voor IPv4, en IPv6 in DNS te krijgen.

Desalniettemin is het al nuttig om speedtests te doen met onze servers. Daarbij zou een packet-trace (packet capture) helemaal handig zijn. We maken deze ook op de speedtest servers van het http(s) verkeer. Mogelijk leveren vergelijkingen tussen de twee kanten van de verbindingen inzage in eventuele oorzaken in de access-netwerken die niet onder ons beheer zijn.

De speedtestserver zijn te vinden via: https://speedtest.freedom.nl

Packet traces kun je eventueel uploaden via:

6 likes

Jullie hebben mij ook benaderd om te assisteren met tests (gigabit, KPN) en dat is echt top.

Ik ga vanavond voor jullie aan de slag.

Hoewel momenteel alles eigenlijk goed lijkt te werken heb ik toch een baseline test gedaan:

Van allebei heb ik ook ongefilterde .pcap’s geupload. Als ik weer een keer problemen heb zal ik hetzelfde doen!

server1 https://speedtest.freedom.nl/results/?id=01FVEXZFZD76PZMS2EE1QV5T92
server2 https://speedtest.freedom.nl/results/?id=01FVEY12FF6K60QJNFHXMYHQZ8

“alle files” heb ik uploaded naar Nextcloud (is een andere url die ik al had gekregen van freedom helpdesk)

Hoe werkt die cap eigenlijk? Ik heb een 200/200 abo, maar zie ook grote verschillen in up- en download:

image

Ik krijg heel vreemde cijfers die niet stroken met wat ik elders kan wegtrekken.

Voorbeeld: https://speedtest.freedom.nl/results/?id=01FVF6X1M43WMKJTZXC8VHV9BK

terwijl ik een platte download elders vrolijk doe op ruim 100MByte/sec op m’n 1Gbit Glasvezel.
(nu kan dat natuurlijk wat zeggen over mijn tussenliggende infra die https zou afknijpen etc.etc.).

$ wget -O /dev/null http://speedtest.tele2.net/1GB.zip
--2022-02-09 13:22:30--  http://speedtest.tele2.net/1GB.zip
Resolving speedtest.tele2.net (speedtest.tele2.net)... 90.130.70.73, 2a00:800:1010::1
Connecting to speedtest.tele2.net (speedtest.tele2.net)|90.130.70.73|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1073741824 (1,0G) [application/zip]
Saving to: ‘/dev/null’

/dev/null                                       100%[=====================================================================================================>]   1,00G   111MB/s    in 9,9s    

2022-02-09 13:22:40 (104 MB/s) - ‘/dev/null’ saved [1073741824/1073741824]

Het lijkt mij sws handiger om bij speedtest, de overhead t.a.v. protocollen sws buiten het (af)schot te laten.

Zulke sparse file downloads komen er ook op.

Maar juist packet captures van de speedtests met rare uitkomsten zijn super interessant. Jitter van 368ms zegt mogelijk iets over buffer-problemen of extreme shaping. Helemaal omdat je ze niet hebt met in dit geval Tele2.

Hier in Hoofddorp ziet het er prima uit, alhoewel de getallen vlak na overstap van xs4all naar freedom beter waren. Resultaten fluctueren met +/- 30 Mbit/s.

Ping / jitter: 5 / 33.38 ms
Down / Up: 928 / 909 Mbit/s

$ wget -O /dev/null http://speedtest.tele2.net/1GB.zip
...
/dev/null           100%[===================>]   1,00G  94,0MB/s    in 10s

OK, nieuwe test gedaan… (file:pcaptest-09feb22-16u57.speedtest.server2.freedom.nl.pcapng uploaded to cloud ) en de jitter is iig minder.

Lijkt op en in lijn met andere soortgelijke speedtests… Download 118.74 , Upload 206.17

Doorvoer lijkt substantieel minder dan ik plat elders (be)haal. ter verificatie ook maar eentje van xs4all gedaan.

$ wget -O /dev/null http://speedtest.tele2.net/1GB.zip
--2022-02-09 17:14:21--  http://speedtest.tele2.net/1GB.zip
Resolving speedtest.tele2.net (speedtest.tele2.net)... 90.130.70.73, 2a00:800:1010::1
Connecting to speedtest.tele2.net (speedtest.tele2.net)|90.130.70.73|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1073741824 (1,0G) [application/zip]
Saving to: ‘/dev/null’

/dev/null                                       100%[=====================================================================================================>]   1,00G  96,9MB/s    in 10s     

2022-02-09 17:14:31 (103 MB/s) - ‘/dev/null’ saved [1073741824/1073741824]

$ curl -o /dev/null http://download.xs4all.nl/test/2gb.bin
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1907M  100 1907M    0     0   107M      0  0:00:17  0:00:17 --:--:--  106M

Beide speren plat op > 100MByte/sec, daarentegen gaan de speedtests hopeloos slechter op nog geen 15-20% van de platte waarde. Ergens gaat er wmb dus (flink) wat mis ???
Terzijde, hoor je mij vooralsnog niet klagen omdat ik kom van destijds een 50mbit@xs4al en toe letterlijk niet verder kwam (oop op speedtest) dan 4-5MByte/sec.

Kan het zijn dat het netwerkverkeer via verschillende interfaces verloopt (kabel, wifi)?

Nope, alles hier per kabel, zitten wel een paar switches tussen. Het enige dat ik mij, als het al aan mijn spullen ligt, dat dan de “s” in “https” de boosdoener is. Hoewel ik mij dat moeilijk kan voorstellen dat sec TLS (daarvan) de oorzaak is.

In het verleden ook al 's geprobeerd met een rechstreekse PPPoE vanuit een i7/32GB Ubuntu met dezelfde speedtest resultaten. Indertijd dat ik (ooit) nog 500Mbit had van xs4all, had ik trouwens nooit issues. Later heb ik die verbinding kostentechnisch teruggebracht naar 50Mbit, wat sinds Freedom dus weer 1Gbit is.
Zelf heb ik de meeste fiducie in plat - zonder liflaf of protocol - downloaden van een binair bestand.

Het intrigeert wel.

Terzijde, heb ik het niet zo op de of Java/html/browser gecontroleerde testen. Meermalen meegemaakt dat de tussenligende software dan een (te grote) rol gaat spelen. Met Chrome krijg ik dan bv dan het dubbele van de (sws) beroerde snelheid via FireFix.

Gigabit, KPN Netwerk, AON.

Dit zijn tests zojuist vanaf mijn router.

Dat ziet er al aardig uit op een uitzondering na. Ik heb het idee dat er verbetering zichtbaar is. De iPerf3 met Serverius voer ik vaker uit en is normaal gesproken stabieler en beter.

Vanmiddag had ik een laptop rechtstreeks aan deze pfSense router gekoppeld en heb wat tests gedraaid op de twee speedtest servers van Freedom. Daar bleef upload achter echter kan dat zomaar een andere reden hebben.

Ik moet nog wat meer gerichte tests doen. Heb af en toe nog het idee dat vooral downloads via HTTP of HTTPS traag zijn.

Complexe materie om te troubleshooten, zeker voor Freedom. Zo ontzettend veel factoren in het spel.

Yep, wat zou helpen is om een baseline te hebben of te (ver)krijgen. Wat ik bij jou dan weer niet snap, is jouw trage upload, die bij mij viua die tooling juist weer beter is dan de brakke download.

Met respect voor al die kèkke webtools en deels ook iPerf, lijkt het mij verwarrend om uit te gaan van tools die data verwerken en/of rapporteren. Bij een bedrijf waar ik (ooit) betrokken was, ook al 's meegemaakt dat die (like Dieselgate) de SLA-performance daarop als bewijs ging tunen. Klagende gebruikers werden weggezet als zeurpieten omdat het heilige meettool bewees dat de respons goed was.

Voor mij is het een stuk transparanter om via down/uploads de metingen te doen, zodat er geen (goedbedoelde) shit tussenzit.