mempercepat kompresi gzip

15

Apakah mungkin mempercepat gzipproses?

saya menggunakan

mysqldump "$database_name" | gzip > $BACKUP_DIR/$database_name.sql.gz

untuk membuat cadangan basis data ke dalam direktori $BACKUP_DIR,.

halaman buku mengatakan:

- # --fast --best
Mengatur kecepatan kompresi menggunakan digit yang ditentukan #, di mana -1 atau --fast menunjukkan metode kompresi tercepat (kompresi kurang) dan -9 atau --best menunjukkan metode kompresi paling lambat ( kompresi terbaik). Level kompresi default -6 (yaitu, bias terhadap kompresi tinggi dengan mengorbankan kecepatan).

  • Seberapa efektif penggunaannya --fast?
  • Apakah ini secara efektif menurunkan penggunaan CPU pada komputer modern?

Hasil tes saya

Saya tidak melihat adanya akselerasi:

  • 7 mnt, 47 detik (dengan rasio standar -6)
  • 8 mnt, 36 detik (dengan rasio --fast(= 9))

Jadi sepertinya butuh waktu lebih lama untuk menggunakan kompresi cepat?

Hanya kompresi yang lebih tinggi yang memperlambatnya:

  • 11 mnt, 57 detik (dengan rasio --best(= 1))

Setelah mendapatkan Ide dengan lzopsaya mengujinya juga dan itu benar-benar lebih cepat:

  • 6 mnt, 14 detik dengan lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo
rubo77
sumber
Apakah Anda khawatir tentang waktu CPU atau waktu keseluruhan (jam)? --best is 9, --fast is 1.
Stéphane Chazelas
3
Jika gzip -1tidak cukup cepat, gunakanlzop
Stéphane Chazelas
1
Ada juga lz4yang lebih cepat lagi melihat benchmark ini . Tapi sepertinya lzop dan lz4 membutuhkan lebih banyak memori. akankah ini menjadi masalah pada RAM 1GB RAM saya single-core yang menggunakan memori lz4 30 kali lebih banyak daripada kompresi gzip ketika saya kompres beberapa database besar?
rubo77
lz4 tidak membutuhkan banyak memori. Jika Anda menggunakan utilitas lz4c, maka hampir semua memori dialokasikan untuk buffer I / O. Anda dapat menguranginya dengan menggunakan buffer yang lebih kecil (opsi -B4 untuk buffer 64KB). Karena buffer yang lebih kecil juga berarti kompresi yang lebih buruk, ini berguna untuk mengaktifkan kompresi chained-block (option -BD). Lihat: fastcompression.blogspot.fr/2013/08/...
Cyan

Jawaban:

19

Jika Anda memiliki mesin multi-core menggunakan pigz jauh lebih cepat daripada gzip tradisional.

pigz, yang merupakan singkatan dari implementasi paralel dari gzip, adalah pengganti fungsional penuh untuk gzip yang mengeksploitasi banyak prosesor dan banyak core ke gagang saat mengompresi data. pigz ditulis oleh Mark Adler, dan menggunakan perpustakaan zlib dan pthread.

Pigz ca digunakan sebagai pengganti drop-in untuk gzip. Perhatikan bahwa hanya kompresi yang dapat diparalelkan, bukan dekompresi.

Menggunakan pigz, baris perintah menjadi

mysqldump "$database_name" | pigz > $BACKUP_DIR/$database_name.sql.gz
Marco
sumber
apakah ini juga mempercepat proses pada single-core?
rubo77
@ rubo77 - tidak ada penggemar ini yang keluar kompresi di beberapa core.
slm
pigzmeningkatkan penggunaan CPU tetapi menurunkan waktu jam yang dibutuhkan multi-prosesor
Stéphane Chazelas
Memang, dan itulah yang sering diinginkan. Dan biasanya (tergantung pada perangkat keras) kompresi gzip terikat CPU (kinerja single-thread) dan kompresi pigz sering terikat IO.
Marco
5

Dari man gzip:

   -# --fast --best
          Regulate  the  speed  of compression using the
          specified digit #, where -1  or  --fast  indi‐
          cates  the  fastest  compression  method (less
          compression) and -9 or  --best  indicates  the
          slowest compression method (best compression).
          The default compression level is -6 (that  is,
          biased  towards high compression at expense of
          speed).
terdon
sumber
3

Jika Anda membutuhkannya cepat karena masalah penguncian basis data, dan Anda memiliki disk yang cepat / cukup besar untuk menyimpan data yang tidak terkompresi untuk sementara, Anda dapat mempertimbangkan menggunakan metode ini sebagai gantinya:

mysqldump "$database_name" > "$BACKUP_DIR"/"$database_name".sql
nice gzip "$BACKUP_DIR"/"$database_name".sql &

Yaitu menyimpan cadangan pertama (yang lebih cepat daripada gzipping itu JIKA disk cepat dan CPU lambat) dan kemudian gzipping terjadi di latar belakang.

Ini juga memungkinkan Anda untuk menggunakan algoritma kompresi yang lebih baik, karena tidak lagi penting (secara langsung) berapa lama kompresi berlangsung.

frostschutz
sumber