wget zur Geschwindigkeitsmessung

X

xhiBseN

Grünschnabel
Hallo,

ich versuche eine rudimentäre Lösung für eine Geschwindigkeitsmessung über eine busybox zu implementieren.

wget -O /dev/null $SPEEDTESTURL 2> dllog.tmp ; tail dllog.tmp | grep 'MB/s' | cut -d "(" -f 2 | cut -d ")" -f 1; rm -r dllog.tmp

Das funktioniert wunderbar. Allerdings ist auf der Box ein embedded NVRAM. Die Logdatei Geschichte würde die cycles nun argh negativ beeinflussen.

wget -O /dev/null $SPEEDTESTURL 2>&1 | tail -n 2 | grep 'MB/s' | cut -d "(" -f 2 | cut -d ")" -f 1

Funktioniert auch, allerdings fehlen mir jetzt ca 20% der Bandbreite. Ich habe mal auf die CPU Auslastung geguckt wenn ich die Sachen als Job starte, sehe den Grund hier aber nicht. Gibt es eine Möglichkeit mit tail den Download nicht auszubremsen? :o

Wäre für jede Idee dankbar!

//edit: PS: ich weiß dass ich nur eine abgespeckte wget Version habe, ist aber nicht mein primäres Problem! :)

Gruß

xhiBseN
 
Auch der HTTP-Overhead beeinflusst die Messung negativ, weswegen eine Messung mittels wget nicht wirklich geeignet ist. Eine Geschwindigkeitsmessung mit sofortigem Output ist aber immer falsch, da das ausgebende TTY hier eine zusätzliche Bremse darstellt.
 
Hallo und Danke für die fixe Antwort ;)

da die Box eh im Lan des Kunden hängt und ich nicht weiß wieviel Bandbreite dort schon für VoiP Calls abgezwackt wird etc, soll es auch nur eine grobe Übersicht bieten. Ich komme bei 200 Tests auf 4% genau an die Bandbreite die ich hier im Lan zur Verfügung habe. Ich weiß schon dass das scaling Window bei TCP die Messungen stark beeinflusst.
Aber kommen diese 20% alleine durch das tail?
Ich kann mir das nur so erklären, dass er tail permanent neu aufruft und der Download dadurch stark beeinflusst wird. Gibt es da ne Möglichkeit eines Workarounds?
 
Wieso verwendest du nicht iptraf?

Ich würd dir aber nicht empfehlen iptraf über ssh auf dem interface zu verwenden wo du iptraf laufen lässt.
 
Danke für die Idee!
Also soweit ich das jetzt erkennen konnte liest iptraf nur die interfaces der CPE aus. Es geht mir aber lediglich darum eine Messung zu einem bestimmten Zeitpunkt zu machen (die Box schickt normalerweise für 10 Sekunden UDP Pakete die für QoS aussehen wie ganz normale Pakete des VOIP-G711 codecs und verursacht sonst so gut wie keinen Traffic). Ausserdem baut die Box einen Tunnel zu unserem Server auf und mapt die Ports dort, so dass man nur über den Server auf die CPE kommt. Dieser Server wiederrum ist nur aus dem Firmennetz zu erreichen.
Da die Box beim Kunden nicht den Eindruck erwecken soll als würden wir den Verkehr mitloggen wollen, wird das Signal auch nicht durchgeschliffen sondern einfach so ins Lan gehängt.
Die maximale Bandbreite die der Port hergibt, kann ja am DSLAM ausgelesen werden. Es würde rein theoretisch reichen einen Download zu starten und den Traffic auf dem Port auszulesen. Die Ergebnisse des Tools könnte man also gegenchecken, es muss nicht soo genau sein. Da die meisten Kunden aber keinen Linuxrechner im Netz haben, reicht ein Download nicht aus um die Leitung annährend auszulasten. Zudem spielt hier der Kunde eine Rolle, den ich gerne übergehen würde :)

Die Messung mit Hilfe des Logfiles hat sich in Tests auf Linuxrechnern als relativ genau erwiesen, das würde für unseren Anforderungen reichen. Die Variante ohne Zwischenspeicher bremst aber viel zu stark..

Gruß

xhiBseN
 
Hallo,


ohne mich bei embedded Geräten besonders auszukennen: Wenn "die Box" auch einen (D/S)Ram hat, könnte man in Abhängigkeit dessen Größe und des verwendeten Kernels vielleicht eine weitere Ramdisk erzeugen und dort die Log-Daten zwischenlagern, solange der Test läuft.
Ist aber nur eine wirre Idee.


cu
 

Ähnliche Themen

ffmpeg Framerate erhöhen.

sed? Zeichenkette ersetzen 1:2:17 zu 1:02:17

[gelöst] - for file in ... nur für bestimmte Endungen?

Crontab und Scripts - Problem

Sed: Bestimmtes Feld einer "Zeile mit mehreren Feldern" ergänzen

Zurück
Oben