Die neue Version Fiber Pool 1.0.0.5 ist online!
Zur Vorversion gibt es nur wenige Änderungen. Hauptsächlich war ich mit der Dokumentation beschäftigt (die leider noch nicht fertig ist), und mit der Implementierung einer neuen Beispielanwendung namens ‘fsp’ (für ‘File Stream Processor’).
‘fsp’ zeigt am Beispiel von ‘unzip/inflate’ anschaulich, wie die Skalierung einer Anwendung neben der Verwendung mehrerer Prozessoren auch über I/O und Hauptspeicher möglich sein kann.
Für einen Vergleich mit gängigen Packprogrammen wurden zwei Testszenarien durchgespielt:
1. Testszenario
Intel P4 3,2GHz HT, Win XP Professional 32-Bit, 2GB RAM, eine Festplatte
ZIP-Datei: 560MB gepackt (mit 7z/deflate), 590MB entpackt (80 MP3-Dateien)
Entpacken mit…
… fsp: 42s (fsp unzip ‘Dateiname’)
… 7z 4.64: 66s (7z x -o’Dateipfad’ ‘Dateiname’)
… WinRAR 3.80: 53s (winrar x ‘Dateiname’ ‘Dateipfad’)
… WinZIP 12.0: 61s (wzunzip -d ‘Dateiname’ ‘Dateipfad’)
2. Testszenario
Intel Q9450, Win Vista Home Premium 64-Bit, 8GB RAM, ein Festplatte, kein Superfetch
ZIP-Datei: 600MB gepackt, 2,06GB entpackt (Visual Studio-Programmordner)
Entpacken mit…
… fsp: 84s
… 7z 4.64: 122s
… WinRAR 3.80: 124s
… WinZIP 12.0: 125s
Prozentual gesehen erhält man im ersten Szenario eine Beschleunigung um 20% und im zweiten Szenario eine Beschleunigung um 30%!
Wie wird diese Beschleunigung erreicht?
Dafür gibt es drei Gründe:
1. Verwendung mehrerer Prozessoren
Beim Lesen eines Blocks (64KiB) aus der ZIP-Datei kann dieser Block mehrere komprimierte Dateien enthalten, die parallel entpackt werden können.
2. Vermeidung unnötiger Bewegungen des Schreib-/Lesekopfs der Festplatte
Der Zugriff auf eine Datei wird möglichst vollständig durchgeführt, bevor mit der Bearbeitung einer neuen Datei begonnen wird. Dies geschieht durch
3. Nutzung des vorhandenen Hauptspeichers
Entpackte Daten werden solange im Hauptspeicher gehalten, bis eine definierte Grenze überschritten wurde (hier: verfügbarer physischer Speicher unter 512MiB). Erst dann wird das Einlesen der Archivdatei unterbrochen und durch Schreiben der entpackten Dateien Speicher freigegeben.
Hoher Speicherverbrauch?
Keineswegs! Durch die dynamische Speicherverwaltung von Fiber Pool verwendet ‘fsp’ lediglich den ansonsten ungenutzten Speicher. Ist keiner vorhanden, so kann ‘fsp’ mit Minimalspeicher trotzdem ausgeführt werden – jedoch nicht mehr so effizient.
Unglaublich?
Probiert’s selbst aus! Der Source Code ist im Paket enthalten.
Hinweise zur aktuellen ‘fsp’-Version:
Es handelt sich nicht um eine Anwendung für den produktiven Einsatz, sondern ist mehr als “Proof of Concept” zu sehen.
Die Funktionalität ist sowieso sehr eingeschränkt:
- Es werden nur Kompressionsmethoden 0 (Store) und 8 (Deflate) unterstützt.
- Große Dateien werden nicht unterstützt
- Große Archive werden unter 32-Bit nicht unterstützt (64-Bit wird bevorzugt)
- Dateiattribute oder -zeiten werden nicht gesetzt
- …