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

10

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 -P2para 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-policyo 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!

Zetten
fonte

Respostas:

18

Uma explicação rápida e suja é que uma única linha de comunicação usando o LACP não dividirá pacotes em várias interfaces. Por exemplo, se você tiver uma única conexão TCP de streaming de pacotes do HostA para o HostB, ela não abrangerá interfaces para enviar esses pacotes. Ultimamente, tenho pesquisado muito no LACP uma solução em que estamos trabalhando, e esse é um equívoco comum de que 'conectar' ou 'trunking' várias interfaces de rede com o LACP fornece uma "taxa de transferência" das interfaces combinadas. Alguns fornecedores criaram drivers proprietários que rotearão sobre várias interfaces, mas o padrão LACP não é o que eu li. Aqui está um link para um diagrama e uma explicação decentes que encontrei na HP ao pesquisar sobre problemas semelhantes: http://www.hp.com/rnd/library/pdf/59692372.pdf

Mike Naylor
fonte
1
Tudo isso faz sentido. Não tenho ideia de por que não havia descoberto meu equívoco antes; Devo estar apenas contornando os termos de pesquisa e as páginas de documentação corretas. Parece que, dependendo do hardware da rede, poderemos mudar o modo de hash src-dest e ter sorte na taxa de transferência de várias interfaces, mas acho que, nesta fase, ficarei feliz com o que temos. Obrigado por seus esclarecimentos e pelo link muito útil.
Zetten
Feliz em ajudar. Ultimamente, tenho lido muito sobre isso, tentando obter esclarecimentos sobre a terminologia que trata do entroncamento e da ligação que é usada de maneira diferente por diferentes fornecedores. Descobri que fora dos padrões específicos, tais como os definidos por fornecedores IEEE tendem a usar alguns termos de forma intercambiável ...
Mike Naylor
6
O documento não está mais disponível no URL original, mas ainda pode ser acessado no Internet Archive: web.archive.org/web/20030324105208/http://www.hp.com/rnd/…
smbear
3

bond-xmit-hash-policy layer3+4define 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.

MSalters
fonte
2

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?

mortenya
fonte
Como a outra resposta descrita, o problema subjacente era o meu entendimento do LACP, mas apenas para preencher a imagem: as caixas do linux estão usando o driver de ligação do kernel. Cada interface individualmente pode aumentar a taxa de transferência de quase-gigabit (aparentemente cerca de 110-117MB / s, dependendo do outro tráfego), então eu estava realmente apenas tentando aumentar essa largura de banda em vez de ajustar as NICs individuais. Quanto aos switches, temos um site com vários escritórios e existem switches de entroncamento com mux / demux de fibra e vários outros bits e bobs no caminho. Eu tinha os dois servidores em um switch HP 2920-48G para teste.
Zetten
O iperf possui um --parallelparâmetro que controla o número de fluxos de clientes paralelos a serem executados
8.8.8.8