Interfaces de Gigabit ligadas com ~ 500mbps cada

3

Esta questão tem me deixado louca por dias agora! Eu juntei recentemente as interfaces eth0 / eth1 em alguns servidores linux no bond1 com as seguintes configurações (mesmo em todos os sistemas):

DEVICE=bond0
ONBOOT=yes
BONDING_OPTS="miimon=100 mode=4 xmit_hash_policy=layer3+4 
lacp_rate=1" 
TYPE=Bond0
BOOTPROTO=none

DEVICE=eth0
ONBOOT=yes
SLAVE=yes
MASTER=bond0
HOTPLUG=no
TYPE=Ethernet
BOOTPROTO=none

DEVICE=eth1
ONBOOT=yes
SLAVE=yes
MASTER=bond0
HOTPLUG=no
TYPE=Ethernet
BOOTPROTO=none

Aqui você pode ver o status da ligação:     Driver de Ligação de Canal Ethernet: v3.6.0 (26 de setembro de 2009)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: fast
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
    Aggregator ID: 3
    Number of ports: 2
    Actor Key: 17
    Partner Key: 686
    Partner Mac Address: d0:67:e5:df:9c:dc

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:25:90:c9:95:74
Aggregator ID: 3
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:25:90:c9:95:75
Aggregator ID: 3
Slave queue ID: 0

E as saídas do Ethtool:

Settings for bond0:
Supported ports: [ ]
Supported link modes:   Not reported
Supported pause frame use: No
Supports auto-negotiation: No
Advertised link modes:  Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 2000Mb/s
Duplex: Full
Port: Other
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
Link detected: yes

Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supported pause frame use: Symmetric
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised pause frame use: Symmetric
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 1
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: Unknown
    Supports Wake-on: pumbg
    Wake-on: g
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: yes

Settings for eth1:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supported pause frame use: Symmetric
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised pause frame use: Symmetric
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 1
    Transceiver: internal
    Auto-negotiation: on
    MDI-X: Unknown
    Supports Wake-on: pumbg
    Wake-on: d
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: yes

Os servidores estão conectados ao mesmo switch Dell PCT 7048, com as duas portas para cada servidor adicionadas ao seu próprio LAG dinâmico e configuradas para o modo de acesso. Tudo parece bem, certo? E ainda, aqui estão os resultados da tentativa de testes iperf de um servidor para o outro, com 2 threads:

    ------------------------------------------------------------
Client connecting to 172.16.8.183, TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 172.16.8.180 port 14773 connected with 172.16.8.183 port     5001
[  3] local 172.16.8.180 port 14772 connected with 172.16.8.183 port     5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec   561 MBytes   471 Mbits/sec
[  3]  0.0-10.0 sec   519 MBytes   434 Mbits/sec
[SUM]  0.0-10.0 sec  1.05 GBytes   904 Mbits/sec

Claramente as duas portas estão sendo usadas, mas não em qualquer lugar perto de 1Gbps -  que é o que eles trabalharam individualmente antes de ligá-los. Eu tentei todos os tipos de diferentes modos de ligação, tipos de hash xmit, tamanhos de mtu, etc etc, mas simplesmente não é possível obter as portas individuais para exceder 500 Mbits / seg ..... é quase como se o próprio Bond está sendo limitado para 1G em algum lugar! Alguém tem alguma ideia?

Adição 1/19: Obrigado pelos comentários e perguntas, vou tentar respondê-las aqui, pois ainda estou muito interessado em maximizar o desempenho desses servidores. Primeiro, limpei os contadores de interface no comutador Dell e, em seguida, deixei servir o tráfego de produção um pouco. Aqui estão os contadores para as 2 interfaces que compõem o vínculo do servidor de envio:

  Port      InTotalPkts      InUcastPkts      InMcastPkts      
InBcastPkts
--------- ---------------- ---------------- ---------------- --------
--------
Gi1/0/9           63113512         63113440               72                
0

  Port      OutTotalPkts     OutUcastPkts     OutMcastPkts     
OutBcastPkts
--------- ---------------- ---------------- ---------------- --------
--------
Gi1/0/9           55453195         55437966             6075             
9154

  Port      InTotalPkts      InUcastPkts      InMcastPkts      
InBcastPkts
--------- ---------------- ---------------- ---------------- --------
--------
Gi1/0/44          61904622         61904552               48               
22

  Port      OutTotalPkts     OutUcastPkts     OutMcastPkts     
OutBcastPkts
--------- ---------------- ---------------- ---------------- --------
--------
Gi1/0/44          53780693         53747972               48            
32673

Parece que o tráfego está sendo perfeitamente balanceado com carga - mas os gráficos de largura de banda ainda mostram quase exatamente 500 mbps por interface, quando rx e tx são combinados:

Eutambémpossodizercomcertezaque,quandoeleestáservindootráfegodeprodução,eleestáconstantementepressionandopormaislarguradebandaeestásecomunicandocomváriosoutrosservidoresaomesmotempo.

Editar#21/19:Zordache,vocêmefezpensarquetalvezostestesdoIperfestivessemsendolimitadospeloladoderecebimentousandoapenas1portaehaviaapenas1interface,entãoexecutei2instânciasdoserver1simultaneamenteeexecutei"iperf" -s "no servidor2 e no servidor3. Em seguida, executei os testes Iperf do server1 para os servidores 2 e 3 ao mesmo tempo:

iperf -c 172.16.8.182 -P 2
------------------------------------------------------------
Client connecting to 172.16.8.182, TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 172.16.8.225 port 2239 connected with 172.16.8.182 port 
5001
[  3] local 172.16.8.225 port 2238 connected with 172.16.8.182 port 
5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec   234 MBytes   196 Mbits/sec
[  3]  0.0-10.0 sec   232 MBytes   195 Mbits/sec
[SUM]  0.0-10.0 sec   466 MBytes   391 Mbits/sec

iperf -c 172.16.8.183 -P 2
------------------------------------------------------------
Client connecting to 172.16.8.183, TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  3] local 172.16.8.225 port 5565 connected with 172.16.8.183 port 
5001
[  4] local 172.16.8.225 port 5566 connected with 172.16.8.183 port 
5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   287 MBytes   241 Mbits/sec
[  4]  0.0-10.0 sec   292 MBytes   244 Mbits/sec
[SUM]  0.0-10.0 sec   579 MBytes   484 Mbits/sec

As duas somas adicionadas ainda não ultrapassam 1Gbps! Quanto à sua outra pergunta, meus canais de porta estão configurados com apenas as duas linhas a seguir:

hashing-mode 7
switchport access vlan 60

O modo de hash 7 é o "Enhanced Hashing" da Dell. Ele não diz especificamente o que faz, mas eu tentei vários combos dos outros 6 modos, que são:

Hash Algorithm Type
1 - Source MAC, VLAN, EtherType, source module and port Id
2 - Destination MAC, VLAN, EtherType, source module and port Id
3 - Source IP and source TCP/UDP port
4 - Destination IP and destination TCP/UDP port
5 - Source/Destination MAC, VLAN, EtherType, source MODID/port
6 - Source/Destination IP and source/destination TCP/UDP port
7 - Enhanced hashing mode

Se você tiver alguma sugestão, fico feliz em tentar os outros modos novamente ou alterar as configurações no meu canal de porta.

    
por Jeremy 19.01.2018 / 01:34

2 respostas

3

No computador, sua ligação está usando a política de hash Transmit Hash Policy: layer3+4 , basicamente significando que a interface usada para uma determinada conexão é baseada no ip / port.

Seu teste do iperf está entre dois sistemas, e o iperf usa uma única porta. Portanto, todo o tráfego do iperf provavelmente será limitado a um único membro da interface vinculada.

Não sei ao certo o que você está vendo que faz você pensar que as duas interfaces estão sendo usadas ou que metade delas está sendo manipulada por cada interface. O Iperf acaba de relatar os resultados por thread . Não por interface. Seria mais interessante ver os contadores de interface no switch.

Você mencionou brincar com diferentes modos de hash. Como você está se conectando a um switch, também é necessário mudar os modos de hash do switch. A configuração no seu computador só se aplica a pacotes transmitidos. Você também precisa configurar o modo de hash no switch (se isso for mesmo uma opção com seu hardware).

A colagem não é útil quando usada entre dois sistemas. A ligação não oferece a largura de banda total de ambas as interfaces, apenas permite que você tenha algumas conexões usando uma interface e outras usam a outra. Existem alguns modos que podem ajudar um pouco entre dois sistemas, mas é uma melhoria de 25 a 50% na melhor das hipóteses. Você quase nunca consegue a capacidade total de ambas as interfaces.

    
por 19.01.2018 / 02:13
0

O único modo de ligação que pode aumentar o rendimento de uma única conexão TCP é balance-rr (ou modo 0) . Esses modos de ligação realmente "distribuem" seus pacotes de saída em 2 (ou mais) interfaces disponíveis. No entanto, tem suas próprias armadilhas:

  • a encomenda correta de pacotes não é garantida;
  • afeta somente os pacotes de saída ;
  • nem sempre é seguro com switches (o que pode detectá-lo como uma forma de envenenamento por MAC / flapping);
  • não é um modo LACP padrão.

De documentação do kernel do Linux :

balance-rr: This mode is the only mode that will permit a single TCP/IP connection to stripe traffic across multiple interfaces. It is therefore the only mode that will allow a single TCP/IP stream to utilize more than one interface's worth of throughput. This comes at a cost, however: the striping generally results in peer systems receiving packets out of order, causing TCP/IP's congestion control system to kick in, often by retransmitting segments.

Para um exemplo real de como usar o balance-rr, leia aqui

Voltar à sua configuração: como você está usando o 802.3ad / mode 4 (LACP), o seu sistema não pode usar várias interfaces para uma única conexão. Ao abrir um único fluxo TCP ou UDP, iperf não se beneficia do LACP. Por outro lado, um protocolo que reconhece várias sessões (por exemplo: SMB 3.0+) pode usar totalmente suas interfaces adicionais.

    
por 19.01.2018 / 22:16