Taxa de transferência máxima da agregação de link (LACP / 802.3ad)

9

Estou vendo um comportamento confuso em relação às interfaces vinculadas no Linux e gostaria de lançar a situação na esperança de que alguém possa esclarecer isso para mim.

Eu tenho dois servidores: o servidor 1 (S1) tem 4 conexões Ethernet de 1 Gbit; O servidor 2 (S2) tem 2 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 possuem todas as suas respectivas interfaces de rede agrupadas em uma única interface bond0 com a seguinte configuração (em /etc/network/interfaces ):

bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate fast
bond-slaves eth0 eth1 [eth2 eth3]

Entre os servidores estão alguns switches da 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, então não é como se a agregação estivesse falhando completamente. No entanto, eu preciso da maior largura de banda possível entre esses dois servidores, e não estou recebendo os ~ 2Gbit / s que eu esperaria.

No meu teste, posso observar que cada servidor parece alocar cada conexão TCP (por exemplo, iperf, scp, nfs, o que for) para uma única interface escrava. Essencialmente tudo parece limitado a um máximo de 1 gigabit.

Definindo bond-xmit-hash-policy layer3+4 , 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 o throughput total é limitado a 1Gbit / s, ou seja o cliente mostra ~ 40-50MB / s em duas interfaces escravas, o servidor mostra ~ 100MB / s em uma interface escrava. Sem definir bond-xmit-hash-policy , o envio também é limitado a uma interface escrava.

Eu estava com a impressão de que o LACP deveria permitir esse tipo de conexão, permitindo, por exemplo, que uma única transferência scp fizesse uso de todas as interfaces disponíveis entre os dois hosts.

O meu entendimento sobre o LACP está errado? Ou perdi algumas opções de configuração em algum lugar? Quaisquer sugestões ou pistas para investigação seriam muito apreciadas!

    
por Zetten 22.01.2014 / 15:39

3 respostas

16

Uma explicação rápida e suja é que uma única linha de comunicação usando o LACP não dividirá os pacotes em várias interfaces. Por exemplo, se você tiver um único pacote de streaming de conexão TCP de HostA para HostB, ele não abrangerá as interfaces para enviar esses pacotes. Eu tenho procurado muito o LACP aqui ultimamente por uma solução em que estamos trabalhando e este é um equívoco comum que 'unir' ou 'entroncamento' de múltiplas interfaces de rede com o LACP oferece a você um "throughput" das interfaces combinadas. Alguns fornecedores criaram drivers proprietários que serão roteados em várias interfaces, mas o padrão LACP não é o que eu li. Aqui está um link para um diagrama decente e uma explicação que encontrei da HP, enquanto procurava por problemas semelhantes: link

    
por 22.01.2014 / 18:14
3

bond-xmit-hash-policy layer3+4 define o balanceamento de carga do seu servidor de origem para o comutador. Ele não define o algoritmo de balanceamento de carga do seu switch para o segundo servidor. É quase certo que ainda é a camada 2 ou a camada 3 equilibrada, ou seja, não é de todo.

    
por 07.05.2015 / 16:47
1

Bem, primeiro, quando você estiver usando um driver de equipe, isso criará alguma sobrecarga e diminuirá a taxa de transferência máxima esperada, que é de ~ 940 MB / s em um adaptador de 1 GB, em aproximadamente 10%.

Não sei ao certo que tipo de adaptador você tem, mas se você estiver usando drivers nativos, as configurações provavelmente não são ideais para o rendimento máximo. você poderia considerar adicionar filas, até 4, já que uma única fila no adaptador provavelmente não pode atingir a taxa de transmissão.

Outra consideração, é que um segmento de iperf provavelmente não obterá velocidades máximas. Para 1GB, 2-6 threads é provavelmente mais ideal, você pode usar um script bash simples para iniciar vários threads ao mesmo tempo.

Para uma Intel NIC, mas a RSS e o hardware RSC podem afetar a taxa de transferência, na Broadcom, certifique-se de que o TOE esteja funcionando.

O primeiro passo, porém, seria remover os LAGs e tentar testar 1 porta de tráfego em cada sistema para ver quanto de throughput ele recebe, faça isso com todas as portas, tente 2. O LACP é uma fera inconstante para configure-se corretamente, e nunca tentei configurá-lo em um switch HP, apenas no Force10 (pré-Dell).

Além disso, por que existem alguns interruptores?

    
por 22.01.2014 / 17:10