pigz 2.8 teilt die Eingabe in 128 KB grosse Bloecke und schreibt doch ein normales gzip
Zusammenfassung
pigz ist die parallele Umsetzung von gzip: die Eingabe wird in Bloecke von 128 KB geschnitten und auf die Kerne verteilt, waehrend die Ausgabe ein normales gzip bleibt. Fassung 2.8 stammt von August 2023, und das Entpacken laeuft weiterhin in einem Faden.
Empfehlen- Name
- pigz
- Version
- 2.8
- Preis
- Kostenlos
- Open Source
- Open Source
- Betriebssystem
- Linux
- Webseite
- https://zlib.net/pigz/
- Aktualisiert
- 2026-10-23 21:28
pigz ist die parallele Umsetzung von gzip, 2007 von Mark Adler geschrieben, und der Name besteht einfach aus den Anfangsbuchstaben dieses Satzes. Die Eingabe wird in Bloecke von 128 KB geschnitten, mehreren Kernen zugleich gereicht, und das Ergebnis kommt als eine normale gzip-Datei zurueck. Auf der offiziellen Quellseite steht Fassung 2.8 vom 19. August 2023.
Nach 2.8 stand die Versionsnummer drei Jahre still
Die Quellseite traegt die Zeile pigz source code version 2.8 (19 Aug 2023), daneben ein Paket von 118K, daneben eine SHA-256-Pruefsumme und eine GPG-Unterschrift. Auch die Beitraege im Lager des Codes enden im August 2023, und die Nachricht zum letzten ist eine einzige Zeile: Version 2.8.
Drei Jahre ohne Ausgabe heisst nicht, dass das Vorhaben ruht. Das Format DEFLATE ist lange festgelegt, Entpacker gibt es ueberall, und ein Werkzeug, dessen einzige Aufgabe es ist, Packarbeit auf Kerne zu verteilen, hat keinen Grund zur Aenderung, solange hinein und hinaus dasselbe bleibt. Fassung 2.8 ruehrte an Einzelheiten: die Aenderungszeit nur bei gewoehnlichen Dateien schreiben, die zweiteilige Versionsnummer von zlib annehmen, dazu ein paar Reparaturen an Zusicherungen und leeren Zeigern. Ist diese Art Flickwerk fertig, ist die Flaeche der Funktionen geschlossen.
Ein Block von 128 KB, gepackt, dann wieder zusammengesetzt
Der Weg ist nicht umstaendlich. Die Eingabe wird in Bloecke von 128 KB geschnitten, jeder fuer sich gepackt, und die Pruefsumme jedes Blocks laeuft nebenher parallel mit. Ein Faden zum Schreiben reiht die fertigen Stuecke in der urspruenglichen Ordnung aneinander, fasst am Ende die Pruefsummen zu einer zusammen und legt Kopf und Fuss von gzip darum. Heraus kommt eine Datei, die jeder Entpacker kennt, ohne jeden Hinweis auf die stueckweise Arbeit.
Stueckweises Packen kostet meist etwas Verhaeltnis, weil ein spaeterer Block den Zusammenhang des frueheren nicht sieht. pigz gleicht das aus: bevor ein Block beginnt, werden die letzten 32K des vorigen als vorgegebenes Woerterbuch hineingegeben, also genau das Fenster der Geschichte, das ein einzelner Faden von deflate umsonst gehabt haette. Beim Zusammensetzen muss jeder Block auf einer Grenze von Bytes enden, was vier oder fuenf Bytes Aufschlag kostet; gegen einen Block von ueber hundert Kilobyte verschwindet das.
Zwei Schrauben: Faeden und Blockgroesse
Die Zahl der Faeden folgt von sich aus den laufenden Prozessoren, einer je Kern, und -p aendert sie; ein -p 1 nimmt die Faeden ganz heraus und kehrt zum Weg des gewoehnlichen gzip zurueck. Die Blockgroesse steht auf 128K, -b aendert sie. Groessere Bloecke helfen dem Verhaeltnis und schaden der Gleichzeitigkeit; kleinere fuellen die Kerne besser und geben bei Verhaeltnis wie Aufschlag etwas ab. Diese beiden sind das Hauptmittel, um Tempo gegen Groesse zu tauschen.
An die Umgebung stellt es wenig Ansprueche. Die offizielle Anleitung nennt nur zlib und pthread als Abhaengigkeit, ohne fremden Code darin, weshalb es sich auf jeder Spielart von Unix bauen laesst. zlib muss mindestens 1.2.3 sein, und der Autor zieht etwas nach 1.2.6 vor, weil dort der Aufschlag zwischen den Bloecken kleiner gedrueckt wird.
Das Entpacken laeuft nicht parallel
Ein Strom von deflate greift vorne und hinten ineinander, ein Leser muss ihm also der Reihe nach folgen, es sei denn der Packer hat den Strom in Bloecke geteilt, die je fuer sich lesbar sind. Also entpackt pigz mit einem einzigen Hauptfaden und startet drei weitere fuer Lesen, Schreiben und Pruefsumme. Das kann in manchen Lagen schneller sein, verteilt das Entpacken aber nicht auf alle Kerne. Wer alles in einem Faden will, schreibt -dp 1 oder -tp 1.
Damit erklaert sich ein haeufiges Missverstaendnis: eine mit pigz gepackte Datei entpackt sich nicht schneller. Die gesparte Zeit auf der Packseite ist auf der anderen nicht zurueckzuholen. Beide Seiten gewinnen nur, wenn beim Packen der gleich beschriebene Betrieb mit unabhaengigen Bloecken benutzt wurde.
Was -i kauft, sind Spruenge und Nachsicht
Mit -i oder --independent verweisen die Bloecke nicht mehr auf fremde Woerterbuecher, und jeder laesst sich allein lesen. Zwei Vorteile folgen: ist ein Block verdorben, lesen sich die uebrigen weiter, und ein Sprung mitten in eine Datei braucht kein Lesen von Anfang an. Damit ein Leser die Grenzen findet, werden vor jedem Block neun feste Bytes eingefuegt, in Hexadezimal 00 00 FF FF 00 00 00 FF FF. Der Preis ist ein Verhaeltnis auf der Hoehe von einfachem Blockpacken, ohne den Ausgleich durch das vorgegebene Woerterbuch.
Von -0 bis -11
Die Stufen entsprechen gzip: -0 legt ab ohne zu packen, -9 drueckt am haertesten und langsamsten, und die Vorgabe landet bei -6. pigz legt ein -11 dazu, das den Algorithmus zopfli von Jyrki Alakuijala wiederholt laufen laesst und ein paar Prozent mehr herausholt, bei einem schweren Preis an Laufzeit, wie die Anleitung selbst sagt. Um -11 liegt eine Gruppe eigener Schalter: fuenfzehn Wiederholungen als Vorgabe, fuenfzehn Bloecke als Hoechstzahl, und die Wahl, entweder gar nicht zu teilen oder erst zu wiederholen und danach zu teilen.
Das Ausgabeformat ist eines von drei: gzip als Vorgabe, .zz von zlib mit -z, eine zip mit einem Eintrag mit -K. Dazu kommt -R, das die Stellen des Schnitts dem Inhalt folgen laesst, sodass nach einer kleinen Aenderung die gleichen Teile an denselben Stellen liegen und eine Uebertragung nur das Bewegte traegt. Grosse Stapel von Protokollen und Sicherungen, wo eine Menge auf einmal durchlaeuft, sind der Ort, an dem Bloecke und Kerne wirklich Zeit sparen.
Eine Lizenz aus drei Saetzen
pigz nutzt die freundliche Lizenz von zlib: jeder darf die Software fuer jeden Zweck benutzen, aendern, weitergeben. Verlangt werden nur drei Dinge. Nicht behaupten, man habe es geschrieben, geaenderte Fassungen kennzeichnen, und den Hinweis stehen lassen. Mark Adler ist auch einer der zwei Autoren von zlib, und die Seite von zlib sagt, ihm gehoere die Haelfte des Entpackens; der Griff mit Bloecken und Woerterbuch in pigz kommt aus derselben Lade wie die Bibliothek, die er fuehrt.
Wie der Name klingt, erklaert die offizielle Seite eigens: pig-zee, nicht die Mehrzahl von pig. Dass solche Frage auf der Startseite beantwortet wird, sagt etwas ueber das Wesen des Vorhabens. Die Anleitung ist eine Seite, die Schalter stehen im Handbuch, und der Rest bleibt dem Quelltext.
Packarbeit auf Kerne zu verteilen ist das Einzige, was pigz verkauft, und es ist auch der Grund, warum zwanzig Jahre nur kleine Reparaturen brauchten: das Format von gzip hat sich nicht geaendert, also hat sich auch nicht geaendert, was das Werkzeug kann. Der ehrliche Einwand bleibt, dass das Entpacken noch immer ein Faden ist und das Tempo allein auf der Packseite liegt.