O
SCP é uma implementação do protocolo SSH2 sobre o OpenSSH e o desempenho de transferência da rede é limitada por buffers de controle de fluxo internos que são estaticamente definidos.
Estes buffers muitas vezes acabam agindo como um gargalo para a taxa de transferência da rede, não permitindo que toda a velocidade do link seja aproveitada, especialmente em links de rede onde se possui uma grande largura de banda.
Pensando nisso foi desenvolvido o projeto
HPN-SSH pelo Centro de Supercomputação de Pittsburgh (PSC) que consiste em um patch que modifica o código fonte do OpenSSH permitindo que os buffers sejam definidos em tempo de execução, eliminando assim o gargalo.
O HPN-SSH é totalmente compatível com outros servidores e clientes SSH, assim clientes HPN são capazes de fazer download mais rápido de servidores não HPN, e servidores HPN são capazes de receber uploads mais rápido dos clientes não HPN.
O patch adiciona uma série de características úteis ao desempenho sem comprometer a segurança, que pode aumentar em até 20x vezes a transferência de dados. Porém essa melhoria é dependente de uma série de questões, como velocidade de transferência da rede, taxa de I/O do sistema, incluindo a velocidade do disco e memória, capacidade do processador para realizar a codificação e descodificação.
A versão oficial do OpenSSH faz uso apenas de um núcleo do processador, o HPN-SSH possui adição da cifra AES multi-thread, aproveitando de forma inteligente os recursos de máquinas multi-core.
É possível obter os patches e saber mais sobre HPN-SSH em:
Para instalar o OpenSSH-HPN de forma fácil em uma máquina com Ubuntu, basta adicionar o repositório com os pacotes já compilados, utilize os comandos abaixo:
sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:w-rouesnel/openssh-hpn
$ sudo apt-get update -y
$ sudo apt-get install openssh-server
Para obter a máxima performance é recomendável que você faça um ajuste nas configurações de redes
Linux TCP/IP.
Abaixo seguem as linhas que devem ser adicionadas ao arquivo de configuração
sysctl.conf. Para uma explicação detalhada de cada alteração acesse:
sudo vim /etc/sysctl.conf
net.ipv4.netfilter.ip_conntrack_max=103728
# optimization start
# increase TCP max buffer size setable using setsockopt()
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
# increase Linux auto tuning TCP buffer limits
# min, default, and max number of bytes to use
# set max to at least 4MB, or higher if you use very high BDP paths
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
# optimization end
Utilize o comando abaixo para aplicar as configurações:
sudo sysctl -p
Caso queira ver detalhes do servidor e cliente SSH, use a opção "-v" ao efetuar novas conexões, como na linha abaixo:
ssh usuario@host -v
Espero ter ajudado!
Abraços.