Je teste les performances réseau de deux postes de travail, chacun ayant des processeurs Xeon quadricœurs 2,4 GHz et des adaptateurs serveur PCIe NC550SFP Dual Port 10GbE, connectés en direct.
J'ai vérifié la bande passante de la RAM, qui est d'environ 12 Gbps, donc pas de goulot d'étranglement ici. La vitesse du bus PCIe est également correcte.
Je teste le nombre maximum de paquets par seconde en utilisant la taille minimale de paquet pour l'UDP et les résultats sont misérables comparés à ceux-ci : 2012-lpc-networking-qdisc-fastabend.pdf (désolé, je ne peux poster qu'un seul lien). Si j'augmente la taille du paquet et la MTU, je peux atteindre presque la vitesse de la ligne (~9,9 Gbps).
J'utilise pktgen avec les scripts NST, des interfaces macvlan pour plusieurs threads, et je n'obtiens que ~1 Mpps, tous les quatre cœurs à 100%.
Pour améliorer les performances TX de pktgen, je suis tombé sur ce document : Mise à l'échelle dans la pile de réseau Linux
J'ai vérifié et oui, j'ai des qdiscs mq, ce qui devrait offrir les meilleures performances :
# ip link list | grep eth3
5: eth3: mtu 1500 qdisc mq state UP qlen 1000
Je pense que le problème vient du fait qu'une seule file TX est utilisée :
# dmesg | grep be2net
[ 4.528058] be2net 0000:01:00.1: irq 47 pour MSI/MSI-X
[ 4.528066] be2net 0000:01:00.1: irq 48 pour MSI/MSI-X
[ 4.528073] be2net 0000:01:00.1: irq 49 pour MSI/MSI-X
[ 4.528079] be2net 0000:01:00.1: irq 50 pour MSI/MSI-X
[ 4.528104] be2net 0000:01:00.1: 4 vecteurs MSI-x activés
[ 4.696026] be2net 0000:01:00.1: 4 files RSS créées et 1 file RX par défaut
[ 4.761108] be2net 0000:01:00.1: 1 file TX créée
J'ai eu un indice sur la manière d'activer plusieurs files TX à partir de Mise à l'échelle dans la pile de réseau Linux:
Le pilote pour une carte réseau capable de plusieurs files typiquement fournit un paramètre de module noyau ou spécifie le nombre de files matérielles à configurer. Dans le pilote bnx2x, par exemple, ce paramètre s'appelle num_queues. Une configuration RSS typique serait d'avoir une file de réception pour chaque CPU si le périphérique prend en charge suffisamment de files, sinon au moins une pour chaque domaine de mémoire, où un domaine de mémoire est un ensemble de CPUs qui partagent un niveau de mémoire particulier (L1, L2, nœud NUMA, etc.).
J'ai parcouru toute la documentation du pilote be2net d'Emulex, j'ai même envoyé un e-mail, sans succès. J'ai également survolé le code source du noyau.
J'ai la dernière version du noyau (3.10) sur Ubuntu 12.04 avec le dernier firmware sur les cartes réseau.
Des idées quelqu'un?
Merci!