Débit maximal d'agrégation de liens (LACP / 802.3ad)

10

Je vois un comportement déroutant concernant les interfaces liées sous Linux et je voudrais jeter la situation là-bas dans l'espoir que quelqu'un puisse l'éclaircir pour moi.

J'ai deux serveurs: le serveur 1 (S1) a 4 connexions Ethernet 1 Gbit; Le serveur 2 (S2) dispose de 2 connexions Ethernet 1 Gbit. Les deux serveurs exécutent Ubuntu 12.04, bien qu'avec le noyau 3.11.0-15 (du package lts-saucy linux-generic).

Les deux serveurs ont toutes leurs interfaces réseau respectives regroupées dans une seule interface bond0 avec la configuration suivante (en /etc/network/interfaces):

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

Entre les serveurs, il y a quelques commutateurs HP qui sont (je pense) correctement configurés pour LACP sur les ports en question.

Maintenant, le lien fonctionne - le trafic réseau circule facilement vers et depuis les deux machines. Et toutes les interfaces respectives sont utilisées, donc ce n'est pas comme si l'agrégation échouait complètement. Cependant, j'ai besoin d'autant de bande passante que possible entre ces deux serveurs, et je n'obtiens pas les ~ 2 Gbit / s que j'attendrais.

Lors de mes tests, je peux observer que chaque serveur semble allouer chaque connexion TCP (par exemple iperf, scp, nfs, peu importe) à une seule interface esclave. Essentiellement, tout semble plafonné à un maximum de 1 gigabit.

En définissant bond-xmit-hash-policy layer3+4, je peux utiliser iperf -c S1 -P2pour envoyer sur deux interfaces esclaves, mais côté serveur, la réception ne se produit toujours que sur une interface esclave et le débit total est donc plafonné à 1 Gbit / s, c'est-à-dire que le client affiche ~ 40-50 Mo / s sur deux interfaces esclaves, le serveur affiche ~ 100 Mo / s sur une interface esclave. Sans réglage, bond-xmit-hash-policyl'envoi est également limité à une interface esclave.

J'avais l'impression que LACP devrait autoriser ce type de regroupement de connexions, permettant, par exemple, un seul transfert scp pour utiliser toutes les interfaces disponibles entre les deux hôtes.

Ma compréhension de LACP est-elle mauvaise? Ou ai-je manqué quelque part des options de configuration? Toute suggestion ou indice d'enquête serait très apprécié!

Zetten
la source

Réponses:

18

Une explication rapide et grossière est qu'une seule ligne de communication utilisant LACP ne divisera pas les paquets sur plusieurs interfaces. Par exemple, si vous avez une seule connexion TCP en streaming des paquets de HostA vers HostB, elle ne s'étendra pas sur les interfaces pour envoyer ces paquets. J'ai beaucoup regardé LACP ici récemment pour une solution sur laquelle nous travaillons et c'est une idée fausse commune que la «liaison» ou la «jonction» de plusieurs interfaces réseau avec LACP vous donne un «débit» des interfaces combinées. Certains fournisseurs ont créé des pilotes propriétaires qui seront acheminés sur plusieurs interfaces, mais la norme LACP ne correspond pas à ce que j'ai lu. Voici un lien vers un diagramme et une explication décents que j'ai trouvés de HP lors de la recherche sur des problèmes similaires: http://www.hp.com/rnd/library/pdf/59692372.pdf

Mike Naylor
la source
1
Tout cela a du sens. Je n'ai aucune idée pourquoi je n'avais pas découvert plus tôt mon idée fausse; Je viens de contourner les bons termes de recherche et les bonnes pages de documentation. Il semble que, selon le matériel réseau, nous pourrions être en mesure de changer le mode de hachage src-dest et d'avoir de la chance sur le débit multi-interface, mais je pense qu'à ce stade, je serai simplement satisfait de ce que nous avons. Merci pour vos éclaircissements et le lien très utile.
Zetten
Heureux de vous aider. J'ai lu beaucoup de choses à ce sujet ces derniers temps en essayant d'obtenir des éclaircissements sur la terminologie relative aux liaisons et aux liaisons qui est utilisée différemment par les différents fournisseurs. J'ai trouvé qu'en dehors de normes spécifiques telles que celles définies par les fournisseurs IEEE, on a tendance à utiliser certains termes de manière interchangeable ...
Mike Naylor
6
Le document n'est plus disponible sur l'URL d'origine, mais il est toujours accessible via Internet Archive: web.archive.org/web/20030324105208/http://www.hp.com/rnd/…
smbear
3

bond-xmit-hash-policy layer3+4définit l'équilibrage de charge de votre serveur source vers le commutateur. Il ne définit pas l'algorithme d'équilibrage de charge de votre commutateur vers le deuxième serveur. Cela est presque certainement encore équilibré en couches 2 ou 3, c'est-à-dire pas du tout.

MSalters
la source
2

Eh bien, tout d'abord, lorsque vous utilisez un pilote d'association, cela créera une surcharge et réduira le débit maximal attendu, qui est de ~ 940 Mo / s sur un adaptateur de 1 Go, de ~ 10%.

Je ne sais pas quel type d'adaptateur vous avez, mais si vous utilisez des pilotes intégrés, les paramètres ne sont probablement pas idéaux pour le débit maximal. vous pouvez envisager d'ajouter des files d'attente, jusqu'à 4, car une seule file d'attente sur l'adaptateur ne peut probablement pas atteindre le débit de connexion.

Une autre considération est qu'un fil d'iperf n'obtiendra probablement pas de vitesse maximale. Pour 1 Go, 2 à 6 threads sont probablement plus idéaux, vous pouvez utiliser un simple script bash pour lancer plusieurs threads en même temps.

Pour une carte réseau Intel, mais RSS et RSC matériel peuvent affecter le débit, sur Broadcom assurez-vous que la TOE fonctionne.

La première étape, cependant, serait de supprimer les LAG et de simplement essayer de tester 1 port de trafic sur chaque système pour voir le débit qu'il obtient, faites-le avec tous les ports, puis essayez 2. LACP est une bête inconstante à configurer à droite, et je n'ai jamais essayé de le configurer sur un commutateur HP, seulement Force10 (pré-Dell).

Aussi, pourquoi y a-t-il quelques commutateurs?

mortenya
la source
Comme l'autre réponse l'a décrit, le problème sous-jacent était ma compréhension de LACP, mais juste pour remplir l'image: les boîtes Linux utilisent le pilote de liaison du noyau. Chaque interface peut pousser individuellement un débit proche du max-gigabit (apparemment environ 110-117 Mo / s en fonction de l'autre trafic), je cherchais donc vraiment à augmenter cette bande passante plutôt qu'à régler les cartes réseau individuelles. En ce qui concerne les commutateurs, nous avons un site multi-bureaux et il y a des commutateurs de jonction avec fibre mux / demux et divers autres bits et bobines sur le chemin. J'avais cependant les deux serveurs sur un commutateur HP 2920-48G pour les tests.
Zetten
iperf a un --parallelparamètre qui contrôle le nombre de flux de clients parallèles à exécuter
8.8.8.8