Saya memiliki beberapa file JSON, masing-masing 20 GB, yang ingin saya kompres dengan gzip
:
gzip file1.json
Ini membutuhkan satu inti CPU penuh, semuanya baik-baik saja.
Ini memproses sekitar 25 MB / s (check in atop
), hard drive saya dapat membaca 125 MB / s dan saya memiliki 3 core prosesor gratis, jadi saya berharap untuk mendapatkan kecepatan ketika mengompresi beberapa file secara paralel. Jadi saya jalankan di terminal lain:
gzip file2.json
gzip file3.json
gzip file4.json
Anehnya, throughput saya tidak meningkat; CPU adalah sekitar 25% pada setiap inti, dan HD saya masih hanya membaca pada 25 MB / s.
Mengapa dan bagaimana cara mengatasinya?
dd
melakukan hal yang sama?dd
bisa melakukan hal yang sama denganbs=
opsinya, ya.Setelah melihat sekitar lima kuliah pertama di MIT OpenCourseware untuk 6.172: "Rekayasa Kinerja Sistem Perangkat Lunak", saya menjalankan 'perf' penganalisa kinerja Linux pada file tes yang cukup besar. Hasilnya muncul untuk menunjukkan warung pipa di mana satu instruksi harus menunggu hasil dari yang sebelumnya.
Instruksi terakhir kedua adalah menyalin ke
%ecx
dan yang terakhir harus menunggu (menghentikan jalur pipa) sampai%cx
register memiliki data yang siap digunakan. Kios pipa ini menahan loop yang berisi.Ini adalah hasil dari gaya pemrograman C 'old-school' yang benar-benar tidak jelas.
sumber
Tip yang mungkin membawanya ke tingkat kecepatan lain pada CPU multi-core / hyperthreading:
(dengan asumsi Ubuntu)
moreutils mengandung antara lain "gnu parallel" - yang memiliki banyak opsi untuk membantu menggunakan lebih banyak CPU Anda.
sumber