Modo de ligação de rede 802.3ad no Ubuntu 12.04 e um switch Cisco

4

Estou tentando reunir três placas de rede em dois servidores. Eu estou tentando alcançar um throughput máximo de 3Gbps para replicar dados entre os servidores. A configuração é simples, eu tenho 2 servidores com placa de rede de 3 Gigabits conectados no mesmo switch Cisco. Exatamente na porta 1-2-3 para o servidor 1 e na porta 4-5-6 para o servidor 2. Minha configuração de interfaces parece:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual
        bond-master bond0

auto eth1
iface eth1 inet manual
        bond-master bond0

auto eth2
iface eth2 inet manual
        bond-master bond0

auto bond0
iface bond0 inet static
        address 192.168.1.11
        netmask 255.255.255.0
        gateway 192.168.1.1

        bond-miimon 100
        bond-mode 802.3ad
        #bond-downdelay 200
        #bond-updelay 200
        bond-lacp-rate 1
        # tried bond with slaves and no slaves interfaces
        bond-slaves eth0 eth1 eth2 
        # bond-slaves none

Eu tentei várias configurações nesses cartões, mas sempre acabo usando apenas uma placa de rede no momento.

Eu testei o desempenho com iperf e netcat

# server-1
iperf -s

# server-2 
iperf -c 192.168.1.10

# Wait for trafic
nc.traditional -l -p 5000 | pv > /dev/null 

# Push trafic
dd if=/dev/zero | pv | nc.traditional 192.168.1.11 5000

Nós também tentamos muitas configurações no switch Cisco, sem canal de porta e com canal de porta e sempre apenas uma placa de rede usada no momento. Se testarmos individualmente cada cartão, eles trabalham a 1Gbps.

Eu também posso dizer que em / proc / net / bonding / bond0 o modo mostra 802.3ad e a taxa de LACP mostra FAST. Eu não tenho nenhuma falha na contagem de links e as 3 interfaces aparecem. Eu também verifico cada interface eth com ethtool e elas parecem bem para mim.

Eu estava seguindo este guia para configurar o link e habilitei o módulo de ligação no kernel com modprobe bonding e quando eu uso lsmod para verificar se o módulo de ligação está ativo, sim, ele está na lista.

O que estamos perdendo para que isso funcione?

    
por drivard 11.02.2013 / 18:39

3 respostas

4

Você nunca obterá mais do que 1 desempenho da NIC entre dois servidores. Os switches não distribuem os quadros de uma única fonte entre vários links em um LAG (Link Aggregation Group, grupo de agregação de links). O que eles realmente fazem é codificar o MAC ou IP de origem (ou ambos) e usar esse hash para atribuir o cliente a uma NIC.

Assim, o seu servidor pode transmitir em quantas NICs você quiser, mas esses quadros serão todos enviados para o servidor de destino em um link.

    
por 11.02.2013 / 19:16
4

Para testar os LAGs, use vários threads para que eles usem vários links. Usando o netperf tente:

netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &
netperf -H ipaddress &

Você deve ver parte do tráfego atingindo os outros escravos no vínculo.

Eu tenho quatro portas de 10GbE em uma ligação LACP e estou recebendo 32Gb a 36Gb entre os dois servidores.

A outra maneira é configurar aliases no vínculo com vários endereços IP e, em seguida, iniciar várias instâncias do netperf nos diferentes endereços.

O seu servidor com os processadores Intel Xeon X5690 tem mais energia suficiente para conduzir perto de 10 Gb por núcleo.

Eu direcionei o tráfego unidirecional de 80 GB para as portas 8x1GbE. A chave é usar o hashing l3 + l4 no switch e nas NICs e usar vários threads.

Aqui está um exemplo da minha configuração 4x10GbE ... Meu arquivo de configuração da interface:

#Ports that will be used for VXLAN Traffic in on Bond0
auto p4p1
auto p4p2
auto p6p1
auto p6p2

iface p4p1 inet manual
bond-master bond0

iface p4p2 inet manual
bond-master bond0

iface p6p1 inet manual
bond-master bond0

iface p6p2 inet manual
bond-master bond0

#Configure Bond0. Setup script will provide VXLAN VLAN configuration on bond0
auto bond0
iface bond0 inet manual
#address 10.3.100.60
#netmask 255.255.0.0
bond-mode 4
bond-slaves none
bond-lacp-rate 0
bond-ad-select 1
bond-miimon 100
bond-xmit_hash_policy 1

cat / proc / net / bonding / bond0

root@host2:~# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

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: slow
Min links: 0
Aggregator selection policy (ad_select): bandwidth
Active Aggregator Info:
    Aggregator ID: 2
    Number of ports: 4
    Actor Key: 33
    Partner Key: 32768
    Partner Mac Address: 54:7f:ee:e3:01:41

Slave Interface: p6p1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:e4
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p4p2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:69
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p4p1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:68
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: p6p2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 90:e2:ba:47:2b:e5
Aggregator ID: 2
Slave queue ID: 0

Aqui está o resultado da execução de várias instâncias do netperf:

root@host6:~# vnstat -i bond0.192 -l
Monitoring bond0.192...    (press CTRL-C to stop)

   rx:    36.83 Gbit/s 353202 p/s          tx:   162.40 Mbit/s 314535 p/s

bond0.192  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------
  bytes                   499.57 GiB  |        2.15 GiB
--------------------------------------+------------------
          max           36.90 Gbit/s  |   170.52 Mbit/s
      average           20.05 Gbit/s  |    86.38 Mbit/s
          min               0 kbit/s  |        0 kbit/s
--------------------------------------+------------------
  packets                   39060415  |        34965195
--------------------------------------+------------------
          max             369770 p/s  |      330146 p/s
      average             186891 p/s  |      167297 p/s
          min                  0 p/s  |           0 p/s
--------------------------------------+------------------
  time                  3.48 minutes

Espero que isso ajude ...

    
por 27.11.2013 / 07:04
2

Desculpe por postar isso como uma resposta. Não é possível adicionar um comentário à resposta de @ longneck, possivelmente devido à falta de reputação ...?

É possível obter mais de um desempenho da NIC entre dois servidores, porque os switches são capazes de distribuir o tráfego com base não apenas no MAC / IP, mas também nos números das portas. Os dispositivos Cisco são bem capazes de fazer isso, mas você pode ter que configurar o switch para ver as portas L4 em vez de apenas os endereços L2 e L3, que podem ser o padrão.

A verdadeira razão pela qual você provavelmente não obterá mais do que 1 desempenho da NIC entre os dois servidores é porque 1Gbps bidirecional é MUITO tráfego para qualquer CPU moderna. Eu não sei quão gruelty seus servidores são, mas se os servidores estão fazendo coisas significativas com cada pacote que recebe, então eu ficaria surpreso se os servidores podem lidar com 1Gbps full duplex.

Desculpe, não pretendia pisar na resposta do @ longneck acima, só queria esclarecer alguns pontos adicionais.

    
por 11.02.2013 / 23:55