Saya menemukannya:
Alasannya adalah bahwa gzipberoperasi pada (dalam hal kecepatan CPU vs HD mencari kecepatan hari ini) ukuran buffer sangat rendah .
Bunyinya beberapa KB dari dari file input, kompres, dan siram ke file output. Mengingat fakta bahwa ini memerlukan pencarian hard drive, hanya beberapa operasi yang dapat dilakukan per detik.
Alasan kinerja saya tidak skala adalah karena sudah ada gzipyang mencari seperti orang gila.
Saya mengatasi ini dengan menggunakan bufferutilitas unix :
buffer -s 100000 -m 10000000 -p 100 < file1.json | gzip > file1.json.gz
Dengan buffering banyak input sebelum mengirimnya ke gzip, jumlah pencarian kecil dapat dikurangi secara dramatis. Opsi:
-sdan -muntuk menentukan ukuran buffer (saya percaya itu dalam KB, tetapi tidak yakin)
-p 100 memastikan bahwa data hanya diteruskan ke gzip setelah buffer diisi 100%
Menjalankan empat ini secara paralel, saya bisa mendapatkan throughput 4 * 25 MB / s, seperti yang diharapkan.
Saya masih bertanya-tanya mengapa gzip tidak memungkinkan untuk meningkatkan ukuran buffer - dengan cara ini, cukup berguna jika dijalankan pada disk berputar.
EDIT : Saya mencoba beberapa perilaku program kompresi lagi:
bzip2 hanya memproses 2 MB / s karena kompresinya yang lebih kuat / lebih intensif CPU
lzop tampaknya memungkinkan buffer yang lebih besar: 70 MB / s per core, dan 2 core dapat memaksimalkan HD saya tanpa mencari berlebihan
ddmelakukan hal yang sama?