200 votes

Comment puis-je vérifier la vitesse de ma carte d'interface réseau ?

Je viens d'installer une nouvelle carte d'interface réseau (NIC) gigabit sous Linux. Comment puis-je savoir si elle est réellement réglée sur des vitesses gigabit ? Je vois ethtool dispose d'une option pour régler la vitesse, mais je n'arrive pas à trouver comment signaler sa vitesse actuelle.

276voto

Khaled Points 35208

Il suffit d'utiliser une commande comme : ethtool eth0 pour obtenir les informations nécessaires. Ex :

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

178voto

Christian Points 1441

Il est possible d'utiliser les informations du noyau lorsque ethtool est absent :

cat /sys/class/net/<interface>/speed

Exemple pour l'interface eth0 :

cat /sys/class/net/eth0/speed

44voto

Alex Wayne Points 58113

NOTE : la page de manuel pour mii-tool comporte cette clause de non-responsabilité :

This program is obsolete. For replacement check ethtool.

Utilisation mii-tool pour voir la vitesse négociée du réseau.

Ex.

eth0: no link
eth1: negotiated 100baseTx-FD, link ok

42voto

Ryan Babchishin Points 6040

Il y a d'excellentes réponses ici, je voulais juste ajouter quelques options supplémentaires.

1. Je sais que ce n'est pas tout à fait ce que vous avez demandé (lisez la suite pour d'autres moyens). Mais si vous voulez connaître les performances réelles de votre carte d'interface réseau au lieu de ce que votre ordinateur dit qu'il devrait être, vous pouvez utiliser iperf. C'est ce que je fais habituellement, car on ne sait jamais. J'ai acheté récemment un NIC de 1Gb qui ne transférait qu'à 672Mbps alors que sa liaison montante était de 1Gb. Heureusement que j'ai vérifié.

Vous aurez besoin de deux ordinateurs.

Sur le premier ordinateur, exécutez iperf en mode serveur :

iperf -s

De l'autre, lancez iperf en mode client :

iperf -c 192.168.0.10

Si vous voulez voir la vitesse duplex complète, essayez plutôt ceci :

iperf -d -c 192.168.0.10

Remplacer l'adresse IP du serveur par 192.168.0.10

2. Sur les systèmes Ubuntu, /var/log/kern.log a une journalisation limitée des événements du noyau. Il enregistre la vitesse de liaison et l'état d'une carte d'interface réseau lorsqu'elle change. Je suis sûr que d'autres distributions font quelque chose de similaire ou peuvent être configurées pour le faire.

$ tail -n 300 /var/log/kern.log.1 | grep slave0
Aug 28 12:54:04 haze kernel: [ 9452.766248] e1000e: slave0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Aug 28 12:54:41 haze NetworkManager[921]: <info>  [1472403281.8486] device (slave0): link disconnected
Aug 28 12:54:41 haze kernel: [ 9489.898476] e1000e: slave0 NIC Link is Down

3. Vous n'aurez probablement jamais besoin d'aller aussi loin, mais vous pouvez peut écrire du code c pour obtenir la vitesse. Testé pour fonctionner et le root n'est pas nécessaire.

https://stackoverflow.com/questions/2872058/get-link-speed-programmatically

#include <stdio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/if.h>
#include <linux/ethtool.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
    int sock;
    struct ifreq ifr;
    struct ethtool_cmd edata;
    int rc;
    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (sock < 0) {
        perror("socket");
        exit(1);
    }
    strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
    ifr.ifr_data = &edata;
    edata.cmd = ETHTOOL_GSET;
    rc = ioctl(sock, SIOCETHTOOL, &ifr);
    if (rc < 0) {
        perror("ioctl");
        exit(1);
    }
    switch (ethtool_cmd_speed(&edata)) {
        case SPEED_10: printf("10Mbps\n"); break;
        case SPEED_100: printf("100Mbps\n"); break;
        case SPEED_1000: printf("1Gbps\n"); break;
        case SPEED_2500: printf("2.5Gbps\n"); break;
        case SPEED_10000: printf("10Gbps\n"); break;
        default: printf("Speed returned is %d\n", edata.speed);
    }
    return (0);
}

24voto

Bryan Watts Points 22810

Comme Khaled l'a mentionné, vous devriez pouvoir lancer ethtool avec seulement l'interface comme argument. Cela donnera la liste des vitesses supportées, des vitesses annoncées, de la vitesse actuelle et d'un tas d'autres choses :

Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    Supports Wake-on: d
    Wake-on: d
    Current message level: 0x00000007 (7)
    Link detected: yes

Vous pouvez également exécuter dmesg et grep pour votre interface, mais cela peut ne pas fonctionner si votre système fonctionne depuis longtemps et que le tampon actuel ne contient plus ces informations (dans ce cas, vous devrez greper les anciens fichiers /var/log/dmesg.*) :

dmesg |grep eth0
[    2.867481] e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
[   19.429444] ADDRCONF(NETDEV_UP): eth0: link is not ready
[   19.431555] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[   19.449341] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   26.972379] e1000: eth0: e1000_set_tso: TSO is Enabled
[   29.920458] eth0: no IPv6 routers present

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X