Zeit für import in Micropython nicht konstant (ESP8266)

OP #7512169
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

#7512191
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?

#7512201
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?

OP #7512218
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren