Iperf : Tester sa bande passante de bout en bout

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Iperf

Iperf est un logiciel informatique permettant la mesure de différentes variables d'une connexion réseau IP. Iperf est développé par National Laboratory for Applied Network Research (NLANR).Basée sur une architecture client/serveur et disponible sur différents systèmes d'exploitations, Iperf est un outil important pour les administrateurs réseaux.

2 Comment le récupérer

Il existe de base dans la plupart des distributions Linux. Vous pouvez cependant suivre ce lien pour télécharger la version qui correspond à votre système d'exploitation (Il existe une version Windows et MacOS X).

Sous Debian / Ubuntu :

apt-get install iperf

Sous Fedora :

yum install iperf

3 Comment fonctionne Iperf ?

Iperf doit être lancé sur deux machines se trouvant de part et d'autre du réseau à tester. La première machine lance Iperf en "mode serveur" (avec l'option -s), la seconde en "mode client" (option -c). Par défaut le test réseau se fait en utilsant le protocole TCP (mais il est également possible d'utiliser le mode UDP avec l'option -u).

4 Comment l'utiliser

Nous allons prendre l'exemple d'un test réseau entre une machine A et une machine B.

Sur la machine A, il faut lancer la commande suivante:

# iperf -s

Ensuite sur la machine B, on lance la commande:

# iperf -c <adresse IP de la machine A>

Le résultat suivant va alors s'afficher:

————————————————————

Client connecting to 192.168.29.1, TCP port 5001
TCP window size: 65.0 KByte (default)
————————————————————
[ 3] local 192.168.29.157 port 50675 connected with 192.168.29.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 110 MBytes 92.6 Mbits/sec

On obtient donc le débit réel entre la machine A et la machine B. En utilisant l'option -i on peut avoir d'autre type d'informations comme le delais de transit ou la gigue réseau.


Il est possible d'évaluer sa connexion à Internet via un serveur Iperf public, situé sur le réseau Internet :

Iperf.png


Sous linux, voici 3 suggestion de ligne de commande pour le serveur :

  • TCP 5001 : $ iperf -s -m -w 500K -i 5
  • TCP 4662 : $ iperf -s -m -w 500K -i 5 -p 4662
  • UDP 5001 : $ iperf -s -i 5 -u


Sous linux, voici 5 suggestion de ligne de commande pour le client :

  • upload uniquement : $ iperf -c 212.27.33.25 -m -w 500K -i 5 -t 30
  • upload + download : $ iperf -c 212.27.33.25 -m -w 500K -i 5 -t 30 -r
  • upload + download simultané : $ iperf -c 212.27.33.25 -m -w 500K -i 5 -t 30 -d -P 2
  • upload + download sur port 4662 : $ iperf -c 212.27.33.25 -m -w 500K -i 5 -t 30 -p 4662 -r
  • upload + download en UDP à 80 Mb/s : $ iperf -c 212.27.33.25 -i 5 -t 30 -r -u -b 80M

Le paramètre -w est très important, il spécifie "TCP window size" la valeur par défaut étant trop petite. La valeur de la window size ne pourra de toute façon pas dépasser celle de la pile TCP/IP du système d'exploitation.


Iperf4662.png

5 IPERF en multicast

Iperf peut fonctionner en mode multicast (-B). Il faut le lancer de la manière suivante:

Sur le serveur:

  • $ iperf -s -u -B 225.0.1.2

Sur le client:

  • $ iperf -c 225.0.1.2 -u -b 3M

Cela génére un flux multicast UDP (sur l’adresse 225.0.1.2 de 3 Mb/sec.

6 IPERF avec Linux 2.6.21 et ultérieur

A partir du noyeau 2.6.21 "The new high resolution timer option in the kernel causes usleep(0) to be a nop so the thread keeps running (until it's quanta is exhausted)." => IPERF consomme beaucoup plus de CPU pour un même débit.

Sur un Pentium IV 2.8 Ghz HT (bogomips = 5600) :

  • Noyeau 2.6.20 :
$ iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 49.4 KByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 54566 connected with 127.0.0.1 port 5001
[  3]  0.0-10.0 sec  5.33 GBytes  4.58 Gbits/sec
  • Noyeau 2.6.22 :
$ iperf -c 127.0.0.1
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 5001
TCP window size: 49.4 KByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 44642 connected with 127.0.0.1 port 5001
[  3]  0.0-10.1 sec    273 MBytes    228 Mbits/sec

un patch existe : http://dast.nlanr.net/Projects/Iperf2.0/patch-iperf-linux-2.6.21.txt
un binaire i686 avec le patch existe : http://lafibre.info/images/iperf/iperf

7 Resources