Tester le débit réseau entre deux machines Linux
Voici une astuce qui permet de tester rapidement le débit réseau entre deux machines Linux. La première commande crée un fichier de 100 Mo, tandis que la seconde va le transférer vers /dev/null de la machine cible, tout en affichant le débit.
Vous pouvez lancer ces deux commandes en une seule fois de la manière suivante (pensez également à adapter le login et l'adresse IP du serveur) :
dd if=/dev/zero of=test bs=100M count=1; scp test user@server:/dev/null;
J'obtiens par exemple un taux de transfert de 11 Mo/s chez moi entre deux machines câblées en 100 MB/s :
test 100% 100MB 11.1MB/s 00:09
Et un taux de 50 Mo/s entre deux machine câblées en 1 Gb/s :
test 100% 500MB 50.0MB/s 00:10
16 Commentaires pour "Tester le débit réseau entre deux machines Linux"
Flux des commentaires de cet article Ajouter un commentaireTrès utile, merci pour l'article.
Bonjour,
Pourquoi ne pas utiliser l'outil iperf ? De plus, avec iperf, pas besoin d'utiliser la couche ssh qu'utilise scp.
remarque: il faut vérifier que l'option "Compression" de ssh n'est pas activée.
Je te propose de faire la même chose en ftp.
Tu verras que ton débit sera bien meilleur
ftp xx.xx.xx.xx
put "|dd if=/dev/zero bs=40000 count=1000" /dev/null
ssh peut te donner une idée du débit, mais la vrai valeur s'obtient avec du ftp.
C'est quand même étrange que pour un débit supérieur, il te faille plus de temps (00:10) en Gbps qu'en 100Mbps (00:09)
:
test 100% 100MB 11.1MB/s 00:09
test 100% 500MB 50.0MB/s 00:10
@prentonmantoonsenva : il existe des tas d'outils pour mesurer le débit réseau, moi ce que je veux c'est une technique pour faire des mesures une seule fois sans rien installer sur les machines. D'où l'utilisation de cette commande.
@san : c'est vrai que la compression peut jouer un peu sur les performances.
@kleos45 : ton idée de FTP est pas mal, par contre cela oblige à avoir des serveurs FTP en place. La plupart du temps, sur des serveurs Linux, tu trouves à coup sûr un serveur SSH mais pas forcément FTP.
@olafkewl : c'est normal, si tu regarde bien, le premier fichier fait 100 Mo et le second fait 500 Mo. J'ai du augmenter la taille du fichier, car 100 Mo sur une liaison 1 Gbp/s, cela ne laisse pas assez de temps pour atteindre le débit maximum.
@pti-seb : Je me permets de te répondre ça.
Car dans mon travail, je dois régulierement copier de gros volumes plusieurs tera entre des systèmes.
Alors le ssh, tu oublies vite, sauf si tu as des jours devant toi.
L'utilisation de SSH impose un chiffrage/déchiffrage lors du transfert, donc c'est plus lent et ça te bouffe du CPU. C'est particulièrement visible quand tu fais un NAS sur un réseau 1000Mbps, et que ton serveur dispose d'un petit CPU. Ta vitesse de transfert en SSH est minable car le CPU est surchargé et n'arrive pas à suivre.
FTP est beaucoup moins lourd. Certes il n'est pas sécurisé, mais sur un réseau privé osef.
Le SSH avec sa couche de chiffrement n'est pas forcément l'idéal pour une mesure de débit réseau.
J'ai plutôt tendance à utiliser netcat (qui est souvent installé par la distrib) :
Machine distante :
nc -l 9000 > /dev/null
Machine cliente :
dd if=/dev/zero bs=100M count=1 | nc -q 1 IP_Machine_Distante 9000
Exemple de résultats:
104857600 bytes (105 MB) copied, 8.91877 s, 11.8 MB/s
@pti-seb : Il faut tout de même installer le SSH et faire l'échange de clés (si on ne veut pas demander le mdp...).
Je pinaille quand même... Comme si le SSH n'était pas quelques chose de courant sur linux
L'impact n'est pas non plus énorme. SSH consomme un peu de ressources, mais même sur mon PC (qui commence à dater) c'est quasi imperceptible.
Par contre, je trouve que la solution de Ggosseyn est intéressante!
Pas besoin d'échange de clef, netcat est installé sur 90% des distribs par défaut (comme SSH en fait ...), et les résultats démontrent en effet que SSH va légèrement moins vite qu'un simple netcat.
SSH: 11,1 MB/s
Netcat: 11,8 MB/s
On peut faire un petit script pour netcat :
---- fichier speedtest.sh ----
#!/bin/bash
# -*- coding: UTF8 -*-
echo -e "nVeuillez lancer la commande 'nc -v -v -n -l -p $2 >/dev/null' sur la machine $1"
echo -e "nAppuyez sur la touche Enter pour continuer..."
read touche
case $touche in
*) echo -e "Reprise du script...nnCommande netcat en cours d’exécution"
;;
esac
( time yes| timeout 10 nc -v -v -n $1 $2 >/dev/null ) 2>tmp
_sent=`sed -e '/sent/!d' -e 's/.*bytes: ([0-9]*)M.*/1/' tmp`
echo -e "nLa vitesse de transfert sur $1 est de : $(($_sent/10))Mb/s"
---- fin du fichier -----
Pour l'utiliser on lui passe comme paramètre l'IP et le port de la machine distante (on pourrait l'améliorée pour que la commande distante soit exécutée automatiquement via ssh..)
$sh speedtest.sh 172.19.1.4 1337
Veuillez lancer la commande 'nc -v -v -n -l -p 1337 >/dev/null' sur la machine 172.19.1.4
Appuyez sur la touche Enter pour continuer...
Reprise du script...
Commande netcat en cours d’exécution
La vitesse de transfert sur 172.19.1.4 est de : 65Mb/s
à noter que netcat existe pour Windows.
http://www.downloadnetcat.com/nc11nt.zip
Il est ainsi possible de tester la vitesse de transfert entre une machine Windows et une machine Linux de cette façon.
Sur une connexion giga, le débit risque aussi d'être limité par le(s) disque(s), et non par le réseau si tu copies un fichier (125Mo/s sur un disque, même en lecture, c'est pas courant à la maison).
Pour être plus objectif, il faudrait générer le fichier en mémoire, dans un tmpfs ou shm.
+1 pour netcat qui est plus approprié à ce genre de test.
Personne n'a remarqué la faute "deux machines câblées en 100 MB/s" ? J'ai eu du mal au début à comprendre le débit étant donné la bande passante
Bien sûr on parle de 100Mb/s .
Sinon bonne astuce pour connaitre la bande passante réelle! Même si comme certains l'on fait remarqué le fait d'utiliser SSH ralenti la chose.
@olafkewl : le premier fichier fais 100 Mo, le second 500 Mo ...