accélérer la compression gzip

15

Est-il possible d'accélérer le gzipprocessus?

j'utilise

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

pour sauvegarder une base de données dans un répertoire $BACKUP_DIR,.

la page de manuel dit:

- # --fast --best
Réglez la vitesse de compression en utilisant le chiffre spécifié #, où -1 ou --fast indique la méthode de compression la plus rapide (moins de compression) et -9 ou --best indique la méthode de compression la plus lente ( meilleure compression). Le niveau de compression par défaut est -6 (c'est-à-dire biaisé vers une compression élevée au détriment de la vitesse).

  • Quelle serait son efficacité --fast?
  • Est-ce que cela réduit efficacement l'utilisation du processeur sur un ordinateur moderne?

Mes résultats de test

Je n'ai remarqué aucune accélération:

  • 7 min, 47 secondes (avec rapport par défaut -6)
  • 8 min, 36 secondes (avec rapport --fast(= 9))

Il semble donc qu'il faut encore plus de temps pour utiliser la compression rapide?

Seule une compression plus élevée la ralentit vraiment:

  • 11 min, 57 secondes (avec rapport --best(= 1))

Après avoir obtenu l'idée avec, lzopj'ai testé cela aussi et c'est vraiment plus rapide:

  • 6 min, 14 secondes avec lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo
rubo77
la source
Êtes-vous préoccupé par le temps CPU ou le temps global (horloge)? - le meilleur est 9, - le rapide est 1.
Stéphane Chazelas
3
Si ce gzip -1n'est pas assez rapide, utilisezlzop
Stéphane Chazelas
1
Il y a aussi lz4ce qui est encore plus rapide voir ce benchmark . Mais il semble que lzop et lz4 aient besoin de beaucoup plus de mémoire. y aura-t-il un problème sur ma mémoire RAM simple cœur de 1 Go que lz4 utilise 30 fois plus de mémoire en compression que gzip lorsque je compresse certaines grandes bases de données?
rubo77
lz4 n'a pas besoin de beaucoup de mémoire. Si vous utilisez l'utilitaire lz4c, presque toute la mémoire est allouée au tampon d'E / S. Vous pouvez réduire cela en utilisant des tampons plus petits (option -B4 pour les tampons de 64 Ko). Étant donné que des tampons plus petits signifient également une compression pire, il est utile d'activer la compression de bloc chaîné (option -BD). Voir: fastcompression.blogspot.fr/2013/08/…
Cyan

Réponses:

19

Si vous avez une machine multicœur, pigz est beaucoup plus rapide que gzip traditionnel.

pigz, qui signifie implémentation parallèle de gzip, est un remplacement entièrement fonctionnel de gzip qui exploite plusieurs processeurs et plusieurs cœurs jusqu'à la poignée lors de la compression des données. pigz a été écrit par Mark Adler et utilise les bibliothèques zlib et pthread.

Pigz peut être utilisé en remplacement de gzip. Notez que seule la compression peut être parallélisée, pas la décompression.

En utilisant pigz, la ligne de commande devient

mysqldump "$database_name" | pigz > $BACKUP_DIR/$database_name.sql.gz
Marco
la source
cela accélère-t-il également le processus sur un seul cœur?
rubo77
@ rubo77 - non, cela améliore la compression sur plusieurs cœurs.
slm
pigzaugmente l'utilisation du processeur mais réduit le temps d'horloge qu'il prend sur les multi-processeurs
Stéphane Chazelas
En effet, et c'est souvent ce que l'on souhaite. Et généralement (en fonction du matériel), la compression gzip est liée au processeur (performances à un seul thread) et la compression pigz est souvent liée aux E / S.
Marco
5

De 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
la source
3

Si vous avez besoin qu'il soit rapide en raison de problèmes de verrouillage de la base de données et que vous disposez d'un disque suffisamment rapide / volumineux pour conserver temporairement les données non compressées, vous pouvez envisager d'utiliser cette méthode à la place:

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

C'est-à-dire stocker la sauvegarde en premier (ce qui est plus rapide que le compresser si le disque est rapide et le CPU est lent) et ensuite le compresser se produit en arrière-plan.

Cela peut également vous permettre d'utiliser un meilleur algorithme de compression, car il n'a plus d'importance (directement) combien de temps prend la compression.

frostschutz
la source