Estou vendo algum comportamento confuso em relação às interfaces vinculadas no Linux e gostaria de apresentar a situação na esperança de que alguém possa esclarecer isso para mim.
Eu tenho dois servidores: o Servidor 1 (S1) possui conexões Ethernet de 4x 1Gbit; O servidor 2 (S2) possui duas conexões Ethernet de 1 Gbit. Ambos os servidores estão executando o Ubuntu 12.04, embora com o kernel 3.11.0-15 (do pacote lts-saucy linux-generic).
Ambos os servidores têm todas as suas respectivas interfaces de rede agrupadas em uma única interface bond0 com a seguinte configuração (pol /etc/network/interfaces
):
bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate fast
bond-slaves eth0 eth1 [eth2 eth3]
Entre os servidores, há alguns comutadores HP que estão (eu acho) configurados corretamente para o LACP nas portas em questão.
Agora, o link está funcionando - o tráfego da rede flui alegremente de e para as duas máquinas. E todas as respectivas interfaces estão sendo usadas, portanto, não é como se a agregação estivesse falhando completamente. No entanto, preciso da maior largura de banda possível entre esses dois servidores e não estou conseguindo os ~ 2Gbit / s que esperaria.
Nos meus testes, posso observar que cada servidor parece alocar cada conexão TCP (por exemplo, iperf, scp, nfs, o que for) a uma única interface escrava. Basicamente, tudo parece estar limitado a no máximo 1 gigabit.
Por definição bond-xmit-hash-policy layer3+4
, eu posso usar iperf -c S1 -P2
para enviar em duas interfaces escravas, mas no lado do servidor, a recepção ainda está ocorrendo apenas em uma interface escrava e, portanto, a taxa de transferência total é limitada em 1Gbit / s, ou seja, o cliente mostra ~ 40-50MB / s em duas interfaces escravas, o servidor mostra ~ 100 MB / s em uma interface escrava. Sem configurar bond-xmit-hash-policy
o envio também é limitado a uma interface escrava.
Fiquei com a impressão de que o LACP deveria permitir esse tipo de pacote de conexão, permitindo, por exemplo, uma única transferência scp para fazer uso de todas as interfaces disponíveis entre os dois hosts.
O meu entendimento do LACP está errado? Ou eu perdi algumas opções de configuração em algum lugar? Todas as sugestões ou pistas para investigação seriam muito apreciadas!
bond-xmit-hash-policy layer3+4
define o balanceamento de carga do servidor de origem para o comutador. Ele não define o algoritmo de balanceamento de carga do seu switch para o segundo servidor. Isso quase certamente ainda está equilibrado na camada 2 ou 3, ou seja, nem um pouco.fonte
Bem, primeiro, quando você estiver usando um driver de formação de equipes, isso criará uma sobrecarga e reduzirá a taxa de transferência máxima esperada, que é de ~ 940 MB / s em um adaptador de 1 GB, em ~ 10%.
Não tenho certeza de que tipo de adaptador você possui, mas se você estiver usando drivers na caixa, as configurações provavelmente não são ideais para a taxa de transferência máxima. você pode considerar adicionar filas, até 4, pois uma única fila no adaptador provavelmente não pode atingir a taxa de conexão.
Outra consideração é que um segmento do iperf provavelmente não terá velocidade máxima. Para 1 GB, 2-6 threads é provavelmente o ideal, você pode usar um script bash simples para iniciar vários threads ao mesmo tempo.
Para uma NIC da Intel, mas o RSS e o hardware RSC podem afetar a taxa de transferência, na Broadcom verifique se o TOE está funcionando.
A primeira etapa, no entanto, seria remover os GALs e apenas tentar testar 1 porta de tráfego em cada sistema para ver quanto throughput ele obtém, faça isso com todas as portas e tente 2. LACP é uma besta instável para se configurar certo, e nunca tentei configurá-lo em um switch HP, apenas no Force10 (pré-Dell).
Além disso, por que existem algumas opções?
fonte
--parallel
parâmetro que controla o número de fluxos de clientes paralelos a serem executados