Por que o scp não mostra a velocidade real de upload?

2

Sempre que estou tentando enviar um arquivo usando scp na minha conexão lenta de upload (~ 100kb / s), ele mostra algo como:

test                           27% 2208KB   2.2MB/s   00:02 ETA

No primeiro segundo eu comecei.

Obviamente, ele não transferiu 2208 KB, e definitivamente não está sendo transferido a 2,2 MB / s. Após alguns segundos, ele desce para uma velocidade correta, mas não volta para sua mentira anterior: em vez disso, quando a transferência termina, ela fica paralisada por segundos (ou minutos) até que a transferência esteja realmente concluída .

Eu já vi isso em todos os scp, em todos os linux, toda vez que minha velocidade de transferência é menor que 1MB / s.

O que está acontecendo com o SCP?

    
por blue112 30.03.2015 / 15:54

1 resposta

3

scp está medindo a taxa que os dados estão passando por it .

Basicamente, scp lê alguns dados do disco e os passa por um canal para ssh . Existe um buffer de pipe no kernel, embora seja bem pequeno. Então ssh criptografa e passa para o kernel para enviar pela rede. Esse buffer pode ser bastante grande.

Todo o armazenamento em buffer é bastante transparente para o aplicativo; Faz apenas como write chamada contra o tubo ou soquete. O kernel aceita os dados e não aponta para o aplicativo se ele está em um buffer ou foi realmente enviado e reconhecido pelo lado remoto. Existem maneiras de o aplicativo fazer perguntas, mas isso seria difícil para scp , já que ssh está manipulando o soquete.

O que você está vendo é que o preenchimento inicial de todos os buffers (principalmente o buffer de envio TCP) acontece rapidamente - e o scp está exibindo isso como sua taxa de transferência. No final, scp termina de ler o arquivo, envia para ssh sobre o pipe e espera que o ssh termine. ssh vê que scp terminou de enviar e espera que o kernel termine de liberar o buffer TCP. Essa é a pausa no final.

Acho que as únicas duas soluções (além de 'ignorar') são obter um link mais rápido ou diminuir o tamanho do buffer de envio TCP.

    
por 30.03.2015 / 16:25