Speed me Up, Scotty!
Herrgott. Also.
Früher:
MS-DOS-Rechner, das heisst auf dem Rechner läuft genau ein Programm. Wir haben Festplatten oder gar Disketten mit Zugriffszeiten, die Ausreichen zwischen einzelnen Bytes sich nen Kaffee zuholen *narf*. Arbeitsspeicher ist überigens auch knapp, so dass man da nichts überflüssiges drin haben will.
Ein durchschnittliches Programm liest eine angeforderte also byteweise (Zeichen für Zeichen) in den RAM ein und verarbeitet die Daten auch möglichst schnell wieder (denn den RAM braucht man für anderes) wie möglich. Da macht es natürlich Sinn, wenn die Datei schön von Anfang bis Ende zusammenhängt, damit möglichst keine Rechenzeit mit Zugriffszeiten und Suchen vergeuded wird. Also defragmentiert man.
Heute:
Multitaskingsysteme wo mehrere duzend bis hunderte von Prozesse gleichzeitig am laufen sind. Festplatten mit Zugriffszeiten von weniger als 10ms. Arbeitsspeicher im GByte-Bereich.
Das bedeutet, so ein Multitaskingkernel muss meistens mehrere Dateien gleichzeitig verarbeiten. Damit er da nicht von Datei zu Datei springen muss, sortiert er die Zugriffe also vorher kurz, so dass er vorne anfangen kann und hinten aufhört und zwischendrin seine Dateien rauspickt. Zudem liest er nicht nur die angeforderten Bytes, sondern in der Regel grad ganze Blöcke, weil Arbeitsspeicher ist genug vorhanden. Zudem erkennen moderne Betriebsysteme (Vista, Linux 2.6) was der Prozess vermutlich als nächstes haben will, und laden das präventativ auch grad noch ins RAM, wenn sie sowieso grad am Daten auslesen sind.
Das Auslesen ist also relativ optimiert. Das meiste befindet sich bereits im RAM bevor es überhaupt angefordert wird. Also bringt hier Defragmentieren wenig. Und selbst wenn sich die Daten noch im RAM befinden: Meistens werden eh verschiedene Dateien gleichzeitig eingelesen, also muss das Betriebsystem so oder so an verschiedenen Orten im Dateisystem auslesen, da hilft auch Defragmentieren nicht dagegen - dafür ist dieses Auslesen so sortiert, dass nicht herumgesprungen werden muss. Zudem sind die Zugriffszeiten von Festplatten heutzutage ebenfalls schnell genug.
Für dieses "wenig" zu Defragmentieren ist allerdings ebenfalls Blödsinn: Denn Schreibvorgänge muss man ja auch tätigen. Wenn man also in mitten einer schön aufgeräumten (defragmentierten) 700MB grossen Datei ca. 15 MB hinzufügen will, kann man das nicht an der ursprünglichen Stelle tun, man muss dies anderswo machen (sonst würd man ja Daten überschreiben). Diesen Platz zu finden braucht Zeit. Aus diesem Grund fragmentieren moderne Dateisysteme grosse Dateien absichtlich und lassen Blöcke in der gleichen Blockgruppe frei, damit bei einer Änderungen diese in der gleichen Blockgruppe geschrieben werden können (weil die Informationen, welche Blöcke in der gerade geöffneten Blockgruppe frei und welche belegt zum Lesen bereits geöffnet werden mussten, man also nicht noch extra suchen muss).
Wird der Speicherplatz knapp, wird dieses Verhalten abgestellt, weil es sonst kontraproduktiv wäre. Darum sollte man Dateisysteme nicht überfüllen, denn dann werden sie langsam - egal ob defragmentiert oder nicht.
Dazu kommen noch dateisystemabhängige Spezialitäten, auf die ich hier nicht eingehen will.
Lange Rede, kurzer Sinn: Defragmentieren ist fürn Arsch. Und ist oftmals sogar kontraproduktiv. Die Dateisysteme nicht überfüllen (weniger als 80% füllen) ist die einzige richtige Massnahme, um ein Dateisystem schnell zu halten.
Nachtrag: Nur der Vollständigkeithalber, aber wurde ja bereits ansatzweise diskutiert: SSDs defragmentieren ist im übrigen dann völliger Blödsinn: Flashspeicher-Zellen überstehen nur eine gewisse Anzahl an Schreibe- (bzw. Lösch-)Zyklen. Dafür sind die Zugriffszeiten für alle Zellen identisch (anders als bei einer Platte spielt der physische Abstand zwischen zwei Bits kein Unterschied). Aus diesem Grund verteilen SSD-Controller die Schreibvorgänge, damit alle Zellen in etwa gleich beansprucht werden (und nicht Zellen wo z.B. Logdateien drauf gespeichert sind, schneller abgenutzt werden). Da mit einem Festplatten-Defragmentierungstool drüberzufahren wäre übelster Blödsinn. Für SSDs empfehlen sich zudem andere Dateisysteme als für Festplatten. Hier gibt es verschiedene Optimierungsebenen (Dateisystem, Betriebsystem, SSD-Controller) - ob SSDs ab 50% freiem Speicherplatz einbrechen ist also von diesen drei Faktoren abhängig.
(Dieser Beitrag wurde zuletzt bearbeitet: 15.05.2009 16:29 von gandro.)
|