A opção de compactação -z com rsync acelera o backup

37

In rsync, -zcomprime os dados do arquivo durante a transferência.

Se bem entendi, -zcomprima os arquivos antes da transferência e descompacte-os após a transferência. O tempo reduzido durante a transferência devido à compactação supera o tempo para compactação e descompactação?

A resposta à pergunta depende se eu faço backup em um disco rígido externo via usb (2.0 ou 3.0) ou em um servidor por ssh pela internet?

Tim
fonte
Lembre-se também de que se o arquivo compactado não diferir muito em tamanho do arquivo original, isso pode ser uma sobrecarga enorme.
precisa saber é
11
Para elaborar o que o heemayl diz, se o conteúdo já é amplamente material em formato compactado (jpeg, mpeg, pacotes de distribuição etc.), a compactação é muito menos eficaz. Percebo man rsyncque, de fato, existe uma lista de sufixos de arquivo que não serão compactados nem com -z(consulte --skip-compress).
509

Respostas:

46

É uma pergunta geral. A compactação e descompactação nos pontos de extremidade melhoram a largura de banda efetiva de um link?

A largura de banda efetiva (percebida) de um link que compacta e descompacta nos pontos de extremidade é uma função de:

  1. quão rápido você pode compactar (a velocidade da CPU)
  2. largura de banda real da sua rede

A função é descrita neste gráfico 3D, que você pode consultar para sua situação específica:

insira a descrição da imagem aqui

O gráfico é originado no artigo Compression Tools Compared 2005 de http://www.linuxjournal.com/ .

PSkocik
fonte
11
Seu tipo de dados também é um fator importante (fator 3 que falta na lista). O artigo vinculado usa uma combinação típica de dados. O seu pode não ser típico. Se você estiver sincronizando arquivos ZIP 100% (ou qualquer dado pré-compactado), provavelmente não deseja compactação. Se você estiver sincronizando arquivos de texto 100%, poderá ser mais rápido compactá-lo, mesmo que sua rede seja rápida e sua CPU seja lenta. Pese todos os três fatores.
Richard Brightwell
13

Se você tem uma conexão muito lenta (pense em GPRS), definitivamente deseja compactar seus dados o máximo possível, caso contrário, sua conexão diminuirá a velocidade.

Se você possui uma CPU muito lenta e uma conexão rápida (como um dispositivo de rede incorporado), normalmente não deseja compactar seus dados; caso contrário, sua CPU diminuirá a velocidade.

michas
fonte
3

Depende de quão compactáveis ​​são seus dados e do poder de processamento de sua fonte e destino. Um backup completo do disco, na minha experiência, comprimirá cerca de 30 a 50% do seu tamanho original; portanto, vale a pena tentar. Caso contrário, não se preocupe com a compressão. Pode valer a pena testar sua taxa de compactação pigz -c <your file> | wc -ce comparar o tamanho retornado com o tamanho original.

RAKK
fonte
2

Sim, a velocidade da conexão determina se as coisas aceleram. Será uma sobrecarga apenas para backup USB, porque não os discos inflam os dados, mas o processo que os grava. Portanto, a mesma máquina que lê e esvazia, também precisa inflar e escrever. Acho que o Rsync ainda é dois processos, mas sua memória para entregar dados de um processo para outro é rápida o suficiente e a CPU precisa de mais tempo para compactá-los (enquanto lê na mesma memória que depois os entrega :).

A compactação ajuda apenas quando você tem um remetente e um receptor rsync e uma rede mais lenta no meio. 1Gbit já pode ser rápido o suficiente quando você tem um NAS local, por exemplo, 10Gbit já é a velocidade SATA bruta. Portanto, a compactação só é necessária quando você possui 100Mbit ou menos de conectividade e só faz sentido quando os dados compactados são compactáveis.

Acho que o rsync pode perceber que ele não roda em duas máquinas, mas uma e ignora a compactação, mas não tem certeza.

René Schwietzke
fonte
1

tl; dr Nos links de transferência lenta, comprima, caso contrário não. Abaixo está um teste de velocidade de compressão, um link para uma ferramenta de conversão de largura de banda e algumas informações.

O uso de compressão com rsyncapenas acelerará as coisas se o link intermediário for "lento o suficiente", ou seja, se a máquina em uma extremidade for capaz de produzir um fluxo de dados compactados rápido o suficiente para saturar o link de comunicação.

Então, qual é o link mais lento no qual devo usar a compactação para obter alguma coisa?

A seguir, um teste não científico, que mostrará a rapidez com gzipque os dados podem ser produzidos e o que isso significa para você compactar as transferências em massa da rede em geral.

Os dados de entrada mudarão bastante o resultado do teste . Estou usando um arquivo normal não compactado (!) No meu computador, que pode ser representativo do tipo de dados que eu normalmente transfiro pelas redes. Usar /dev/zero(produzir zeros ilimitados) seria enganoso, pois um fluxo de zeros seria muito fácil de compactar e /dev/randomseria enganoso pelo motivo oposto. Então, em vez disso, uso um arquivo tar do meu $HOME/localdiretório, que contém o software que instalei no meu diretório $HOME. O arquivo é descompactado por si só, mas contém uma mistura de arquivos binários, pequenos arquivos compactados e arquivos de origem / texto, e eu o compactaria com a configuração padrão, gzippois diminuiria 67% de 64 MiB para 22 MiB.

$ gzip -c local.tar | dd of=/dev/null
43092+4 records in
43093+1 records out
22063854 bytes transferred in 2.819 secs (7825741 bytes/sec)

Faço isso algumas vezes para ter uma ideia de qual pode ser a média e chega a cerca de 7800000 bytes / s.

Então eu uso uma calculadora de largura de banda de rede para ver em que isso se converte. Nesse caso em particular, é um pouco menor que a capacidade de um link com fio "100Mb Ethernet", um pouco mais rápido que um link de internet "VDSL Download", um pouco mais rápido que um link sem fio "802.11 [a / g]" e em algum lugar entre "Bluetooth v3.0" (mais lento) e "USB 2.0" (mais rápido).

Isso significa que, se eu estiver usando a compactação em algo mais rápido que isso, a compactação provavelmente diminuirá a transferência do arquivo.

rsyncpode não estar usando exatamente as mesmas bibliotecas que gzippara fazer a compactação, mas as opções acima dariam uma dica, pelo menos.

rsyncfaz mais do que comprimir, como você sabe, e o aumento real da velocidade vem apenas da transferência de [bits de] arquivos que foram alterados.

Na minha própria experiência, o uso de compressão com rsynctornou-se cada vez menos benéfico nos últimos 10 anos, com o aumento da largura de banda das redes (onde estou).

Para fazer backups incrementais, eu recomendaria definitivamente investigar a --link-destopção (isso não tem nada a ver com o que é transferido, apenas com o modo como as coisas são armazenadas no destino). Além disso, se você estiver fazendo isso por SSH, não use compactação se a sua conexão SSH já estiver compactada e comprima apenas conexões SSH (túneis etc.) que estão em links lentos, pelos mesmos motivos acima.

Kusalananda
fonte