acelerar la compresión gzip

15

¿Es posible acelerar el gzipproceso?

Estoy usando

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

para hacer una copia de seguridad de una base de datos en un directorio $BACKUP_DIR,.

la página del manual dice:

- # --fast --best
Regula la velocidad de compresión usando el dígito especificado #, donde -1 o --fast indica el método de compresión más rápido (menos compresión) y -9 o --best indica el método de compresión más lento ( mejor compresión). El nivel de compresión predeterminado es -6 (es decir, sesgado hacia una compresión alta a expensas de la velocidad).

  • ¿Qué tan efectivo sería usar --fast?
  • ¿Está esto efectivamente reduciendo el uso de la CPU en una computadora moderna?

Los resultados de mi prueba

No noté ninguna aceleración:

  • 7 min, 47 segundos (con relación predeterminada -6)
  • 8 min, 36 segundos (con relación --fast(= 9))

Entonces, ¿parece que lleva más tiempo usar la compresión rápida?

Solo una compresión más alta realmente lo ralentiza:

  • 11 min, 57 segundos (con relación --best(= 1))

Después de obtener la Idea, también lzoplo probé y realmente es más rápido:

  • 6 min, 14 segundos con lzop -1 -f -o $BACKUP_DIR/$database_name.sql.lzo
rubo77
fuente
¿Le preocupa el tiempo de CPU o el tiempo general (reloj)? --mejor es 9, - rápido es 1.
Stéphane Chazelas
3
Si gzip -1no es lo suficientemente rápido, uselzop
Stéphane Chazelas
1
También hay lz4que es aún más rápido ver este punto de referencia . Pero parece que lzop y lz4 necesitan mucha más memoria. ¿Será un problema en mi 1GB RAM de un solo núcleo que lz4 usa 30 veces más memoria en compresión que gzip cuando comprimo algunas bases de datos grandes?
rubo77
lz4 no necesita tanta memoria. Si está utilizando la utilidad lz4c, entonces casi toda la memoria está asignada para el búfer de E / S. Puede reducir eso utilizando memorias intermedias más pequeñas (opción -B4 para memorias intermedias de 64 KB). Dado que los búferes más pequeños también significan una peor compresión, es útil habilitar la compresión de bloque encadenado (opción -BD). Ver: fastcompression.blogspot.fr/2013/08/…
Cyan

Respuestas:

19

Si tiene una máquina multinúcleo que usa pigz es mucho más rápido que el gzip tradicional.

pigz, que significa implementación paralela de gzip, es un reemplazo completamente funcional para gzip que explota múltiples procesadores y múltiples núcleos hasta el fondo cuando se comprimen datos. Pigz fue escrito por Mark Adler y utiliza las bibliotecas zlib y pthread.

Pigz se puede usar como un reemplazo directo para gzip. Tenga en cuenta que solo la compresión puede ser paralelizada, no la descompresión.

Usando pigz la línea de comando se convierte

mysqldump "$database_name" | pigz > $BACKUP_DIR/$database_name.sql.gz
Marco
fuente
¿esto también acelera el proceso en un solo núcleo?
rubo77
@ rubo77: no, esto despliega la compresión en múltiples núcleos.
slm
pigzaumenta el uso de la CPU, pero reduce el tiempo de reloj que tarda en multiprocesadores
Stéphane Chazelas
De hecho, y eso es a menudo lo que se desea. Y generalmente (dependiendo del hardware) la compresión gzip está vinculada a la CPU (rendimiento de subproceso único) y la compresión pigz a menudo está vinculada a la 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
fuente
3

Si necesita que sea rápido debido a problemas de bloqueo de la base de datos, y tiene un disco lo suficientemente rápido / grande como para contener los datos sin comprimir temporalmente, puede considerar usar este método en su lugar:

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

Es decir, almacene primero la copia de seguridad (que es más rápida que comprimirla SI el disco es rápido y la CPU es lenta) y luego haga que la compresión ocurra en segundo plano.

Esto también podría permitirle usar un mejor algoritmo de compresión, ya que ya no importa (directamente) cuánto tiempo lleva la compresión.

Frostschutz
fuente