web-dev-qa-db-fra.com

Comment vérifier la vitesse de ma carte réseau?

Je viens d'installer une nouvelle carte d'interface réseau (NIC) gigabit sous Linux. Comment savoir s'il est vraiment réglé sur des vitesses gigabit? Je vois que ethtool a une option pour régler la vitesse, mais je n'arrive pas à comprendre comment signaler sa vitesse actuelle.

126
User1

Utilisez simplement une commande comme: ethtool eth0 pour obtenir les informations nécessaires. Ex:

$ Sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s
178
Khaled

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

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

Exemple pour l'interface nommée eth0:

cat /sys/class/net/eth0/speed
88
Christian

REMARQUE: la page de manuel pour mii-tool a cette exclusion de responsabilité:

This program is obsolete. For replacement check ethtool.

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

Ex.

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

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 réseau , plutôt que ce que votre ordinateur dit qu'elle devrait être, vous pouvez utiliser iperf. Je fais habituellement ça - parce qu'on ne sait jamais. J'ai acheté un 1 Go NIC récemment qui n'a été transféré qu'à 672 Mbps mais sa liaison montante était de 1 Go. C'est une bonne chose que j'ai vérifié.

Vous aurez besoin de deux ordinateurs.

Sur l'ordinateur un, exécutez iperf en mode serveur:

iperf -s

De l'autre, lancez iperf en mode client:

iperf -c 192.168.0.10

Si vous souhaitez voir la vitesse du duplex intégral, essayez plutôt ceci:

iperf -d -c 192.168.0.10

Substituez 192.168.0.10 à l'adresse IP des serveurs

2. Sur les systèmes Ubuntu, /var/log/kern.log a une journalisation limitée des événements du noyau. Il enregistrera la vitesse de la liaison et l'état d'un NIC quand il changera. Je suis sûr que d'autres distributions font probablement 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, jamais besoin d'aller aussi loin, mais vous pouvez écrire c code que pour obtenir la vitesse. Le fonctionnement et la racine testés ne sont pas requis.

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);
}
25
Ryan Babchishin

Comme Khaled l'a mentionné, vous devriez pouvoir exécuter ethtool avec seulement l'interface comme argument. Cela répertoriera les vitesses prises en charge, les vitesses annoncées, la vitesse actuelle et bien d'autres choses également:

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 n'a plus ces informations (dans ce cas, vous aurez pour grep 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
18
Jed Daniels

Utiliser la commande ci-dessous

 dmesg | grep -i duplex
 Output: eth0: link up, 100Mbps, full-duplex, lpa 0x45E1

se référer ceci

10
Vikas Hardia

Également pour référence future, j'ai remarqué que le champ de vitesse dans ethtool donne la vitesse maximale prise en charge par le NIC et mii-tool donne la vitesse réelle sur laquelle le NIC s'exécute.

[ root @  ]# mii-tool
eth0: negotiated 100baseTx-FD, link ok
[ root @  ]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 2
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

MISE À JOUR: Après un certain temps, a découvert que l'outil mii ne retournait pas la bonne vitesse car il était obsolète et obsolète et ethtool retournait la vitesse négociée.

1
maco1717