Benutzer-Werkzeuge

Webseiten-Werkzeuge


flash-speicher

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
flash-speicher [2012/09/03 14:06] – [Arbeitsweise von NAND FLASH] Dirk Krauseflash-speicher [2024/08/07 13:34] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 24: Zeile 24:
  
   * Die kleinste ansprechbare Einheit beim Lesen/Schreiben ist eine "Page", nicht ein Sektor. FLASH-Speicher aus den Jahren 2007-2008 verwenden eine Page-Größe von 2K mit Übergang zu 4K um 2009 bzw.  16K um 2011.   * Die kleinste ansprechbare Einheit beim Lesen/Schreiben ist eine "Page", nicht ein Sektor. FLASH-Speicher aus den Jahren 2007-2008 verwenden eine Page-Größe von 2K mit Übergang zu 4K um 2009 bzw.  16K um 2011.
-  * Eine Page kann nicht einfach überschrieben werden, sie muss zuvor gelöscht werden (andernfalls wäre der neue Inahlt eine Oder-Verknüpfung von altem Inhalt und neu geschriebenen Daten).+  * Eine Page kann nicht einfach überschrieben werden, sie muss zuvor gelöscht werden (andernfalls wäre der neue Inahlt eine Verknüpfung von altem Inhalt und neu geschriebenen Daten).
   * Es kann aber nicht eine einzelne Page gelöscht bzw. geschrieben werden, Löschen und Schreiben ist nur für "Erase Blocks" - also ganze Folgen fortlaufender Pages - möglich. Ein typischer Wert sind 64 aufeinanderfolgende Pages, bzw. eine Erase-Block-Größe von 128 oder 256kB.   * Es kann aber nicht eine einzelne Page gelöscht bzw. geschrieben werden, Löschen und Schreiben ist nur für "Erase Blocks" - also ganze Folgen fortlaufender Pages - möglich. Ein typischer Wert sind 64 aufeinanderfolgende Pages, bzw. eine Erase-Block-Größe von 128 oder 256kB.
   * Nach dem Löschen des Erase-Blocks können die Pages nicht in beliebiger Reihenfolge geschrieben werden sondern nur in sequentieller Reihenfolge beginnend mit der ersten Page.   * Nach dem Löschen des Erase-Blocks können die Pages nicht in beliebiger Reihenfolge geschrieben werden sondern nur in sequentieller Reihenfolge beginnend mit der ersten Page.
Zeile 30: Zeile 30:
  
 NAND FLASH unterscheidet sich fundamental von Festplatten. Da die IT-Branche aber seit Jahrzehnten Festplatten benutzt, gab es einen großen Druck, FLASH-Speicher wie Festplatten anzusprechen. FLASH-Speicher "verstecken" das FLASH-Verhalten. Ein Microcontroller sorgt dafür, dass sich der FLASH-Speicher nach außen wie eine Festplatte verhält. Die Software wird häufig als "Flash Translation Layer" (FTL) oder "Flash Abstraction Layer" bezeichnet. Die bei Festplatten häufig vorkommende Operation, einen 512-Bytes-Sektor zu speichern, kann bei FLASH-Speichern mehrere Operationen erfordern, die mit weit mehr als 512 Bytes im FLASH hantieren. Um den Verschleiß zu reduzieren, muss die FTL-Software Daten zwischenspeichern, um die Anzahl der Löschzyklen zu reduzieren. NAND FLASH unterscheidet sich fundamental von Festplatten. Da die IT-Branche aber seit Jahrzehnten Festplatten benutzt, gab es einen großen Druck, FLASH-Speicher wie Festplatten anzusprechen. FLASH-Speicher "verstecken" das FLASH-Verhalten. Ein Microcontroller sorgt dafür, dass sich der FLASH-Speicher nach außen wie eine Festplatte verhält. Die Software wird häufig als "Flash Translation Layer" (FTL) oder "Flash Abstraction Layer" bezeichnet. Die bei Festplatten häufig vorkommende Operation, einen 512-Bytes-Sektor zu speichern, kann bei FLASH-Speichern mehrere Operationen erfordern, die mit weit mehr als 512 Bytes im FLASH hantieren. Um den Verschleiß zu reduzieren, muss die FTL-Software Daten zwischenspeichern, um die Anzahl der Löschzyklen zu reduzieren.
 +
 +Eine weitere Aufgabe der FTL ist es, Erase-Blöcke, die bereits oft geschrieben wurden, auszusortieren (d.h. diese Erase-Blöcke werden nicht mehr zum weiteren Abspeichern benutzt, die Datenträger-Kapazität verringert sich).
  
 Egal wie gut die FTL-Software ist, bestimmte Zugriffsmuster erfordern Mehrarbeit "im Innern". Wenn das Partitions- und Dateisystemlayout solche schlechten Zugriffsmuster vermehrt auftreten lässt, leiden die Performance und Zuverlässigkeit des NAND-FLASHES darunter. Im Gegenzug sorgt ein günstiges Layout für höhere Performance und geringeren Verschleiß. Egal wie gut die FTL-Software ist, bestimmte Zugriffsmuster erfordern Mehrarbeit "im Innern". Wenn das Partitions- und Dateisystemlayout solche schlechten Zugriffsmuster vermehrt auftreten lässt, leiden die Performance und Zuverlässigkeit des NAND-FLASHES darunter. Im Gegenzug sorgt ein günstiges Layout für höhere Performance und geringeren Verschleiß.
Zeile 39: Zeile 41:
 Unabhängig von den Unterschieden gibt es auch Gemeinsamkeiten zwischen den Dateisystemtypen: Unabhängig von den Unterschieden gibt es auch Gemeinsamkeiten zwischen den Dateisystemtypen:
  
-Signature - Die meisten Dateisystem schreiben eine Kennung mit dem Dateisystemtyp an eine markante Stelle innerhalb der Partition sowie Parameter wie Größe und Speicherort bestimmter Datenstrukturen. Typischerweise steht diese Signatur am Partitionsanfang. Für Unix- und Linux-Dateisysteme beispielsweise steht der "Super-Block" in Sektor 2 der Partition. Für FAT und NTFS steht der "BIOS Parameter Block" (BPB) in Sektor 0 der Partition. +  * Signature - Die meisten Dateisystem schreiben eine Kennung mit dem Dateisystemtyp an eine markante Stelle innerhalb der Partition sowie Parameter wie Größe und Speicherort bestimmter Datenstrukturen. Typischerweise steht diese Signatur am Partitionsanfang. Für Unix- und Linux-Dateisysteme beispielsweise steht der "Super-Block" in Sektor 2 der Partition. Für FAT und NTFS steht der "BIOS Parameter Block" (BPB) in Sektor 0 der Partition. 
-Allokations-Daten (allocation data) - Die meisten Dateisysteme notieren, welche Sektoren bereits benutzt werden und welche noch ungenutzt sind. Für FAT-Dateisysteme folgt die "File Allocation Table" auf den BPB, mit evtl. ein paar ungenutzten Sektoren dazwischen. Für ext2 und Nachfolger sowie NTFS sind diese Zuordnungstabellen in der Partition verteilt. Dies ist für Festplatten sinnvoll, um Suchlaufzeiten zu verringern und auch für FLASH-Speicher hilfreich, da der "hot spot"-Effekt des ständigen Schreibens an dieselbe Stelle vermindert wird. +  Allokations-Daten (allocation data) - Die meisten Dateisysteme notieren, welche Sektoren bereits benutzt werden und welche noch ungenutzt sind. Für FAT-Dateisysteme folgt die "File Allocation Table" auf den BPB, mit evtl. ein paar ungenutzten Sektoren dazwischen. Für ext2 und Nachfolger sowie NTFS sind diese Zuordnungstabellen in der Partition verteilt. Dies ist für Festplatten sinnvoll, um Suchlaufzeiten zu verringern und auch für FLASH-Speicher hilfreich, da der "hot spot"-Effekt des ständigen Schreibens an dieselbe Stelle vermindert wird. 
-Speicher-Cluster (storage clusters) - Aus Performance-Gründen und auch um die Allokations-Daten nicht zu stark wachsen zu lassen, verwenden Dateisysteme meist Speichereinheiten größer als einen Sektor. Für FAT und NTFS heißt diese Einheit "Cluster". FAT-Cluster sind meist 16 kB (32 Sektoren) oder 32 kB (64 Sektoren) groß, NTFS benutzt meist 4 kB. Für ext2 und Nachfolger sind 1 kB, 2 kB und 4 kB übliche Grüßen für den "filesystem block".+  Speicher-Cluster (storage clusters) - Aus Performance-Gründen und auch um die Allokations-Daten nicht zu stark wachsen zu lassen, verwenden Dateisysteme meist Speichereinheiten größer als einen Sektor. Für FAT und NTFS heißt diese Einheit "Cluster". FAT-Cluster sind meist 16 kB (32 Sektoren) oder 32 kB (64 Sektoren) groß, NTFS benutzt meist 4 kB. Für ext2 und Nachfolger sind 1 kB, 2 kB und 4 kB übliche Größen für den "filesystem block".
  
 Auf Allokationsdaten und Speicher-Cluster wird häufig zugegriffen, daher sollten diese Operationen effizient erfolgen. Auf Allokationsdaten und Speicher-Cluster wird häufig zugegriffen, daher sollten diese Operationen effizient erfolgen.
-* Wenn die Allokationsdaten an einer NAND-FLASH Page-Grenze beginnen, sinkt die Wahrscheinlichkeit, dass ein Schreibzugriff auf Allokationsdaten sich über zwei Pages erstreckt. + 
-* Wenn die Clustergröße ein Zweierpotenz-Vielfaches der NAND-FLASH Page-Größe ist und der erste Cluster an einer Erase-Block-Grenze liegt, vereinfacht dies auch das Schreiben der Speicher-Cluster. +  * Wenn die Allokationsdaten an einer NAND-FLASH Page-Grenze beginnen, sinkt die Wahrscheinlichkeit, dass ein Schreibzugriff auf Allokationsdaten sich über zwei Pages erstreckt. 
-* Da der Verschleiß durch Löschzyklen beim Überschreiben von Daten immer ganze Erase-Blöcke betrifft, sollten Nur-Lese-Daten nicht gemeinsam mit Schreib-Lese-Daten in einem Erase-Block untergebracht werden.+  * Wenn die Clustergröße ein Zweierpotenz-Vielfaches der NAND-FLASH Page-Größe ist und der erste Cluster an einer Erase-Block-Grenze liegt, vereinfacht dies auch das Schreiben der Speicher-Cluster. 
 +  * Da der Verschleiß durch Löschzyklen beim Überschreiben von Daten immer ganze Erase-Blöcke betrifft, sollten Nur-Lese-Daten - insbesondere Partitionstabelle und Signature (BPB bzw. super block) - nicht gemeinsam mit Schreib-Lese-Daten in einem Erase-Block untergebracht werden.
  
 ===== Original-Formatierung ===== ===== Original-Formatierung =====
-Die Hersteller von FLASH-Speichern kennen die Details ihrer Speicher (insbesondere Page-Größe und Erase-Block-Größe), die Details des verwendeten Dateisystems (meist FAT16 oder FAT32) und die Charakteristik der eingesetzten FTL-Software. Mit diesen Informationen - über die ein Endnutzer normalerweise nicht verfügt - können sie ein Layout wählen, dass die nötigen internen Operationen weitgehend erleichtert und minimiert.+Die Hersteller von FLASH-Speichern kennen die Details ihrer Speicher (insbesondere Page-Größe und Erase-Block-Größe), die Details des verwendeten Dateisystems (meist FAT16 oder FAT32) und die Charakteristik der eingesetzten FTL-Software. Mit diesen Informationen - über die ein Endnutzer normalerweise nicht verfügt - können sie ein Layout wählen, das die nötigen internen Operationen weitgehend erleichtert und minimiert.
  
 Hier ein Beispiel: Auf einer 2-GB-SD-Karte mit FAT16-Dateisystem befindet sich die Partitionstabelle in Sektor 0. Die Sektoren 1-254 bleiben ungenutzt, die erste Partition beginnt in Sektor 255. Damit liegt der BPB (die Signatur) gemeinsam mit der Partitionstabelle - also Konfigurationsdaten, die im Normalfall nur gelesen werden - in einem Erase-Block, der nie beschrieben wird. Dies verringert das Risiko eines kompletten Datenverlustes durch Verschleiß dieser kritischen Sektoren. Die Allokations-Daten (FAT, file allocation table) beginnen in Sektor 256. Für FAT und Wurzelverzeichnis werden zusammen 512 Sektoren verwendet, bis einschließlich Sektor 767. Der verbleibende Platz von Sektor 768 bis zum Ende des Datenträgers wird für die Cluster-Daten benutzt. Die Clustergröße ist 64 Sektoren (32 kB). Somit sind unsere oben aufgestellten Kriterien erfüllt. Der FAT-Bereich - ein "hot spot" bei FAT-Dateisystemen - benutzt keinen Erase-Block gemeinsam mit den Clusterdaten. Dies vereinfacht es für die FTL, die FAT bei Verschleiß umzulagern. Hier ein Beispiel: Auf einer 2-GB-SD-Karte mit FAT16-Dateisystem befindet sich die Partitionstabelle in Sektor 0. Die Sektoren 1-254 bleiben ungenutzt, die erste Partition beginnt in Sektor 255. Damit liegt der BPB (die Signatur) gemeinsam mit der Partitionstabelle - also Konfigurationsdaten, die im Normalfall nur gelesen werden - in einem Erase-Block, der nie beschrieben wird. Dies verringert das Risiko eines kompletten Datenverlustes durch Verschleiß dieser kritischen Sektoren. Die Allokations-Daten (FAT, file allocation table) beginnen in Sektor 256. Für FAT und Wurzelverzeichnis werden zusammen 512 Sektoren verwendet, bis einschließlich Sektor 767. Der verbleibende Platz von Sektor 768 bis zum Ende des Datenträgers wird für die Cluster-Daten benutzt. Die Clustergröße ist 64 Sektoren (32 kB). Somit sind unsere oben aufgestellten Kriterien erfüllt. Der FAT-Bereich - ein "hot spot" bei FAT-Dateisystemen - benutzt keinen Erase-Block gemeinsam mit den Clusterdaten. Dies vereinfacht es für die FTL, die FAT bei Verschleiß umzulagern.
Zeile 58: Zeile 61:
 Wenn Sie ein Programm wie fdisk benutzen, ist es unwahrscheinlich, dass Sie günstige Partitionsgrenzen ziehen, wenn Sie nicht die o.g. Regeln befolgen. Aus historischen Gründen (physischer Aufbau altertümlicher Festplatten, Programmiermodell altertümlicher IDE-Controller, ältere BIOS-APIs) verwendet fdisk standardmäßig ein Modell mit Zylindern (C, cylinders), wobei jeder Zylinder einer Speicherkapazität von Kopfanzahl (H, heads) mal Sektoren (S, sectors per track) aufweist. Aus noch mysteriöseren Gründen ist das Maximum für H 255 und das Maximum für S 63. Daher umfasst ein Zylinder i.d.R. 255*63=16065 Sektoren. Diese Anzahl führt immer zu einer schlechten Ausrichtung. Daher gilt: Wenn Sie mit fdisk arbeiten und Partitionen an Zylinder-Grenzen ausrichten, haben Sie verloren. Stellen Sie die von fdisk benutzte Einheit auf Sektoren um (Option -u oder Kommando "u"). Beachten Sie, dass die Zählung der Sektoren bei 0 beginnt. Wenn Sie ein Programm wie fdisk benutzen, ist es unwahrscheinlich, dass Sie günstige Partitionsgrenzen ziehen, wenn Sie nicht die o.g. Regeln befolgen. Aus historischen Gründen (physischer Aufbau altertümlicher Festplatten, Programmiermodell altertümlicher IDE-Controller, ältere BIOS-APIs) verwendet fdisk standardmäßig ein Modell mit Zylindern (C, cylinders), wobei jeder Zylinder einer Speicherkapazität von Kopfanzahl (H, heads) mal Sektoren (S, sectors per track) aufweist. Aus noch mysteriöseren Gründen ist das Maximum für H 255 und das Maximum für S 63. Daher umfasst ein Zylinder i.d.R. 255*63=16065 Sektoren. Diese Anzahl führt immer zu einer schlechten Ausrichtung. Daher gilt: Wenn Sie mit fdisk arbeiten und Partitionen an Zylinder-Grenzen ausrichten, haben Sie verloren. Stellen Sie die von fdisk benutzte Einheit auf Sektoren um (Option -u oder Kommando "u"). Beachten Sie, dass die Zählung der Sektoren bei 0 beginnt.
  
-Wenn Sie die erste Partition in Sektor 1 beginnen lassen, haben Sie ebenfalls verloren. Schreiboperationen, bei denen mehrere Sektoren geschrieben werden, sind nun mit wesentlich größerer Wahrscheinlichkeit auf mehrere Pages bzw. Erase-Blocks aufgesplittet. Außerdem ist Ihre Partitionstabelle Verschleiß ausgesetzt, da sie ständig gelöscht und neu geschrieben wird, wenn auf Datenstrukturen am Beginn der Partition zugegriffen wird.+Wenn Sie die erste Partition in Sektor 1 beginnen lassen, haben Sie ebenfalls verloren. Schreiboperationen, bei denen mehrere Sektoren geschrieben werden, sind nun mit wesentlich größerer Wahrscheinlichkeit auf mehrere Pages bzw. Erase-Blocks aufgesplittet. Außerdem ist Ihre Partitionstabelle Verschleiß ausgesetzt, da der Erase-Block mit der Partitionstabelle ständig gelöscht und neu geschrieben wird, wenn auf Datenstrukturen am Beginn der Partition zugegriffen wird.
  
 Andere häufig genutzte Startpunkte sind die Sektoren 16, 32 und 63. Keine dieser Einstellungen ist für FLASH-Speicher geeignet, da Sie wirklich Partitionstabelle und häufig geschriebene Daten so voneinander trennen wollen, dass sie in unterschiedlichen Erase-Blöcken liegen. Andere häufig genutzte Startpunkte sind die Sektoren 16, 32 und 63. Keine dieser Einstellungen ist für FLASH-Speicher geeignet, da Sie wirklich Partitionstabelle und häufig geschriebene Daten so voneinander trennen wollen, dass sie in unterschiedlichen Erase-Blöcken liegen.
Zeile 78: Zeile 81:
  
 Zusammenfassung: Zusammenfassung:
-* Behalten Sie nach Möglichkeit Partitionierung und Formatierung des Auslieferungszustandes bei. +  * Behalten Sie nach Möglichkeit Partitionierung und Formatierung des Auslieferungszustandes bei. 
-* Wenn Sie ein Image vorbereiten, dass Sie mit dd auf den Datenträger spielen wollen, verwenden Sie die o.a. Techniken.+  * Wenn Sie ein Image vorbereiten, dass Sie mit dd auf den Datenträger spielen wollen, verwenden Sie die o.a. Techniken.
  
-===== Beispiel für SD-Karte ===== 
  
 ===== Quelle ===== ===== Quelle =====
flash-speicher.1346674000.txt.gz · Zuletzt geändert: 2024/08/07 13:34 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki