Ferramenta de compactação adaptável ao tempo

Ferramenta de compactação adaptável ao tempo

Estou perguntando sobre um cenário de cópia de um arquivo grande para um servidor remoto.

Um caso mais simples é:

tar c myfile | ssh myserver tar x

Se a conectividade de rede for rápida, está tudo bem.

Em uma rede mais lenta eu faço

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

- tornando minha transferência mais rápida ao custo do tempo de CPU.

É claro que posso brincar com a taxa de compactação, normalmente tentando adivinhar a correta para que minha CPU não fique muito ocupada e a rede fique saturada.

Existe um utilitário de compactação ou um sinalizador de compactação que diga bzip2a / xz/... para compactar o máximo possível enquanto o buffer de saída estiver ocupado?

Responder1

zstd --adapt

Ozstdutilitário de compactaçãopossui uma opção que ativa a compactação adaptativa (a opção foi adicionada na zstdv1.3.6). Isso ajustaria a compactação às "condições de E/S percebidas atualmente".

Consulte o zstdmanual para obter mais informações.

Um pipeline completo pode ser parecido com isto:

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

ou

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

Se você adicionar -vao primeiro zstdno pipeline, obterá uma linha indicadora de progresso dizendo algo como

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

onde (L7)indica o nível de compactação. Para qualquer quantidade moderadamente grande de dados, seria de esperar que ela flutuasse ao longo do tempo, mostrando que zstdestá de fato se adaptando às condições de E/S (e presumivelmente também aos próprios dados).

informação relacionada