Saya biasanya mengompres menggunakan tar zcvf
dan menggunakan kompresi tar zxvf
(menggunakan gzip karena kebiasaan).
Saya baru saja mendapatkan CPU quad core dengan hyperthreading, jadi saya memiliki 8 core logis, dan saya perhatikan bahwa banyak core yang tidak digunakan selama kompresi / dekompresi.
Apakah ada cara saya bisa memanfaatkan inti yang tidak digunakan untuk membuatnya lebih cepat?
Jawaban:
Anda dapat menggunakan pigz bukan gzip, yang melakukan kompresi gzip pada beberapa core. Alih-alih menggunakan opsi -z, Anda akan mengirimkannya melalui pigz:
Secara default, pigz menggunakan jumlah core yang tersedia, atau delapan jika tidak bisa menanyakan itu. Anda dapat meminta lebih banyak dengan -pn, misalnya -p 32. pigz memiliki opsi yang sama dengan gzip, sehingga Anda dapat meminta kompresi yang lebih baik dengan -9. Misalnya
sumber
Anda juga dapat menggunakan flag tar "--use-compress-program =" untuk memberi tahu tar program kompresi apa yang digunakan.
Misalnya gunakan:
sumber
tar - dir_to_zip | pv | pigz > tar.file
pv membantu saya memperkirakan, Anda bisa melewatkannya. Tetapi tetap lebih mudah untuk menulis dan mengingat.man tar
mengatakan demikian, seperti halnya ini .zstd
adalah alat tercepat untuk melakukan ini. Speedup terlihat saat mengompresi dan mendekompresi. Gunakantar -cf --use-compress-program=zstdmt
untuk melakukannya dengan multi-threading.Pendekatan umum
Ada opsi untuk
tar
program:Anda dapat menggunakan utilitas pengarsipan atau kompresor versi multithread.
Pengarsip multithread yang paling populer adalah pigz (bukan gzip) dan pbzip2 (bukan bzip2). Misalnya:
Pengarsip harus menerima -d. Jika utilitas pengganti Anda tidak memiliki parameter ini dan / atau Anda perlu menentukan parameter tambahan, maka gunakan pipa (tambahkan parameter jika perlu):
Input dan output singlethread dan multithread kompatibel. Anda dapat mengompres menggunakan versi multithread dan mendekompres menggunakan versi singlethread dan sebaliknya.
p7zip
Untuk p7zip untuk kompresi, Anda memerlukan skrip shell kecil seperti berikut:
Simpan sebagai 7zhelper.sh. Berikut contoh penggunaannya:
xz
Mengenai dukungan XZ multithreaded. Jika Anda menjalankan versi 5.2.0 atau lebih tinggi dari XZ Utils, Anda dapat menggunakan beberapa core untuk kompresi dengan mengatur
-T
atau--threads
ke nilai yang sesuai melalui variabel lingkungan XZ_DEFAULTS (misXZ_DEFAULTS="-T 0"
.).Ini adalah fragmen manusia untuk versi 5.1.0alpha:
Namun ini tidak akan berfungsi untuk dekompresi file yang belum dikompres dengan mengaktifkan threading. Dari manusia untuk versi 5.2.2:
Kompilasi ulang dengan penggantian
Jika Anda membuat tar dari sumber, maka Anda dapat mengkompilasi ulang dengan parameter
Setelah mengkompilasi ulang tar dengan opsi-opsi ini Anda dapat memeriksa output dari bantuan tar:
sumber
pigz
) hanya diaktifkan ketika membaca dari file. Pemrosesan STDIN mungkin lebih lambat.xz
opsi. Ini pendekatan paling sederhana, namun efektif.export XZ_DEFAULTS="-T 0"
sebelum memanggiltar
dengan opsi-J
untuk kompresi xz bekerja seperti pesona.Anda dapat menggunakan pintasan
-I
untuk--use-compress-program
sakelar tar , dan menjalankanpbzip2
kompresi bzip2 pada banyak inti:sumber
tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
`Jika Anda ingin lebih fleksibel dengan nama file dan opsi kompresi, Anda dapat menggunakan:
Langkah 1:
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
Perintah ini akan mencari file yang ingin Anda arsipkan, dalam hal ini
/my/path/*.sql
dan/my/path/*.log
. Tambahkan sebanyak yang-o -name "pattern"
Anda inginkan.-exec
akan menjalankan perintah berikutnya menggunakan hasil darifind
:tar
Langkah 2:
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
adalah parameter penggantian string sederhana. Ini akan menghapus jalur file dari arsip sehingga root tarball menjadi direktori saat ini saat mengekstraksi. Perhatikan bahwa Anda tidak dapat menggunakan-C
opsi untuk mengubah direktori karena Anda akan kehilangan manfaat darifind
: semua file direktori akan disertakan.-P
memberitahutar
untuk menggunakan jalur absolut, sehingga tidak memicu peringatan "Menghapus awalan` / 'dari nama anggota ". Memimpin '/' dengan dihapus--transform
bagaimanapun juga.-cf -
memberitahutar
untuk menggunakan nama tarball yang akan kita tentukan nanti{} +
menggunakan everyfile yangfind
ditemukan sebelumnyaLangkah 3:
pigz
pigz -9 -p 4
Gunakan sebanyak mungkin parameter yang Anda inginkan. Dalam hal ini
-9
adalah tingkat kompresi dan-p 4
jumlah inti yang didedikasikan untuk kompresi. Jika Anda menjalankan ini pada server web yang sarat muatan, Anda mungkin tidak ingin menggunakan semua inti yang tersedia.Langkah 4: nama arsip
> myarchive.tar.gz
Akhirnya.
sumber
Alat kompresi (de) yang relatif lebih baru yang mungkin ingin Anda pertimbangkan adalah standar . Itu melakukan pekerjaan yang sangat baik dalam memanfaatkan core cadangan, dan telah membuat beberapa trade-off besar ketika datang ke rasio kompresi vs (de) waktu kompresi. Ini juga sangat dapat disesuaikan tergantung pada kebutuhan rasio kompresi Anda.
sumber