Saya menemukannya:
Alasannya adalah bahwa gzip
beroperasi 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 gzip
yang mencari seperti orang gila.
Saya mengatasi ini dengan menggunakan buffer
utilitas 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:
-s
dan -m
untuk 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
dd
melakukan hal yang sama?