Hallo, Gast! Registrieren

Wie viel arbeiten Meshhessen-Router eigentlich? Wir haben nachgemessen.
#1
PDF zum schöner Lesen...

.pdf   Wie viel arbeiten Meshhessen-router.pdf (Größe: 674,05 KB / Downloads: 1)

16 Millionen Pakete: Die unsichtbare Arbeit unserer Kernrouter
LocalStats: Der versteckte Datenschatz in jedem Meshtastic-Node

Contents
1. Die Frage, die uns nicht losließ.
2. Warum die normale Telemetrie nicht reicht
3. LocalStats: der versteckte Datenschatz.
4. Vom Handversuch zum Logger
5. Erste Zahlen: zwei Kernrouter im Vergleich.
6. Seitenquest Modem Preset
7. Der Detektiv-Moment: die Null, die keine sein dürfte.
8. Was dann passiert ist 
9. Nebenschauplätze

 
 
Jeder sieht auf der Karte, dass einer unserer Kernrouter MHR4 auf dem Feldberg steht.
Aber was leisten der eigentlich? Wir haben angefangen, es zu messen - und
dabei mehr über unser Netz und Rollen gelernt als wir dachten.

 
1. Die Frage, die uns nicht losließ
Wir haben die Anfrage eines Hardware-Herstellers bekommen, ob wir einmal Zahlen aus unserem Netz für die Weiterentwicklung der Boards haben. Ob wir sagen können, wie viel Nodes aktiv von unserem Kernrouter gesehen werden, und welche Paketraten da so auftreten.
 
  • Die Karte zeigt Positionen und Telemetrie - aber nicht, wer das Netz
    eigentlich trägt
    .

  • Konkrete Fragen: Wie viele Pakete empfängt und sendet ein Kernrouter?
    Wie viel davon ist Transitverkehr für andere? Wo beginnt die Überlastung?

Ihr werdet euch nun sicherlich Fragen: Überlastung? Hat MeshHessen nicht deswegen auf Short Slow gewechselt, damit das Netz nicht überlastet wird… - Dazu später mehr.
Zitieren
#2
 
2. Warum die normale Telemetrie nicht reicht
  • Die periodische Device-Telemetrie liefert: Batterie, Spannung,
    Channel Utilization, AirUtilTX, Uptime. Gut für „lebt der Node?" -
    nutzlos für „was leistet der Node?".

  • Paketzähler sind darin schlicht nicht enthalten.
  • Aus MQTT-Traffic oder Channel Utilization lässt sich das auch nicht sauber
    herleiten. Während MQTT für Gateway-Statistiken (also Nodes die Pakete über MQTT an den MQTT Broker weiterleiten) ein super Tool ist, ist es für Nodes die keine MQTT Anbindung haben und als Kernrouter nur auf HF arbeiten leider gar keine Hilfe. Man kann über MQTT sehen, welcher Node wie viele Pakete aus dem Netz einreicht. Also wie viel er drumherum so empfangen kann. – Aber wie bereits erwähnt ist das keine Hilfe in Bezug auf HF Statistiken.

3. LocalStats: der versteckte Datenschatz
Seit Oktober 2024 wurde ein Parameter eingeführt, in die Profobufs eingebaut. Die sogenannten local_stats (Ich kann nicht genau sagen, wann dieser es in die Firmware geschafft hat. Sagen wir mal ab Ende 2024.) - Ab dort führt jeder Node interne Statistikzähler:
LocalStats. Die wichtigsten:
   
Der Haken: LocalStats werden nicht ins Mesh gebroadcastet

(bewusst! - Airtime!). - Sie gehen normalerweise nur an einen lokal verbundenen Client.
Aber: Man kann sie gezielt per Unicast anfragen
Code:
meshtastic --request-telemetry local_stats --dest '!xxxxxxxx'

In unseren Versuchen war es zum Teil notwendig, hier mit dem Channel Parameter zu arbeiten und über den Meshhessen Kanal abzufragen



4. Vom Handversuch zum Logger
Einmal abfragen ist nett, aber erst Zeitreihen sind Erkenntnis. - Also: es muss etwas her, ein kleiner Collector, der periodisch alle Kernrouter abfragt. -
Eckpunkte (Details im Repo):
  • Unicast-Request über einen Gateway-Node (TCP-API), zeitversetzt statt
    alle gleichzeitig - das Mesh soll die Messung nicht zu sehr spüren

  • Retry mit Timeout- und NAK-Erkennung; Fehlschläge werden mitgeloggt,
    denn die Erreichbarkeit der Router ist selbst eine Metrik

  • Rohzähler + berechnete Deltas/Raten (pro Minute) + Reboot-Erkennung
  • Ergebnis landet in InfluxDB
  •  Grafana visualisiert.
  • → Code: [Link: github.com/SMLunchen/meshtastic-active-telemetry-logger]
 
Zitieren
#3
5. Erste Zahlen: zwei Kernrouter im Vergleich
Beide Router laufen seit ~168 Tagen ohne Reboot. - Gleiche Firmware,
verschiedene Standorte:

   
Drei Dinge sind hier bemerkenswert:

  1. 99,7 % Transitverkehr. Unsere Kernrouter senden praktisch nichts
    Eigenes - fast jede Aussendung ist Arbeit für andere.

  2. Jedes zweite empfangene Paket ist ein Duplikat. Das ist kein Fehler,
    sondern die Signatur eines redundanten Flooding-Mesh - aber es zeigt,
    wie viel Airtime Redundanz kostet.

  3. Router MHR4 wirft Pakete weg. 24 616 verworfene Sendungen, Tendenz
    ~36/Stunde. Der Standort arbeitet an der Kapazitätsgrenze.

6. Seitenquest Modem Preset
Ich hatte am Anfang nochmal versprochen, dass wir auf  Long Fast zu sprechen kommen. – Wir sind nun an dem Punkt!
Meshhessen hat vor einigen Monaten das Modem-Preset von Long Fast auf Short Slow gewechselt. – Die Kollisionsraten waren zu hoch und die Zustellbarkeit zu gering. Eine Entscheidung die bis heute immer wieder für Diskussionen sorgt. – Bringen wir ein bisschen Physik ins Spiel.
   
Beweisstück A: Die Paketraten, Empfangend auf den Nodes

Es handelt sich hier um ein Histogramm. – Die Messwerte von hier 4 Tagen werden auf sogenannte Buckets aufgeteilt. Also ein Eimer. Nehmen wir uns einen Eimer als Beispiel für die Erklärung – Herzberg, der Peak den wir im Diagramm sehen. 36-40
Jeder Messwert über die 4 Tage vom Herzberg, der zwischen 36 und 40 Pakete Empfangen pro Minute liegt, kommt in diesen Eimer. – so wird jeder der stündlich erfassten Messwerte in diese Buckets zugeordnet. Der Eimer der am Ende die meisten Messwerte hat, repräsentiert den statistisch häufigsten auftretenden Messwert. – Oder anders: Es gibt einen Durchschnittswert, wie viel Pakete pro Minute wir empfangen.
Betrachten wir nun die grünen Balken vom MHR4. Die kann man ganz gut zusammenfassen. MHR4 empfängt 80-100 Pakete pro Minute.
Diesen Wert merken wir uns kurz, wir brauchen den gleich wieder.
Betrachten wir nun die ungefähre Airtime die ein Paket benötigt, je nach Modem Preset. (wir gehen hier mal von 200 byte aus. – das ist nah an der maximalen Paketgröße)
   

Nun ist der Wert von eben wieder dran. 80-100 Pakete pro Minute. – nehmen wir mal unteren Ende auf:



 
80 Pakete x 1,9 s/Paket = 152 s
152 Sekunden Airtime. – Es fällt auf, dass 152 Sekunden nicht in 60 Sekunden passen. –
Zitieren
#4
Es sei denn man hat zufällig einen TACM-868 rumliegen:
   
Spaß beiseite. – Das passt niemals. Im 200-Byte-Szenario wären wir rechnerisch bereits bei 152 Sekunden Airtime pro Minute. Vorausgesetzt, das Paketaufkommen verteilt sich linear auf die 60s. – Tut es aber nicht. – Das Paketvorkommen kommt gerne in Peaks vor. – Eine Nachricht von mehreren Nodes wiederholt, knapp hintereinander. Die Kollisionswahrscheinlichkeit steigt hier enorm an.
Aus diesem Grund war Short Slow die richtige Konsequenz. Hier bräuchte es rechnerisch bei gleichen Werten:




  
80 Pakete x 0,32 s/Paket = 25,6 s
Long Fast: 152 s/min
Short Slow: 25,6 s/min
Faktor ~6.

7. Der Detektiv-Moment: die Null, die keine sein dürfte
   
Paketverluste MHR4 (TX Drops)
 
Dann kam MHR4.
Ein Router, der in seiner Laufzeit (168d) bereits rund 1,7 Millionen Pakete weitergeleitet hatte. Also definitiv kein stiller Mitläufer im Mesh. Doch zwischen all diesen Zahlen stach ein Wert heraus:
num_tx_relay_canceled = 0
NULL.
Null. 1,7 Millionen Chancen – und kein einziges Mal.
Null. Statistisch ungefähr so subtil wie ein Loch im Diagramm.
Null. So null wie ein Nashorn am Meeresgrund
Null. Als hätte jemand den Zähler ausgebaut und das Loch zugeschweißt.
Null. Die Art von Null, bei der man zuerst an einen kaputten Counter glaubt.

 
Bei 1,7 Millionen Relays hatte MHR4 also kein einziges Mal eine geplante Weiterleitung abgebrochen, weil ein anderer Node das Paket bereits schneller weitergeleitet hatte?
Die erste Erklärung lag nahe: Vielleicht steht MHR4 einfach so dominant im Netz, dass er fast immer der Erste ist. Gute Lage, gute Verbindungen, kurze Wege – und deshalb gibt es schlicht niemanden, dem er den Vortritt lassen müsste.
Nur: Genau das Gegenteil war der Fall.
MHR4 läuft mit der Rolle ROUTER_LATE.
Und diese Rolle wartet bewusst länger als andere Router. Sie soll gerade nicht als Erste senden. Eigentlich hätte MHR4 also ständig hören müssen, wie andere Nodes das Paket bereits weiterleiten.
Trotzdem: null Cancels.
Der Grund steckt in der Rolle selbst. ROUTER_LATE sendet nicht nur spät – es sendet trotzdem. Auch dann, wenn das Paket längst von einem anderen Router weitergeleitet wurde. Das normalerweise vorgesehene Canceln einer überflüssig gewordenen Weiterleitung ist hier schlicht deaktiviert.
Damit bekam die unscheinbare Null plötzlich eine ganz andere Bedeutung:
Sie war keine Besonderheit unserer Netztopologie. Kein Zeichen dafür, dass MHR4 allen anderen Routern überlegen wäre.
 
Sie war eine Konfigurations-Signatur.
 
Und wahrscheinlich erklärt sie gleichzeitig noch ein zweites Phänomen, das wir bei MHR4 beobachten: die immer wieder vollen Sendewarteschlangen. – Die Paketverluste. Drops.
Denn während andere Nodes erkennen können, dass ihre Arbeit bereits erledigt wurde, stellt sich MHR4 hinten an, wartet geduldig – und erledigt sie danach noch einmal.
1,7 Millionen Relays. Null Cancels.
MHR4 macht keine unnötige Doppelarbeit aus Versehen.
Er wurde genau dafür konfiguriert.
Autsch.

 
Und bevor jetzt jemand fragt, wer auf die glorreiche Idee mit ROUTER_LATE gekommen ist: wir.
Historisch hat MHR4 die Rolle ROUTER_LATE, weil sein Standort gerade nicht für einen Router klassifiziert. Er hat aktuell keine 360° Sicht. Er ist im Nordbereich abgeschattet.


 
 
8. Was dann passiert ist
Nach dieser Erkenntnis wollten wir wissen, ob unsere Theorie auch in der Praxis trägt.
Also haben wir genau eine Sache geändert:
MHR4 wurde testweise von ROUTER_LATE auf einen normalen ROUTER umgestellt.
Keine neue Antenne.
Keine neue Hardware.
Kein anderes Modem-Preset.
Nur die Rolle.
Und dann kamen die nächsten Messwerte.
Die vorher regelmäßig auftretenden TX-Drops waren mit einem Schlag weg.
   
Die Sendewarteschlange lief nicht mehr voll.
Genau das Verhalten, das wir nach der Analyse erwartet hatten.
Die überflüssige Doppelarbeit verschwand. Die Queue füllte sich gar nicht erst so weit.
Und damit offensichtlich auch der Druck auf die Sendewarteschlange.
Die Erklärung liegt vermutlich weniger darin, dass MHR4 plötzlich weniger Arbeit hat – sondern darin, wann er sie erledigt.
Als ROUTER_LATE hört MHR4 zunächst lange zu und reiht seine geplanten Weiterleitungen in die Sendewarteschlange ein. Bei einem Standort mit diesem Paketaufkommen kann sich diese Queue immer weiter füllen, bis irgendwann kein Platz mehr ist: num_tx_dropped steigt.

Als normaler ROUTER wartet MHR4 nicht mehr so lange. Er sendet seine Weiterleitungen früher – die Queue bekommt gar nicht erst die Gelegenheit, sich derart aufzustauen.
Damit wurde aus einer auffälligen Null plötzlich ein ziemlich schönes Experiment:

Vorher:
ROUTER_LATE
1,7 Millionen Relays
0 Relay-Cancels
24.616 TX-Drops

Nachher:
ROUTER
TX-Drops praktisch verschwunden

Eine Konfigurationsänderung – und das Verhalten des Nodes änderte sich unmittelbar messbar.
Allerdings gab es noch einen zweiten Effekt:
   
Die Channel Utilization ging nach oben.
Das klingt im ersten Moment widersprüchlich. Wir verhindern unnötige Aussendungen – und trotzdem steigt die gemessene Kanalauslastung?
Aber auch das werden wir uns noch genauer ansehen. Ein Router verhält sich bei der Weiterleitung schließlich anders als ein ROUTER_LATE, insbesondere bei der Priorisierung und dem Zeitpunkt seiner Aussendungen.
Auch das passt ins Bild: MHR4 wartet nun nicht mehr im Hintergrund, sondern beteiligt sich früher und aktiver an der Weiterleitung.
Für den Moment ist die wichtigste Erkenntnis eine andere:
Die vollen Sendewarteschlangen von MHR4 waren offenbar kein unvermeidbares Ergebnis seines stark belasteten Standortes.
Sie waren zumindest zu einem erheblichen Teil eine Folge seiner Rolle.
Und genau deshalb messen wir.
Nicht, damit Grafana noch ein paar bunte Kurven mehr hat.
Sondern damit wir Entscheidungen, die irgendwann einmal sinnvoll erschienen, später mit echten Daten wieder überprüfen können.
MHR4 darf deshalb vorerst seine Beförderung zum ROUTER behalten.
Ob das dauerhaft die bessere Lösung ist, zeigen uns die nächsten Tage.
Diesmal müssen wir nicht raten.
Diesmal haben wir Zähler.
 
9. Und noch eine Zahl zum Schluss
Es gab da noch die Frage: Wie viele Nodes sieht MHR4 eigentlich. – Nun leider ist auf den NRF Boards der Speicher begrenzt. 80 ist maximal. Diesen Wert haben wir konstant. Alte Nodes werden konstant heraus rolliert und neue übernehmen.
Aber: TSM sitzt in direkter Sicht zu MHR4 – TSM ist auf einem Raspberry Pi aufgebaut, und unterliegt dieser Begrenzung nicht. – Die Konfiguration sieht 700 Knoten aktuell maximal vor. – Diese Slots sind derzeit alle Belegt. – 285 werden als Online markiert.
Auch kann man in unserem Dashboard (https://dashboard.meshhessen.de) die Anzahl der Nodes nachsehen. Wir haben aktuell 653 Aktive Nodes in 24h, 579 nehmen aktiv Teil. (Stand 17.08.26) – es ist also durchaus davon auszugehen, dass MHR4 in der Größenordnung 300-400 Nodes bedient.

Cheers 73
-TSM aka Gerrit
Zitieren




Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste