Maillage MCX516A-CCAT sur DAC 100G : lshw annonce 40 Gbit/s et un seul flux iperf3 plafonne à 21 Gbit/s
Nous faisons tourner un cluster de trois nœuds câblés directement entre eux en DAC 100G, aucun switch dans le chemin, et les interfaces sont montées en bond broadcast pour que le trafic de réplication ait son propre tissu. Avant de mettre une vraie charge dessus je voulais une base de référence, et les chiffres ne s'accordent pas entre eux.
- 3x Mellanox ConnectX-5 EN, MCX516A-CCAT, double port QSFP28
- un DAC 100G entre chaque paire de nœuds
- hôtes AMD EPYC, Proxmox sur les trois
ethtool est parfaitement content :
# ethtool ens1
Settings for ens1:
Supported link modes: 100000baseCR4/Full
Advertised link modes: 100000baseCR4/Full
Speed: 100000Mb/s
Duplex: Full
Link detected: yes
lshw ne l'est pas :
# lshw -class network
*-network
description: Ethernet interface
vendor: Mellanox Technologies
capacity: 40Gbit/s
Et iperf3 entre deux des nœuds se stabilise autour de 21 Gbit/s, ce qui n'est proche d'aucun des deux chiffres.
Déjà fait :
- déplacé le câble vers le second port sur les deux cartes, aucun changement
- remplacé par un autre DAC du même type, aucun changement
- le lien reste up tout du long, aucune erreur qui grimpe sur les compteurs
Alors lequel des deux outils me ment, et est-ce le câble, la carte ou le driver que je devrais viser ?
Comments 5
Rien de ce que vous avez posté ne pointe vers le DAC. Il y a deux choses sans rapport qui se passent ici.
D'abord, le désaccord.
lshw -class networkaffiche un chiffre de capacité qu'il calcule tout seul, et sur ces cartes il dira allègrementcapacity: 40Gbit/sà propos d'un lien monté à 100G. Le débit négocié, c'estethtoolqui le rapporte, et le vôtre indiqueSpeed: 100000Mb/savec100000baseCR4/Fullannoncé. Cette partie-là est correcte, il n'y a rien à corriger.Ensuite, le débit réel. Vérifiez le slot avant de toucher à autre chose :
Si
LnkStas'est entraîné à 2.5GT/s alors queLnkCapannonce 8GT/s, vous êtes plafonné bien en dessous du câble et aucun échange de câble n'y changera rien. Réinsérez la carte et assurez-vous qu'elle est dans un slot réellement câblé à la pleine largeur.Ensuite arrêtez de mesurer avec un seul flux :
Environ 21 Gbit/s, c'est à peu près ce qu'un seul cœur vous donnera sur cette classe d'hôte, donc ce chiffre seul vous dit très peu de choses. Surveillez le CPU pendant le test et regardez aussi ce que font les états d'inactivité : des cœurs qui tombent dans des C-states profonds entre les rafales vous coûtent de la vraie bande passante à ce débit.
Avant de commander quoi que ce soit en remplacement, postez la ligne
LnkStadelspci -vvpour cette carte et la ligne de commande iperf3 exacte que vous avez utilisée. Un seul flux à 100G mesure un seul cœur CPU, pas le lien, et les gens perdent des jours là-dessus. Et confirmez que le second port porte vraiment l'autre branche du maillage pendant votre test, plutôt que de rester inactif : un slot alimentant deux ports 100G actifs, c'est un budget différent d'un seul. Je mettraislshwde côté pour l'instant, ce n'est pas l'outil pour cette question.Une correction sur la partie C-states : si les hôtes sont EPYC, les réglages
intel_idlequ'on colle dans chacun de ces fils ne vous servent à rien, ce driver n'est même pas dans le chemin sur AMD. Le levier qui a fonctionné pour moi étaitprocessor.max_cstate=2sur la ligne de commande du noyau. Même idée, plateforme différente. Le reste de ce message tient, en particulier le fait de ne pas lire un débit négocié danslshw.Panne légèrement différente, même famille de matériel, ça vaut la peine de l'écarter une fois le slot réglé : un maillage direct de ports ConnectX-5 QSFP28 est très facile à mal configurer en couche 3. J'avais trois nœuds en MCX516A-CCA_Ax, firmware 16.35.4030 avec le driver DOCA 2.8.0, câblés avec des DAC cuivre MCP1600-C003E30L de 3 m. Chaque lien s'affichait actif à 100 Gbit/s et pas un seul ping ne passait. Les six interfaces du maillage avaient toutes des adresses issues d'un seul sous-réseau 10.5.5.x sans aucun switch dans le chemin, donc le noyau n'avait aucun moyen de décider à quel port physique appartenait une destination donnée. Un sous-réseau par paire de nœuds, 10.5.5.x, 10.5.6.x et 10.5.7.x, et ça s'est mis à fonctionner. Ça vaut la peine de lancer
ip aetip routesur les trois boîtiers avant que quelqu'un accuse le cuivre.Les deux points ont fait mouche.
lspci -vvmontrait la carte entraînée à 2.5GT/s contre unLnkCapde 8GT/s, donc c'était le suspect numéro un. J'ai déplacé les cartes vers d'autres slots sur les trois boîtiers,LnkStamonte maintenant à 8GT/s, et aveciperf3 -P 8la même paire de nœuds a immédiatement dépassé le chiffre à flux unique.J'ai aussi abandonné le bond broadcast et reconstruit le maillage sur Open vSwitch avec RSTP. Avec iperf réparti sur trois threads CPU et les deux ports, je mesure maintenant environ 95 Gbit/s, ce qui est assez proche du débit de ligne pour ce que fait ce cluster.
lshwcontinue d'affirmer 40Gbit/s et j'ai arrêté de le regarder.