Automatischer Speedtest selbst gebaut

No comment

LTE ist wie DSL ein Shared Medium.

Heißt also nichts anderes als das hinter der Funkzelle, eine Leitung definierter Geschwindigkeit steht. Die teilen sich alle Kunden auf der Zelle. Bei DSL ist es ähnlich, nur ist hier die teilbare Gesamtbandbreite oft wesentlich größer.

Um nicht alle gleich zu drosseln teilt die Telekom ihre Nutzer in zwei Gruppen ein. Priorisierte mit LTE Tarif und die zweitrangigen mit Hybridtarif. Zu letzteren zähle auch ich.

Hybrid ist eine Kombination aus LTE und  DSL, wobei die (langsamere) DSL Leitung immer zur Verfügung steht und bei Spitzenlast ein LTE <<Booster>> zugeschaltet wird. Da bei mir die DSL Leitung so langsam ist (max. 3Mbit down), dass der LTE Zusatz auch häufig als Mittellast fungieren muss, interessiert es mich ja schon woran ich bin.

Daher suchte ich nach einer Möglichkeit die Performance meiner Leitung über einen längeren Zeitraum auszuwerten. Gefunden habe ich sie in Form eines Shell Skripts. Um nicht zu viel Ressourcen zu verschwenden habe ich dieses auf ein gerootetes Smartphone aufgespielt, auf dem der CRON Dienst läuft. Alternativ tut es aber jeder sonstige Linux Rechner.

Das Ursprungsskript habe ich, wie viele nützliche Sachen bei den XDA-Developers gefunden. Das Original ist daher dort zu finden: Speedtest using terminal (thanks to aLNG)

Generell benötigt man zur erfolgreichen Messung drei Sachen.

  • Cronjob fähigen Linux Rechner
  • Das Skript
  • Webspace, Root Server oder sonstige eigene per http oder ftp abgreifbare Dateien im Netz, die Adresse soll idealerweise gleichzeitig anpingbar sein

Das Skript nutzt nämlich wget um die Geschwindigkeiten zu messen. Nach ein paar kleinen Modifikationen von mir ist es wie folgt aufgebaut:

#!/system/bin/sh

# Ermittle und speichere die Latenz
latency=`ping -c1 DeinWebspace.de | grep 'time=' | awk -F' ' '!/loss,/ {sub (/time=/,""); print $8}'`

#Definiere Startminute und -sekunde
m_before=`date +%M`
s_before=`date +%S`

#Starte wget und lade die Testdatei, während das vorangestellte time die Reaktionszeit der Website bestimmt
time wget -O /mnt/sdcard/scripts/testfile http://DeinWebspace.de/DeineTestdatei

#Definiere Endminute und -sekunde
m_after=`date +%M`
s_after=`date +%S`

# Bestimmt und speichert die Anfangs- und Endwerte in Sekunden
t_before=$((($m_before * 60) + $s_before))
t_after=$((($m_after * 60) + $s_after))

# Bestimmt und speichert die Dateigröße
file_size=`ls -l /mnt/sdcard/scripts/testfile | awk '{print $4}'`

#Durch Subtraktion von Ende mit Anfang wird die Dauer in Sekunden bestimmt
total_time=$(($t_after - $t_before))

#Bestimme und speichere die durchschnittliche Downloadgeschwindigkeit
download_speed=$(awk "BEGIN {print ($file_size/1048576)*8/$total_time }")

# Zeitstempel
timestamp=`date +'%d.%m.%Y %T'`

# Gebe Zeitstempel, Downloadgeschwindigkeit und Latenz aus für Logdatei
echo "$timestamp,$download_speed,Mbps,$latency,ms " >> /mnt/sdcard/scripts/speedtest.log

#Lösche die lokale Testdatei
rm /mnt/sdcard/scripts/testfile

 

Dabei tut sich in der Kurzzusammenfassung das Folgende. Es geht zu der Seite wo die Testdatei (kann eine x-beliebige Datei eurer Wahl sein) liegt und pingt sie an. Danach lädt es die Datei herunter und ermittelt aus Startzeit, Endzeit und Dateigröße die Bandbreite. Diese Werte landen dann mit Zeitstempel in einer Logdatei. Aus dieser kann dann z.B. mit Hilfe von Excel oder Calc der zeitliche Verlauf der Bandbreite visualisiert und weiter analysiert werden.

Die Logdatei

/mnt/sdcard/scripts/speedtest.log

muss allerdings vorher in einem beschreibbaren Ordner angelegt werden. Das Skript legt diese nicht selbst an.

 

Zur regelmäßigen Ausführung ist ein Crontab in /etc/crontab oder über crontab -e anzulegen. Hierzu kann man einen Crontab Generator wie z.B. crontab-generator.org nutzen um einen Crontab der Form

0 * * * * /data/speedtest.sh

zu erhalten. Der Intervall ist hierbei nach Belieben wählbar, sollte aber so groß sein um sich auch bei der langsamsten angenommenen Geschwindigkeit nicht zu überschneiden. Entsprechend ist auch auf die Größe der Testdatei zu achten. Ich habe gute Erfahrungen mit dem Stundenintervall gemacht bei einer Dateigröße von 30MB. Die Testdatei sollte zudem nicht zu klein sein (Empfehlung >10MB) um die Messung nicht zu verfälschen.

Wichtig! Der Rechner mit dem Speedtest sollte soweit es verschmerzbar ist, im Router die höchstmögliche Priorisierung erhalten. In der Regel ist dies kurz hinter Telefonie.

In einem weiteren Artikel werde ich mich noch ausführlicher mit der Auswertung beschäftigen.