Mainboards, BIOS, Prozessoren, RAM 27.268 Themen, 123.678 Beiträge

Wie schnell ist RAM bei kleinen Dateien?

Sovebämse / 19 Antworten / Flachansicht Nickles

Hallo zusammen

Da ja das Problem auch heute noch besteht, dass beim Lesen / Zugriff auf viele kleinere Dateien (wie z. B. beim Windows-Start etc.) selbst bei den SSDs noch eine riesige Diskrepanz herrscht zum Lesen grosser Dateien (Leistung im unteren einstelligen Prozentbereich, konkret so um 50 MB/s), wollte ich mal fragen, ob es diese krasse Diskrepanz eigentlich auch beim RAM gibt.

Zudem die Frage: Wird es in Zukunft mal möglich sein, das Lesen kleiner Dateien fast so schnell hinzukriegen wie das Lesen grosser Dateien? Was bräuchte es dazu noch und wie weit ist man schon auf dem Weg? Nehme an, da reden wir dan schon über den Quantencomputer bzw. diese Ebene der Technik.

Gruss und Dank
Thomas

bei Antwort benachrichtigen
Borlander Andreas42 „Hi! Das ist eine recht komplexe Sache. Versuchen wir es mal mir meinem Wissen zu betrachten das ist allerdings auch nicht ...“
Optionen

So ein paar Ergänzende Gedanken:

1. Wir müssen die Datei im Verzeichnis finden

U.U. müssen wir auch erst noch das Verzeichnis finden innerhalb eines Verzeichnisbaums. Dann wird dieser Vorgang sogar mehrfach notwendig.

3. Eine Liste der von einer Datei belegten Sektoren muss geladen werden Die Sektoren einer Datei liegen nicht hintereinander, deshalb kennen moderne Dateisysteme Verwaltungssektoren, welche die Reihenfolge der belegten Sektoren einer Datei enthalten. Je größer die Datei ist, desto häufiger müssen diese Verwaltungssektoren gelesen werden.

Moderne Dateisysteme nutzen heute auch Extends um zusammenhängende Sektoren kompakt abzubilden: Statt einer langen Liste mit Sektoren 500,501,502,...,999,1000,2000,2001,...,2999,3000 kann man das wesentlich kompakter als 500-1000,2000-3000 darstellen.

2. Wir müssen den eigentlichen Dateiinhalt laden Der liegt auf dem Datenträger, aber nicht direkt "neben" dem Verzeichniseintrag.

Bei NTFS werden sehr kleine Dateien (AFAIR liegt die Grenze bei etwa 1,4KB) tatsächlich direkt in der MFT abgespeichert.

Lese-Cache). Da wirken dann solche Dinge wie Imvoraus-Lesen mit. Das wird oft was bringen, kann dann aber in ungünstigen Fällen auch bewirken, das der Cache verworfen wird und neu geladen werden muss. Ich tippe, das wird bei vielen kleinen Dateien häufiger vorkommen, als bei wenigen Großen.

Bei Cache haben wir auch noch eine mehrstufige Hierarchie, selbst wenn der Zugriff aufs RAM erfolgt. Wenns noch nicht im L1, L2 oder L3 Cache liegt dann muss man Ende sogar aufs langsame RAM gewartet werden.

Beim Schreiben der Daten werden die alten Daten erst nach dem schreiben der neuen Daten i wieder freigegeben.

Das wäre das Verhalten was man bei Copy-On-Write-Dateisystemen vorfindet. Die sind zwar sehr robust, aber die hat man nicht immer (und die haben auch den Nachteil, dass sie die Fragmentierung begünstigen).

Aber das reicht noch nicht an zusätzlichen Aufwand: soweit ich weiß sind die physikalisch geschriebenen Einheiten (Cluster) häufig größer als ein Sektor. Je mehr Sektoren in einem Cluster liegen, desto mehr Schreiboperationen, kann man mit passenden Schreibcache einsparen - wenn das denn alles passt. Das Problem ist, dass dies bei kleinen Dateien vermutlich nicht immer gut passen wird. Spätestens, wenn eine neue kleine Datei geschrieben wird, die in einen Cluster soll, der bereits kurz vorher geschrieben werden sollte und jetzt gerade gesperrt ist, bis der alte Inhalt geschrieben wird, muss das ganze Warten.

Bei RAM haben wir erst mal keine Sektoren, aber die Organisation erfolgt in virtuellen Speicherseiten (heute i.d.R. 4KiB) die dann in Hardware auf physikalische Speicheradressen gemappt werden müssen.

Bei Festplatten haben wir heute ja die etwas krude Situation, dass sie nach außen meist immer noch die 512Byte Sektoren präsentieren, intern jedoch mit 4KiB Sektoren arbeiten. Willst Du da nur ein Bit ändern musst Du den kompletten Sektor neu schreiben (der u.A. auch ein bisschen Overhead wie Checksummen enthält). Bei Flash-Speichern hat man sogar noch größere zusammhängende Blöcke.

Gruß
bor

bei Antwort benachrichtigen