Por que scp com compactação é mais lento que sem?

10

Eu precisava transferir um arquivo vdisk de 20 GB KVM , armazenando o sistema de arquivos raiz de uma VM do CentOS 6.5, de um servidor de laboratório para outro. O tamanho do arquivo grande e o fato de eu ter compactado um arquivo vdisk para algumas centenas de mega-bytes me instintivamente ativaram a compactação, scpmas fiquei surpreso ao ver uma velocidade de transferência bastante baixa. Então eu tentei bzip2em combinação com sshe fiquei catsurpreso. Aqui está o resumo dos métodos e da taxa de transferência média.

  • scp -C vm1-root.img [email protected]:/mnt/vdisks/, 11 MB / s.
  • bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img", 5 MB / s. Esse resultado ainda mais baixo levou à pesquisa na Internet.
  • scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/13 MB / s. Esse uso de -c arcfourcomo foi sugerido em uma resposta em falha do servidor. Isso dificilmente ajudou. Por fim, desativei a compactação.
  • scp vm1-root.img [email protected]:/mnt/vdisks/23 MB / s.

A compressão não deveria ter sido mais rápida?

Edição: Eu não sei por que a questão foi votada. Eu pensei que há algo a ser aprendido aqui.

Depois de receber a ssh(1)dica da página de manual do @sven, tentei alguns métodos alternativos de transferência de arquivos que não envolviam compactação, ambos com melhores resultados.

  • cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img", 26 MB / s.

  • nc -l 5678 > /mnt/vdisks/vm1-root.imgno receptor e nc 192.168.161.62 5678 < vm1-root.imgno transmissor, 40 MB / s. A porta 5678é arbitrária e estava disponível.

Usar ncacabou sendo o método de cópia mais rápido!

No passado, scp -Cfuncionava muito bem sempre que eu pensava. Por exemplo, ao transferir syslogs ( /var/log/messages*) de poucos GBs de tamanho. Uma taxa de transferência não compactada de algumas centenas de KB / s aumentaria para 1-2 MB / s. Este exemplo ocorre no caso de uma conexão lenta, como foi indicado na página do manual.

Eu tenho um caso em que, uma imagem vdisk recém-criada para uma partição de 20 GB tem um tamanho compactado de apenas 200 MB. Com uma taxa de transferência de cerca de 25 MB / s, poderíamos fazer a cópia em apenas 8 segundos, em vez de mais de 13 minutos! Claramente, scpsem compactação é ineficiente nesse caso e scp -Cé ainda pior.

Acho que a principal lição aprendida aqui é que isso scp -Cdeve ser pensado apenas como uma conveniência. Se um arquivo puder ser compactado significativamente, é melhor compactá-lo primeiro na origem, transferir o formulário compactado e finalmente descompactar no destino. As ferramentas que executam a compactação e descompactação rapidamente (por exemplo, pbzip2 ) serão de grande ajuda.

pdp
fonte

Respostas:

9

Citação man ssh(que é a base usada por scp):

A compactação é desejável em linhas de modem e outras conexões lentas, mas apenas desacelera as coisas em redes rápidas.

O problema é que compactar os dados leva mais tempo do que enviá-los pela rede.

Sven
fonte
Ele estava perguntando especificamente por que a taxa de transferência era mais baixa, mas eu suspeito que o ssh calcule isso dividindo o tamanho dos dados pelo tempo total que toda a operação leva, e não separando a parte em que os dados são compactados e a parte em que os dados são copiados. rede.
Ernie
@ Ernie: Se você pode transmitir dados com uma velocidade de 20 MB / s, e o sistema pode entregá-los com 15 MB / s, porque a compactação é muito lenta, ela será transmitida com apenas 15 MB / s. É tudo o que há para isso.
Sven
@ Ernie: A taxa de transferência impressa scpinclui o tempo gasto na compactação / descompactação. Os valores relatados pareceriam surpreendentes se não fosse esse o caso.
Pdp
0

Além disso, além da compactação, o nc obtém a melhor taxa porque também não criptografa. E a compactação sem perdas depende da localização de seções redundantes dos dados, que, quando feitas no nível da rede, você pode ver no máximo [bytes de tamanho do buffer] bytes, quando, quando feito com o arquivo inteiro primeiro, são bytes [do tamanho do arquivo] dentro do qual caçar e processar frases de bytes duplicadas.

Também para mover imagens de disco, você deve usar uma ferramenta compatível com o sistema de arquivos, como ntfsclone / partclone, porque mesmo a compactação não consegue superar os blocos não alocados - sua taxa de transferência é infinita se você não precisar transferir nenhum dado. Além disso, não se esqueça de destruir os arquivos de troca e hibernação em uma partição do Windows ou, se você estiver copiando o lixo, ele será descartado e recriado de qualquer maneira.

Tony Butler
fonte