smxFLog, ein spezielles Flash-Filesystem stellt eine Möglichkeit zum schnellen, einfachen und zuverlässigem Speichern von Log Daten in NAND und/oder NOR Flash Speichern zur Verfügung.
Das Speichern von Log Daten ist ein typischer Anwendungsfall bei Embedded Systemen und verlangt nach einer guten Lösung. Dabei werden Daten sequenziell an eine Datei angehängt. Dies ist bei klassischen Dateisystemen wie FAT nicht besonders effizient, wenn dies auf Flash basierten Medien arbeitet.
Das Problem mit FAT Filesystemen auf Flash Speicher
Das Problem bei der Benutzung von klassischen Filesystemen wie z.B. FAT bei der Benutzung von Flash Speicher als Medium ist, dass wenn nicht bei jedem Log Datum ein vollständiger Cluster an die Logdatei angehängt wird, es notwendig ist, den aktuellen Cluster vom Flash ins RAM zu laden, die neuen Daten anzuhängen und dann den neuen Cluster wieder an eine frei Stelle des Flashs zu schreiben. Jedes Mal wenn ein neuer Cluster geschrieben worden ist, muss außerdem die FAT aktualisiert werden und der Verzeichniseintrag in dem die Datei liegt, muss um die neue Dateigröße aktualisiert werden. Da Flash- Speicher nicht verändert werden kann, müssen FAT und Verzeichniseinträge erst ins RAM geladen werden, dort modifiziert werden und dann an eine neue, unbenutzte Stelle des Flashs zurück geschrieben werden.
Dies ist deutlich zu viel Aufwand um eine kleine Menge an Daten an ein Daten-Log anzuhängen. Es wirkt sich negativ auf die Geschwindigkeit aus und verringert zudem noch die Lebensdauer des Flash Speichers. Zudem muss regelmäßig Garbate Collection betrieben werden um nicht mehr benutzte Bereiche des Flash Speichers wieder frei zu geben.
Klassische Datei Systeme wie FAT eignen sich hervorragend für magnetische Speichermedien, bei denen Daten auch verändert werden können, nicht aber für Flash Speicher.
Zuverlässigkeit
Ein Logging System welches tief unten in einem Bohrloch, mitten auf dem Ozean oder an sonst einem entfernten Platz ausfällt, kann sehr teuer sein. Daher wurde bei der Entwicklung von smxFLog darauf geachtet, auf verschiedenen Ebenen eine möglichst hohe Zuverlässigkeit zu erreichen.
API
Das API wurde so entworfen, dass es durch eine einfache Struktur hilft Fehler zu vermeiden. Insbesondere werden die Eigenarten der verschiedenen Flash-Speicher und die notwendigen Schritte zum Beschreiben der Flash-Speicher vor dem Benutzer durch Abstraktion versteckt. Dies hilft Fehler die durch mangelnde oder unvollständige Kenntnis der Eigenarten der verschiedenen Flash-Chips, insbesondere von NAND Flash, zu vermeiden. Das API implementiert umfangreiche Fehler Prüfung und teilt dem Benutzer über einheitliche Rückgabewerte der aufgerufenen Funktionen das Auftreten von Fehlern mit.
Error Correction Code (ECC)
smxFLog benutzt eine 22-bit Fehler Korrektur welche es ermöglicht 1 Bit Fehler in 256 Byte Datenblöcken selbständig zu korrigieren. Für 512 Byte Daten sind dementsprechend 2 ECCs notwendig. Die Verwendung von ECCs ist empfohlen, vor allem bei NAND Flash Speichern, da diese mit der Zeit Daten verlieren können, kann aber an und abgeschaltet werden.
Power Fail Safety
Normalerweise ist das Sicherstellen von Dateisystem Integrität von Dateisystemen im Fall des Verlusts der Versorgungsspannung recht aufwendig und benötigt viel RAM Speicher. Aufgrund seiner einfachen, sequenziellen Struktur und des nicht vorhanden seins von komplizierten Metadaten Strukturen, ist smxFLog sicher gegen den Verlust der Versorgungsspannung "by design".