Forum: Mikrocontroller und Digitale Elektronik Zeit für import in Micropython nicht konstant (ESP8266)


von Haiko (haiko_kurt)


Lesenswert?

Liebe ESP-Fans,

ich hatte in einem anderen Thread schon einmal über das kuriose 
Zeitverhalten von ESP8266 berichtet 
(Beitrag "Micropython Startup Zeit auf ESP8266 / ESP32").

Wie ich jetzt herausfinden konnte, liegt das Verhalten im benutzen 
Filesystem littlefs/v2 auf dem Flash-Speicher. Die gemessene Dauer für 
einen `import` kann sehr stark variieren. Das heißt, wenn ich alle 
Quellen auf dem ESP lösche und wieder drauf kopiere erhöht sich die Zeit 
für einen Import. Nach einer
gewissen Anzahl von Kopiervorgängen sinkt die Zeit wieder schlagartig 
auf
einen kleinen Wert.

Ein Durchlauf besteht immer aus:
1
rm /pyboard/*
2
cp *.py /pyboard/
3
repl
4
Strg-D (soft reboot)

Der Programmcode ist:
1
from time import ticks_diff, ticks_ms, sleep
2
pstart = ticks_ms()
3
from machine import Pin
4
# read Configuration
5
POWER_PIN = 14
6
power = Pin(POWER_PIN, Pin.OUT)
7
print(f"Startup duration = {ticks_diff(ticks_ms(), pstart)} ms")
8
power.on()

Hier die Ergebnisse für die gemessenen Zeiten (MicroPython v1.20.0 on 
2023-04-26; ESP module with ESP8266):

13 ms, 20 ms, 24 ms, 30 ms, 34 ms, 40 ms, 45 ms, 50 ms, 55 ms, 60 ms, 67 
ms, 72 ms, 76 ms, 81 ms, 88 ms, 92 ms, 97 ms, 102 ms, 13 ms

Das littlefs soll ja robuster gegen Stromausfall sein, aber mit dem 
Verhalten ist es für Echtzeitanwendungen nur eingeschränkt verwendbar. 
Hat jemand von Euch ähnliche Beobachtungen bezüglich littlefs gemacht? 
Habe ich einen Denkfehler gemacht? Lohnt sich ein Bugreport bei 
MicroPython?

Danke für Feedback!


Viele Grüße
Haiko

von Sebastian W. (wangnick)


Lesenswert?

Generiert MicroPython vielleicht .pyc-Dateien beim ersten import? 
https://stackoverflow.com/questions/8822335/what-do-the-python-file-extensions-pyc-pyd-pyo-stand-for#8822377

LG, Sebastian

von Haiko (haiko_kurt)


Lesenswert?

Sebastian W. schrieb:
> Generiert MicroPython vielleicht .pyc-Dateien beim ersten import?
> 
https://stackoverflow.com/questions/8822335/what-do-the-python-file-extensions-pyc-pyd-pyo-stand-for#8822377
>
> LG, Sebastian

Ich glaube nicht, dass das so ist, denn die müsste man ja dann auch 
sehen, oder? Außerdem wäre das dann nicht abhängig vom Filesystem.

von Norbert (der_norbert)


Lesenswert?

Haiko schrieb:
> Das littlefs soll ja robuster gegen Stromausfall sein, aber mit dem
> Verhalten ist es für Echtzeitanwendungen nur eingeschränkt verwendbar.

In Echtzeit auf das Dateisystem schreiben oder davon lesen? Wohl kaum!

> Hat jemand von Euch ähnliche Beobachtungen bezüglich littlefs gemacht?
> Habe ich einen Denkfehler gemacht?

Wer macht wear-leveling auf einer externen SD Karte?
Wer macht wear-leveling im internen FLASH?

> Lohnt sich ein Bugreport bei MicroPython?

Lohnt sich immer, ist eigens dafür eingerichtet worden.

Bevor du weiter kleinteilig herum misst, schon mal die Zeit von Power-On 
bis betriebsbereit gemessen? Reicht diese für dich aus? Immer?

von Jack V. (jackv)


Lesenswert?

Norbert schrieb:
> Wer macht wear-leveling auf einer externen SD Karte?
> Wer macht wear-leveling im internen FLASH?

„Dynamic wear leveling - littlefs is designed with flash in mind, and 
provides wear leveling over dynamic blocks. Additionally, littlefs can 
detect bad blocks and work around them.“ 
(https://github.com/littlefs-project/littlefs)

Edit: … oder war die Frage rhetorisch gemeint?

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Jack V. schrieb:
> Edit: … oder war die Frage rhetorisch gemeint?

Jaaaa, ich denke du hast es getroffen... ;-)

von Haiko (haiko_kurt)


Lesenswert?

Norbert schrieb:
> Haiko schrieb:
>> Das littlefs soll ja robuster gegen Stromausfall sein, aber mit dem
>> Verhalten ist es für Echtzeitanwendungen nur eingeschränkt verwendbar.
>
> In Echtzeit auf das Dateisystem schreiben oder davon lesen? Wohl kaum!

Echtzeit heißt für mich, dass die Zeit (wenigstens halbwegs) 
reproduzierbar ist. Aber in dem Vorliegenden Fall variiert sie um den 
Faktor 10 und hängt davon ab, wie viele Lösch-/Kopiervorgänge gemacht 
wurden.

>> Hat jemand von Euch ähnliche Beobachtungen bezüglich littlefs gemacht?
>> Habe ich einen Denkfehler gemacht?
>
> Wer macht wear-leveling auf einer externen SD Karte?
> Wer macht wear-leveling im internen FLASH?
>

Das verstehe ich nicht. Auch wenn es ironisch gemeint ist.

>> Lohnt sich ein Bugreport bei MicroPython?
>
> Lohnt sich immer, ist eigens dafür eingerichtet worden.

Okay, ich wollte mir hier Feedback holen, bevor ich einen Bug reporte, 
der gar keiner ist.

> Bevor du weiter kleinteilig herum misst, schon mal die Zeit von Power-On
> bis betriebsbereit gemessen? Reicht diese für dich aus? Immer?

Ja, mit Optimierungen und mit FAT als Filesystem ist die Start-Zeit nun 
im grünen Bereich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.