Ich habe gestern etwas Ähnliches über OSX und die Komprimierung des Dateisystems gelesen. Grundsätzlich dreht sich die Antwort um das, was Sie komprimieren möchten. In diesem Beispiel spricht er über die "FAT" -Daten. Dateistrukturen, Eigenschaften, Metadaten usw., die zusammen gespeichert werden können, um Platz zu sparen und schneller in die CPU eingelesen zu werden, als überall nach dem Kopf zu suchen, um die Daten für jede Datei zu finden ...
Bei der Komprimierung geht es jedoch nicht nur darum, Speicherplatz zu sparen. Es ist auch ein klassisches Beispiel für den Handel mit CPU-Zyklen gegen verringerte E / A-Latenz und Bandbreite. In den letzten Jahrzehnten hat sich die CPU-Leistung viel schneller verbessert (und die Rechenressourcen sind umfangreicher - dazu später mehr) als die Festplattenleistung. Moderne Festplatten-Suchzeiten und Rotationsverzögerungen werden immer noch in Millisekunden gemessen. In einer Millisekunde durchläuft eine 2-GHz-CPU zwei Millionen Zyklen. Und dann ist natürlich noch die tatsächliche Datenübertragungszeit zu berücksichtigen.
Zugegeben, mehrere Ebenen des Caching im gesamten Betriebssystem und auf der Hardware arbeiten stark daran, diese Verzögerungen zu verbergen. Aber diese Bits müssen irgendwann von der Festplatte kommen, um diese Caches zu füllen. Komprimierung bedeutet, dass weniger Bits übertragen werden müssen. Angesichts der fast komischen Überlastung der CPU-Ressourcen auf einem modernen Multi-Core-Mac bei normaler Nutzung ist die Gesamtzeit, die erforderlich ist, um eine komprimierte Nutzlast von der Festplatte zu übertragen und die CPU zum Dekomprimieren ihres Inhalts in den Speicher zu verwenden, in der Regel weitaus kürzer als die Zeit Es würde dauern, die Daten in unkomprimierter Form zu übertragen.
Dies erklärt die potenziellen Leistungsvorteile der Übertragung weniger Daten, aber die Verwendung erweiterter Attribute zum Speichern von Dateiinhalten kann die Dinge auch schneller machen. Alles hat mit der Datenlokalität zu tun.
Wenn es eine Sache gibt, die eine Festplatte mehr verlangsamt als das Übertragen einer großen Datenmenge, bewegt sie ihre Köpfe von einem Teil der Festplatte zu einem anderen. Jede Bewegung bedeutet, dass der Kopf Zeit hat, sich zu bewegen, dann anzuhalten, sicherzustellen, dass er korrekt über der gewünschten Stelle positioniert ist, und dann darauf wartet, dass die sich drehende Scheibe die gewünschten Teile darunter legt. Dies sind alles reale, physische, bewegliche Teile, und es ist erstaunlich, dass sie genauso schnell und effizient tanzen wie sie, aber die Physik hat ihre Grenzen. Diese Bewegungen sind die wirklichen Leistungskiller für die Rotationsspeicherung wie Festplatten.
Das HFS + -Volume-Format speichert alle Informationen zu Dateien - Metadaten - an zwei primären Speicherorten auf der Festplatte: in der Katalogdatei, in der Dateidaten, Berechtigungen, Besitzverhältnisse und eine Vielzahl anderer Dinge gespeichert sind, und in der Attributdatei, in der "benannte Gabeln" gespeichert sind . "
Erweiterte Attribute in HFS + werden als benannte Gabeln in der Attributdatei implementiert. Im Gegensatz zu Ressourcengabeln, die sehr groß sein können (bis zu der vom Dateisystem unterstützten maximalen Dateigröße), werden erweiterte Attribute in HFS + "inline" in der Attributdatei gespeichert. In der Praxis bedeutet dies eine Grenze von ungefähr 128 Bytes pro Attribut. Dies bedeutet jedoch auch, dass der Plattenkopf keine Reise zu einem anderen Teil der Platte unternehmen muss, um die tatsächlichen Daten abzurufen.
Wie Sie sich vorstellen können, wird häufig auf die Festplattenblöcke zugegriffen, aus denen die Katalog- und Attributdateien bestehen, und daher befindet sie sich mit größerer Wahrscheinlichkeit als die meisten anderen irgendwo in einem Cache. All dies führt dazu, dass die vollständige Speicherung einer Datei, einschließlich ihrer Metadaten in ihren Daten, in den B-Tree-strukturierten Katalog- und Attributdateien zu einem allgemeinen Leistungsgewinn führt. Selbst eine 8-Byte-Nutzlast, die auf 25 Byte steigt, ist kein Problem, solange sie immer noch kleiner als die Zuordnungsblockgröße für die normale Datenspeicherung ist und alles in einen B-Baumknoten in der Attributdatei passt Das Betriebssystem muss ohnehin vollständig lesen.
Es gibt andere wichtige Beiträge zur Reduzierung des Speicherbedarfs von Snow Leopard (z. B. das Entfernen unnötiger Lokalisierungen und "designable.nib" -Dateien), aber die HFS + -Komprimierung ist bei weitem die technisch interessanteste.