Come posso verificare la velocità della mia scheda di rete?


119

Ho appena installato una nuova scheda di interfaccia di rete gigabit (NIC) in Linux. Come faccio a sapere se è davvero impostato su velocità gigabit? Vedo che ethtoolha un'opzione per impostare la velocità, ma non riesco a capire come riportare la sua velocità attuale.


1
ethtool -h dice: ethtool DEVNAME Visualizza le informazioni standard sul dispositivo
Ryan Babchishin,

Risposte:


165

Basta usare un comando come: ethtool eth0per ottenere le informazioni necessarie. Ex:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

2
Se vuoi avere l'elenco completo di tutte le tue interfacce con la loro velocità, puoi usare questo comando:for i in $(netstat -i | cut -f1 -d" " | tail -n+3) ; do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done
Code-Source

Se ottieni "Speed: Unknown!" potresti usare un nome etXX errato, vale la pena di ricontrollare :)
rogerdpack

76

È possibile usare le informazioni dal kernel quando manca ethtool:

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

Esempio per l'interfaccia denominata eth0:

cat /sys/class/net/eth0/speed

5
Nota: disponibile solo dalla versione 2.6.33
zhaorufei

6
Ottenere "Argomento non valido"
wi1

@ wi1: aggiunto un esempio per chiarire l'utilizzo. Ora funziona?
Christian,

@Christian Sì, grazie, ma ci si aspetta solo su alcune delle mie interfacce che ho letto, quindi sto bene
wi1

RHEL6 ha eseguito il backport di questo nel proprio kernel 2.6.32.
Dan Pritts,

42

NOTA: la pagina man per mii-toolha questo disclaimer:

This program is obsolete. For replacement check ethtool.

Utilizzare mii-toolper guardare la velocità della rete negoziata.

Ex.

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

15
Per i sistemi basati su Debian, ethtoolnon è installato di default. Ma mii-toolfa parte del pacchetto essenziale "net-tools". Quindi questa è stata la soluzione migliore per me.
marzo

1
Lo vedo nella pagina man di mii-tool "Questo programma è obsoleto. I supporti validi sono solo schede Ethernet 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD e 10baseT-HD. Per la sostituzione, controllare l'etolo." : |
rogerdpack,

Mentre i mii-toolrapporti "negoziavano il controllo del flusso 100 baseTx-FD, link ok", entrambi ethtoole cat /sys/class/net/eth…/speedconcordano su " 1000 Mb / s Full duplex". Questo è per un controller USB 3.0, vale a dire ASIX AX88179 (driver 'ax88179_178a' per Linux).
Anton Samsonov,

23

Ci sono alcune ottime risposte qui, volevo solo aggiungere qualche altra opzione.

1. So che non è esattamente quello che hai chiesto (continua a leggere per altri modi). Ma se vuoi conoscere le prestazioni del tuo NIC nel mondo reale , piuttosto che ciò che il tuo computer dice che dovrebbe essere, puoi usare iperf. Di solito lo faccio, perché non lo sai mai. Di recente ho acquistato una scheda NIC da 1 Gb che si è trasferita solo a 672 Mbps ma il suo uplink era di 1 Gb. Per fortuna ho controllato.

Avrai bisogno di due computer.

Sul computer uno, esegui iperf in modalità server:

iperf -s

Dall'altro, esegui iperf in modalità client:

iperf -c 192.168.0.10

Se vuoi vedere la velocità full duplex, prova invece:

iperf -d -c 192.168.0.10

Sostituire 192.168.0.10 per l'indirizzo IP del server

2. Sui sistemi Ubuntu, /var/log/kern.logha una registrazione limitata degli eventi del kernel. Registra la velocità e lo stato del collegamento di una scheda NIC quando cambia. Sono sicuro che altre distribuzioni probabilmente fanno qualcosa di simile o possono essere configurate per farlo.

$ 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. Probabilmente non dovrai mai e poi andare così lontano, ma puoi scrivere codice c per ottenere la velocità. Non è richiesto il funzionamento testato e il root.

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);
}

1
Qual è stata la tua eventuale risoluzione alla performance non prevista?
rogerdpack,

Usare iperf come hai detto è la risposta se si vuole ottenere la velocità attuale e non semplicemente la velocità potenziale.
Droid-Zilla,

18

Come ha detto Khaled, dovresti essere in grado di eseguire ethtool con solo l'interfaccia come argomento. Questo elencherà le velocità supportate, le velocità pubblicizzate, la velocità corrente e un sacco di altre cose:

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

Puoi anche eseguire dmesge grep per la tua interfaccia, ma questo potrebbe non funzionare se il tuo sistema è in esecuzione da molto tempo e il buffer corrente non ha più tali informazioni (in tal caso, dovrai grep il vecchio / var /log/dmesg.* file):

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

10

Usa il comando seguente

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

riferimento questo


Utile quando non si dispone dell'accesso root.
Mehdi Sadeghi,

utile quando il registro non viene sovrascritto. Sono nella sfortunata situazione.
Zhaorufei,

questo è stato utile quando non avevo i privilegi di superutente sulla scatola. Grazie!
Sankalp,

1

Anche per riferimento futuro ho notato che il campo di velocità in ethtool fornisce la massima velocità supportata dalla scheda NIC e il mii-tool fornisce la velocità effettiva su cui è in esecuzione la scheda NIC.

[ 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

AGGIORNAMENTO: Dopo un po 'scoperto il mii-tool non stava restituendo la giusta velocità in quanto era obsoleto e deprecato ed ethtool stava restituendo la velocità negoziata.


-6

ethtool eth0ha funzionato per me. Esempio:

$ethtool eth0 |grep -i speed
Speed: 1000Mb/s

1
Si prega di leggere le altre risposte prima di rispondere. Questo è già stato detto sei anni fa ed è la risposta accettata con 66 voti positivi.
Sven

si può ancora pubblicare la sua risposta a prescindere. Le risposte fornite potrebbero non funzionare per qualcuno, quindi volevo solo aggiungere un'altra opzione adatta a me nella mia situazione.
drago,

La tua risposta è identica a quella accettata e non aggiunge valore.
Sven

dove è il comando ethtool menzionato nelle opzioni precedenti?
drago

guarda la risposta più in alto con il segno di spunta verde accanto ad essa. Questa è la risposta accettata e utilizza molto chiaramente ethtool.
Sven
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.