Startup time bei nodes mit MicroPython reduzieren

@thias und ich schauen uns gerade die Zeiten an, die der hiveeyes MicroPython Datalogger zum Hochfahren braucht. Intendiertes Szenario ist der Einsatz von LoRa mit TTN-Daten an Kotori weiterleiten und als Energieversorgung ein Akku ggf. plus Solar, sprich low power.

Problematisch ist hier, dass der LoPy nach einem deep sleep wieder komplett hochfährt und damit alle Module wieder laden muss.

Laut log braucht der LoPy4 momentan 10 Sekunden bis der datalogger startet:

[main.py] INFO: Loading settings
[main.py] INFO: Starting logging
[main.py] INFO: Loading Terkin Datalogger
[main.py] INFO: Loading modules
   10.0889 [terkin.datalogger           ] INFO   : Starting Terkin datalogger
   10.1041 [terkin.configuration        ] INFO   : Starting TerkinConfiguration on path "/flash"
   10.1184 [terkin.configuration        ] INFO   : Ensuring existence of backup directory at "/flash/backup"
   10.2089 [terkin.configuration        ] INFO   : User settings: None

Da die Software aber nicht von Anfang an mitzählt, habe ich gerade mal die Stoppuzr rausgekramt:

  • ca. 4 Sekunden bis [main.py] INFO: Loading modules erscheint,
  • dann nochmal ca. 10 Sekunden bis die Module geladen sind und Terkin mit 10.0889 [terkin.datalogger ] INFO : Starting Terkin datalogger losläuft.

D.h. der kompette Startprozess braucht bei mir momentan 14 Sekunden – in der settings.py ist als Hardware nur die Waage aktiviert!

Was bringt es an performance
(a) die komplette Software “einzufrieren”,
(b) einzelne Dateien / Bibliotheken zu pre-compilen.

@Thias, könntest du bei dir nochmal nachmessen, du hattest glaube ich die Module pre-compiled und bist auf 6 Sekunden gekommen? Waren das die angezeigten oder tatsächlich gemessenen?

6 Sekunden mit Bytecode bis zum Start des Loggers auf meinem LoPy4 laut Log.

So, habe jetzt die Dateien über die Terkin-Sandbox mit make install-ng hochgeladen.

make install-ng verwendet – bitte korrigiert mich wenn das nicht so passt – mpy-cross, das Python files pre-compiled, die dann auf dem Gerät als bytecode ausgeführt werden.

Das schaut nun auch bei mir besser aus:

[main.py] INFO: Loading settings
[main.py] INFO: Starting logging
[main.py] INFO: Loading Terkin Datalogger
[main.py] INFO: Loading modules
    5.5420 [terkin.datalogger           ] INFO   : Starting Terkin datalogger
    5.5541 [terkin.configuration        ] INFO   : Starting TerkinConfiguration on path "/flash"
    5.5660 [terkin.configuration        ] INFO   : Ensuring existence of backup directory at "/flash/backup"
    5.9003 [terkin.configuration        ] INFO   : User settings: None

Der ganze Prozess bis Starting Terkin datalogger dauert jetzt gut 9 Sekunden!

Weiter runter werden wir nur kommen, wenn wir nicht nur einzelne files pre-compilen / freezen, sondern den kompletten hiveeyes datalogger a la Annapurna firmware for Pycom/ESP32

Lohnt sich das für weitere 5-8 Sekunden? Wobei es beim FiPy die startup time nochmal länger war als hier mit dem LoPy gemessen.

2 Likes