fipsy
Stamm-User
- 293
Hi Loader009!
Was deine Aussagen zur Festplatte betrifft, hast du das völlig richtig erklärt.
Was den Flash betrifft, stimmt es aber nicht so ganz. Flash-Speicher muss vor jedem Schreib- oder Lesevorgang adressiert werden und diese Adressierung benötigt erheblich Zeit. Das entspricht etwa der Zeit, die die Festplatte für die Kopfpositionierung benötigt. Wird Flash hingegen sequentiell gelesen oder geschrieben, so wird nur einmal am Anfang adressiert und dann werden nur noch die Datenblöcke (Pages) rüber geschoben. Daher geht sequentielles Lesen und Schreiben auch beim Flash erheblich schneller, als Random-Zugriff. Die von mir gezeigten Daten von CrystalDiskMark für eine SD-Karte sind daher absolut realistisch. Es kann sein, dass bei jedem Cluster neu adressiert werden muss. Da kenne ich mich bei SD nicht so genau aus. Aber auf jeden Fall ist sequentielles Lesen/Schreiben mit deutlich weniger Adressierungsvorgängen verbunden.
Ich glaube, du hast Cluster und Sektoren verwechselt. Ein Sektor hat 512 Bytes. Auf einer Festplatte ebenso wie auf einer SD-Karte. Normalerweise sind mit FAT32 vorpartitionierte SD-Karten mit 64 Sektoren je Cluster partitioniert. D.h. jeder Cluster hat 32 kB und jede Schreib- und Leseoperation muss daher mindestens 32 kB verarbeiten. Hat man viele kleine Dateien, ist diese Clustergröße daher nicht sinnvoll. Ext2-vorformatierte SD-Karten kenne ich nicht, weshalb ich nicht weiß, was dort die Standard-Clustergrößen sind.
Wenn du deine SD-Karte selbst partitionierst, kannst du die Clustergröße aber selbst auswählen. Ich habe z.B. 8 Sektoren je Cluster genommen, das sind 4 kB, was dann auch die kleinste zu verarbeitende Datenmenge ist. Für Ext2 und Linux Swap habe ich die Vorgaben des Partition Wizard stehen lassen, weil ich mich da nicht so gut auskenne. Er hat bei der Ext2-Partition 2 Sektoren je Cluster genommen (1024 Bytes). Für Linux Swap gibt es keine Clusterangaben. Vermutlich wird das Swap-System von Linux intern verwaltet und ist sektorbasiert. Aber das weiß ich nicht so genau. In jedem Falle finden Adressierungsvorgänge statt und somit gilt beim Swap das selbe, wie für alle anderen Partitionen: Je weniger Adressierungen, desto besser/schneller ist der Datentransfer.
Geswapt werden m.W. eigentlich immer ganze Prozesse und nie Teile davon. Das bedeutet auch, dass beim 'swappen' immer relativ große Datenmengen bewegt werden. Nämlich die Größe, die das Programm im Speicher belegt. Also i.d.R. zwischen 4 und 28 MB. Da ist ein sequentieller Zugriff von erheblichem Vorteil.
Eine Bewertung dieser Vorgänge kann man abschließend nur vornehmen, wenn man weiß, wie Linux die Swap-Partition verwaltet. Das weiß ich aber nicht. Auf jeden Fall spielt es eine Rolle, ob beim Swappen kleine Datenschnipsel mit häufigen Adresswechseln gelesen werden, oder große Datenmengen mit wenig Adressierungen. Zu adressmäßigen Defragmentierungen kommt es dabei ganz sicher auch, denn jeder Datenträger muss ja adressiert werden und dies kann leider aus logistischen Gründen nicht immer fortlaufend erfolgen, da Daten unterschiedlicher Größe auch wieder gelöscht werden und die Lücken irgendwie gefüllt werden müssen. Das kann man natürlich so machen, dass möglichst wenig Fragmente auftreten oder man kann zwischendurch defragmentieren. So wird auch Linux das tun. Je mehr adressiert wird, desto langsamer wird auch beim Flash der Zugriff. Wie bei einer defragmentierten Festplatte.
Solche Probleme gibts übrigens sogar beim RAM im Rechner. Auch dort wird hin und wieder vom Betriebssystem eine Reorganisation vorgenommen, damit der Zugriff schneller wird, weil Adressieren eben viel Zeit kostet. Nur merkst du davon nichts . Nennt sich übrigens "Memory Compaction" und auch Linux macht das regelmäßig: Memory compaction [LWN.net]
Was deine Aussagen zur Festplatte betrifft, hast du das völlig richtig erklärt.
Was den Flash betrifft, stimmt es aber nicht so ganz. Flash-Speicher muss vor jedem Schreib- oder Lesevorgang adressiert werden und diese Adressierung benötigt erheblich Zeit. Das entspricht etwa der Zeit, die die Festplatte für die Kopfpositionierung benötigt. Wird Flash hingegen sequentiell gelesen oder geschrieben, so wird nur einmal am Anfang adressiert und dann werden nur noch die Datenblöcke (Pages) rüber geschoben. Daher geht sequentielles Lesen und Schreiben auch beim Flash erheblich schneller, als Random-Zugriff. Die von mir gezeigten Daten von CrystalDiskMark für eine SD-Karte sind daher absolut realistisch. Es kann sein, dass bei jedem Cluster neu adressiert werden muss. Da kenne ich mich bei SD nicht so genau aus. Aber auf jeden Fall ist sequentielles Lesen/Schreiben mit deutlich weniger Adressierungsvorgängen verbunden.
Ich glaube, du hast Cluster und Sektoren verwechselt. Ein Sektor hat 512 Bytes. Auf einer Festplatte ebenso wie auf einer SD-Karte. Normalerweise sind mit FAT32 vorpartitionierte SD-Karten mit 64 Sektoren je Cluster partitioniert. D.h. jeder Cluster hat 32 kB und jede Schreib- und Leseoperation muss daher mindestens 32 kB verarbeiten. Hat man viele kleine Dateien, ist diese Clustergröße daher nicht sinnvoll. Ext2-vorformatierte SD-Karten kenne ich nicht, weshalb ich nicht weiß, was dort die Standard-Clustergrößen sind.
Wenn du deine SD-Karte selbst partitionierst, kannst du die Clustergröße aber selbst auswählen. Ich habe z.B. 8 Sektoren je Cluster genommen, das sind 4 kB, was dann auch die kleinste zu verarbeitende Datenmenge ist. Für Ext2 und Linux Swap habe ich die Vorgaben des Partition Wizard stehen lassen, weil ich mich da nicht so gut auskenne. Er hat bei der Ext2-Partition 2 Sektoren je Cluster genommen (1024 Bytes). Für Linux Swap gibt es keine Clusterangaben. Vermutlich wird das Swap-System von Linux intern verwaltet und ist sektorbasiert. Aber das weiß ich nicht so genau. In jedem Falle finden Adressierungsvorgänge statt und somit gilt beim Swap das selbe, wie für alle anderen Partitionen: Je weniger Adressierungen, desto besser/schneller ist der Datentransfer.
Geswapt werden m.W. eigentlich immer ganze Prozesse und nie Teile davon. Das bedeutet auch, dass beim 'swappen' immer relativ große Datenmengen bewegt werden. Nämlich die Größe, die das Programm im Speicher belegt. Also i.d.R. zwischen 4 und 28 MB. Da ist ein sequentieller Zugriff von erheblichem Vorteil.
Eine Bewertung dieser Vorgänge kann man abschließend nur vornehmen, wenn man weiß, wie Linux die Swap-Partition verwaltet. Das weiß ich aber nicht. Auf jeden Fall spielt es eine Rolle, ob beim Swappen kleine Datenschnipsel mit häufigen Adresswechseln gelesen werden, oder große Datenmengen mit wenig Adressierungen. Zu adressmäßigen Defragmentierungen kommt es dabei ganz sicher auch, denn jeder Datenträger muss ja adressiert werden und dies kann leider aus logistischen Gründen nicht immer fortlaufend erfolgen, da Daten unterschiedlicher Größe auch wieder gelöscht werden und die Lücken irgendwie gefüllt werden müssen. Das kann man natürlich so machen, dass möglichst wenig Fragmente auftreten oder man kann zwischendurch defragmentieren. So wird auch Linux das tun. Je mehr adressiert wird, desto langsamer wird auch beim Flash der Zugriff. Wie bei einer defragmentierten Festplatte.
Solche Probleme gibts übrigens sogar beim RAM im Rechner. Auch dort wird hin und wieder vom Betriebssystem eine Reorganisation vorgenommen, damit der Zugriff schneller wird, weil Adressieren eben viel Zeit kostet. Nur merkst du davon nichts . Nennt sich übrigens "Memory Compaction" und auch Linux macht das regelmäßig: Memory compaction [LWN.net]