Tornando o mbuffer mais rápido

1

Estou tentando transferir arquivos o mais rápido possível através de uma conexão de rede de 10 GB. Até agora, eu tenho usado o rsync para mover arquivos grandes pela rede, mas estou tentando usar o mbuffer agora porque já ouvi isso mais rápido. O problema é que não tenho um aumento tão grande no desempenho quanto esperado, especialmente porque estou usando uma conexão de rede de 10 GB entre os dois computadores.

Estes são meus argumentos de mbuffer atuais:

mbuffer -m 1G -s 512M -P 10 -i "$currentFile" | ssh $outputTarget "cat - > $outputDir/$filename" > $debugOut

Alguém tem alguma dica de como posso melhorar a velocidade na rede? Eu sou novo no mbuffer e realmente não sei quais argumentos funcionariam melhor para a minha situação. No momento, estou obtendo cerca de 110 MiB / s para um arquivo de 1 GB que fiz com números aleatórios.

    
por Inglonias 22.07.2015 / 17:01

1 resposta

1

Esta resposta provavelmente tarde demais para ajudar o OP, portanto, o seguinte é para a posteridade.

O gargalo provavelmente não tem nada a ver com o mbuffer, mas com o fato de que os dados estão sendo enviados por meio de uma conexão criptografada por ssh. Em outras palavras, o afunilamento é a velocidade na qual o processo ssh de encadeamento único pode criptografar o tráfego no host de envio e descriptografá-lo no host de destino.

Para o seu propósito, provavelmente é melhor usar a opção -O do mbuffer no remetente e a opção -I no receptor. Isso faz com que o mbuffer envie os dados diretamente através de um pipe TCP não criptografado, o que fará com que sua rede seja tão difícil quanto o sistema operacional, os drivers e o hardware permitirão.

É um processo de duas etapas porque você precisa executar o mbuffer no host de envio e no host de destino, assim:

  1. Primeiro, execute mbuffer no receptor. Ele irá escutar uma conexão na porta dada pela opção -I (5567 é apenas um exemplo; escolha seu próprio número de porta):

    ssh $outputTarget mbuffer -I 5567 \>$outputDir/$filename
    
  2. Em seguida, inicie a transferência no remetente:

    mbuffer -i "$currentFile" -O $outputTarget:5567
    

Como descrito acima, o processo de mbuffer de recebimento executado em $ outputTarget irá escutar e aceitar uma conexão TCP de qualquer pessoa que se conecte a esse socket, não apenas do processo de envio de arquivo que é iniciado na etapa 2. Então você precisa Ciente do fato de que o mbuffer, quando usado dessa maneira, não é tão seguro quanto o ssh, não apenas porque não há criptografia dos dados, mas também porque não há como ter certeza de que o remetente pretendido é o único iniciando uma conexão para a porta de escuta do receptor. A menos que alguém esteja escaneando a porta do seu receptor ou saiba o que você está fazendo e esteja tentando explorá-lo, a última ressalva raramente é problemática. A falta de criptografia, por outro lado, pode muito bem ser um show-stopper dependendo do caso de uso.

    
por 19.03.2017 / 21:53