Ich habe es herausgefunden:
Der Grund dafür ist, dass gzip(in Bezug auf die CPU-Geschwindigkeit im Vergleich zur HD-Suchgeschwindigkeit heutzutage) extrem niedrige Puffergrößen verwendet werden .
Es liest einige KB aus der Eingabedatei, komprimiert sie und leert sie in die Ausgabedatei. Angesichts der Tatsache, dass dies eine Festplattensuche erfordert, können nur wenige Vorgänge pro Sekunde ausgeführt werden.
Der Grund, warum meine Leistung nicht skaliert wurde, ist, dass man schon gzipwie verrückt gesucht hat.
Ich habe dies mit dem Unix- bufferDienstprogramm umgangen :
buffer -s 100000 -m 10000000 -p 100 < file1.json | gzip > file1.json.gz
Durch Puffern vieler Eingaben vor dem Senden an gzip kann die Anzahl kleiner Suchvorgänge drastisch reduziert werden. Die Optionen:
-sund -msollen die Größe des Puffers angeben (ich glaube, es ist in KB, aber nicht sicher)
-p 100 stellt sicher, dass die Daten erst an gzip übergeben werden, wenn der Puffer zu 100% gefüllt ist
Wenn vier davon parallel ausgeführt werden, kann ich erwartungsgemäß einen Durchsatz von 4 * 25 MB / s erzielen.
Ich frage mich immer noch, warum gzip es nicht erlaubt, die Puffergröße zu erhöhen - auf diese Weise ist es ziemlich nutzlos, wenn es auf einer sich drehenden Festplatte ausgeführt wird.
EDIT : Ich habe ein paar weitere Komprimierungsprogramme ausprobiert:
bzip2 verarbeitet aufgrund der stärkeren / CPU-intensiveren Komprimierung nur 2 MB / s
lzop scheint größere Puffer zuzulassen: 70 MB / s pro Kern und 2 Kerne können meine HD maximieren, ohne zu viel zu suchen
dddas auch?