Herramienta de compresión adaptable al tiempo

Herramienta de compresión adaptable al tiempo

Estoy preguntando sobre un escenario de copiar un archivo grande a un servidor remoto.

Un caso más simple es:

tar c myfile | ssh myserver tar x

Si la conectividad de la red es rápida, entonces todo está bien.

En una red más lenta lo hago

tar c myfile | bzip2 -1 | ssh myserver tar xj

- hacer mi transferencia más rápida a costa del tiempo de CPU.

Por supuesto, puedo jugar con la relación de compresión, normalmente tratando de adivinar la correcta para que mi CPU no esté demasiado ocupada y la red esté saturada.

¿Existe una utilidad de compresión o un indicador de compresión que le indique a bzip2/ xz/... que comprima tanto como sea posible mientras el búfer de salida está ocupado?

Respuesta1

zstd --adapt

Elzstdutilidad de compresióntiene una opción que activa la compresión adaptativa (la opción se agregó en zstdv1.3.6). Esto ajustaría la compresión a "las condiciones de E/S percibidas actualmente".

Consulte el zstdmanual para obtener más información.

Una canalización completa puede verse así:

tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'

o

tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'zstd -d | tar -x -C /someplace -f -'

Si agrega -val primero zstden el proceso, obtendrá una línea indicadora de progreso que dice algo como

(L7) Buffered :  32 MB - Consumed : 192 MB - Compressed :  72 MB => 37.50%

donde (L7)indica el nivel de compresión. Para cualquier cantidad de datos moderadamente grande, se esperaría que fluctuara con el tiempo, lo que demuestra que zstdefectivamente se está adaptando a las condiciones de E/S (y presumiblemente también a los datos mismos).

información relacionada