Netperf, mesurer la performance de votre réseau en ligne de commande

Date: 23/02/2010 | Catégories: Open-source,Reseau | Tags: ,,

Netperf est un logiciel sous licence libre (GPL) permettant de simuler du trafic entre deux points d'un réseau. Edité par la société HP, la dernière version disponible (2.5.0) date de juillet 2011.

Contrairement à des logiciels comme Iperf qui se limite a une mesure de la bande passante et du délais, NetPerf permet, en plus du transfert de données, de simuler des transactions TCP et UDP. Nous allons voir dans ce billet comment installer et utiliser NetPerf pour optimiser notre réseau.

Mesure du débit utile

Le test le plus courant demandé à NetPerf est de mesurer le débit de notre réseau, c'est à dire la quantité d'information (donnée) que l'on peut transporter en une seconde d'un point A (client) vers un point B (serveur). Nous utiliserons pour cela les scénarios TCP_STREAM (pour un transfert TCP) ou UDP_STREAM  (pour un transfert UDP).

Lors de l'installation sous Ubuntu, le daemon serveur est lancé automatiquement en écioutant sur le port 12345 (il faut pensé à ajouter les règles de firewall qui vont bien pour autoriser le/les clients NetPerf à se connecter sur le serveur).  A vérifier avec la commande "ps auxw | grep netserver" avant de saisir la commande suivante:

serveur# sudo netserver

Pour la suite du billet je prendrai comme hypothèse le fait que le serveur est lancé.

Ensuite on lance le client:

client# netperf -H server -t TCP_STREAM

Après quelques secondes, le client devrait afficher:

On a donc un débit d'environ 3.43Mbit/sec.

Optimisation du débit utile

Comme vous le savez (ou pas), le débit utile en TCP peut être optimisé en jouant sur la valeur des "buffers" de réception et d'émission (dans les noyaux Linux récents, ces valeurs sont calculés et adaptés dynamiquement). NetPerf peut être utilisé pour tester les valeurs de "buffers" idéales pour votre réseau en procédant de la manière suivante:

On fait le test initial (sans optimisation):

client# netstat -s -p tcp > beforestat

client# netperf -H server -t TCP_STREAM > beforeres

On fait le test final (avec optimisation).

On peut par exemple utiliser pour cela les options -s et -S qui fixent respectivement la taille des "buffers" du client et du serveur. Ou bien ajouter le support des options CORK pour l'optimisation de la taille des MSS (-C) et de l'algorithme Nagle (-D).

Il faut faire attention de mettre ces options après l'option -- (pour préciser que ces options sont celle de TCP_STREAM).

client# netperf -H server -t TCP_STREAM -- -s 128k -S 128k -C -D > afterres

client# netstat -s -p tcp > afterstat

On peut ensuite comparer les deux fichiers de résultats.

# diff beforeres afterres

> 87380 16384 16384 10.43 3.43
---
< 87380 16384 16384 10.27 3.73
Soit un gain de 300 Kbps.

Pour comparer les stats TCP on peut récupérer le programme C "BeforeAfter" de HP:

# ./beforeafter beforestat afterstat

Pour effectuer un test de débit dans le sens inverse (c'est à dire du serveur/netserver vers le client/netperf), on peur utiliser l'option TCP_MAERTS.

client# netperf -H server -t TCP_MAERTS

Mesure des transactions

Le débit utile n'est pas forcement une mesure capitale dans les performances d'un réseau. Si l'on prend l'exemple d'un trafic de type Web (HTML), c'est la capacité a faire rapidement des transactions (requêtes/réponses) qui est importante. NetPerf propose donc de tester ce type de transaction avec les scénarios TCP_RR (transactions TCP) ou UDP_RR  (transaction UDP).

On lance le client:

client# netperf -H server -t TCP_RR

Après quelques secondes, le client devrait afficher:

On a donc une mesure de 47 transactions par seconde.

Optimisation des transactions

Là encore, il est possible de tester différentes optimisation au niveau du protocole TCP. Par exemple, les "buffers" comme nous l'avons vu au chapitre précédant (option -s et -S). Pour coller au plus près au trafic généré par vos applications, NetPerf permet également dans ce mode (TCP-RR) de fixer la taille des requêtes de la transaction avec l'option  -r. Celle-ci prend deux argument: le premier est la taille de la requête, le second la taille de la réponse.

Par exemple pour simuler des transactions dont la requête a une taille de 64 octets et une réponse de 64Koctets, il faut saisir la commande suivante:

client# netperf -H server -t TCP_RR -- -r 64,64k

On peut ensuite essayer des optimisations au niveau des tailles de buffers (comme dans le chapitre précédents):

client# netperf -H server -t TCP_RR -- -r 64,64k -s 128k -S 128k -C -D

Conclusion

Ce billet n'est qu'une introduction au logiciel NetPerf. Si vous souhaitez approfondir le sujet, je vous conseille la lecture de la documentation officielle (en Anglais).

  • Bonjour,

    très pratique ce logiciel, mais existe-il une version Windows du moins pour la partie cliente.

    Merci.

  • En fait, ça fait globalement la même chose de iPerf, non?

  • @theclimber: pas tout à fait. En effet NetPerf permet de simuler des transactions TCP ou UDP, pas Iperf…

  • Bonjour Nicolas (j’espère que c’est çà d’ailleurs),

    bon juste pour te dire deux choses:
    . ton blog est excellent: je découvre en ce moment la mine d’informations qu’il regorge
    . peux tu juste actualiser cette page car il est à présent en version 2.5.0 depuis le 19 juillet dernier.

    @+,

    • Merci !

      C’est mis à jour.

      Nicolas (je confirme :))

  • oumar

    merci pour tout NICOLARGO
    connaissez-vous une application open-source permettant de surveiller un réseau électrique pour lutter contre les fraudes?