Wie überprüfe ich die Geschwindigkeit meiner Netzwerkkarte?

119

Ich habe gerade eine neue Gigabit-Netzwerkkarte (NIC) unter Linux installiert. Wie kann ich feststellen, ob es wirklich auf Gigabit-Geschwindigkeiten eingestellt ist? Ich sehe, dass ethtooles eine Option zum Einstellen der Geschwindigkeit gibt, aber ich kann nicht herausfinden, wie ich die aktuelle Geschwindigkeit melden soll.

User1
quelle
1
ethtool -h sagt: ethtool DEVNAME Standardinformationen zum Gerät
anzeigen

Antworten:

165

Verwenden Sie einfach einen Befehl wie ethtool eth0:, um die erforderlichen Informationen abzurufen. Ex:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s
Khaled
quelle
2
Wenn Sie die vollständige Liste aller Ihrer Schnittstellen mit ihrer Geschwindigkeit haben möchten, können Sie diesen Befehl verwenden: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
Wenn Sie "Geschwindigkeit: Unbekannt!" Sie verwenden möglicherweise den falschen ethXX-Namen, der eine doppelte Überprüfung wert ist :)
Rogerdpack
76

Es ist möglich, die Informationen aus dem Kernel zu verwenden, wenn das Ethtool fehlt:

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

Beispiel für die Schnittstelle eth0:

cat /sys/class/net/eth0/speed
Christian
quelle
5
Hinweis: Nur verfügbar seit Version 2.6.33
zhaorufei
6
Erste "ungültiges Argument"
wi1
@ wi1: Ein Beispiel wurde hinzugefügt, um die Verwendung zu verdeutlichen. Funktioniert es jetzt?
Christian
@ Christian Ja, es ist dankbar, aber nur auf einigen meiner Schnittstellen, die ich gelesen habe, wird erwartet, dass alles in
Ordnung ist
RHEL6 hat dies in seinen 2.6.32-Kernel zurückportiert.
Dan Pritts
42

HINWEIS: Die Manpage für mii-toolhat diesen Haftungsausschluss:

This program is obsolete. For replacement check ethtool.

Verwenden Sie mii-tooldiese Option , um die ausgehandelte Netzwerkgeschwindigkeit zu überwachen.

Ex.

eth0: no link
eth1: negotiated 100baseTx-FD, link ok
Simon Gate
quelle
15
Wird für Debian-basierte Systeme ethtoolnicht standardmäßig installiert. Ist mii-toolaber Teil des wesentlichen "net-tools" -Pakets. Das war also die beste Lösung für mich.
mivk
1
Ich sehe dies in der Manpage für mii-tool "Dieses Programm ist veraltet. Gültige Datenträger sind nur 100baseT4-, 100baseTx-FD-, 100baseTx-HD-, 10baseT-FD- und 10baseT-HD-Ethernet-Karten. Zum Austauschen das Ethtool überprüfen." : |
Rogerdpack
Während mii-toolBerichte 'Verhandlungs 100 baseTx-FD Flow-Control, link ok', die beide ethtoolund cat /sys/class/net/eth…/speedeinigen sich auf ' 1000 Mb / s Vollduplex'. Dies ist für einen USB 3.0-Controller vorgesehen, nämlich ASIX AX88179 (Treiber 'ax88179_178a' für Linux).
Anton Samsonov
23

Hier gibt es einige gute Antworten, ich wollte nur noch ein paar Optionen hinzufügen.

1. Ich weiß, das ist nicht ganz das, wonach Sie gefragt haben (lesen Sie auf andere Weise weiter). Aber wenn Sie die reale Welt Leistungsfähigkeit Ihrer NIC wissen wollen , anstatt was Ihr Computer sagt es sein sollte, können Sie iperf verwenden. Normalerweise mache ich das - weil du es nie weißt. Ich habe kürzlich eine 1-Gbit-Netzwerkkarte gekauft, die nur mit 672 Mbit / s übertragen wurde, deren Uplink-Kapazität jedoch 1 Gbit betrug. Gut, dass ich nachgesehen habe.

Sie benötigen zwei Computer.

Führen Sie auf dem ersten Computer iperf im Servermodus aus:

iperf -s

Auf der anderen Seite führen Sie iperf im Client-Modus aus:

iperf -c 192.168.0.10

Wenn Sie die Vollduplexgeschwindigkeit anzeigen möchten, versuchen Sie Folgendes:

iperf -d -c 192.168.0.10

Ersetzen Sie die IP-Adresse des Servers durch 192.168.0.10

2. Verfügt auf Ubuntu-Systemen /var/log/kern.logüber eine eingeschränkte Protokollierung von Kernel-Ereignissen. Es zeichnet die Verbindungsgeschwindigkeit und den Status einer Netzwerkkarte auf, wenn sich diese ändert. Ich bin sicher, dass andere Distributionen wahrscheinlich etwas Ähnliches tun oder dafür eingerichtet werden können.

$ 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. Sie werden wahrscheinlich niemals so weit gehen müssen, aber Sie können C-Code schreiben , um die Geschwindigkeit zu erreichen. Getestet arbeiten und root ist nicht erforderlich.

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);
}
Ryan Babchishin
quelle
1
Was war Ihre mögliche Lösung für die nicht erwartete Leistung?
Rogerdpack
Iperf zu verwenden, wie Sie angegeben haben, ist die Antwort, wenn Sie die aktuelle Geschwindigkeit und nicht nur die mögliche Geschwindigkeit ermitteln möchten.
Droid-Zilla
18

Wie Khaled bereits erwähnt hat, sollte es möglich sein, ethtool nur mit der Schnittstelle als Argument auszuführen. Dies listet die unterstützten Geschwindigkeiten, die angekündigten Geschwindigkeiten, die aktuelle Geschwindigkeit und eine Reihe anderer Dinge auf:

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

Sie können auch " dmesggrep" für Ihre Schnittstelle ausführen , dies funktioniert jedoch möglicherweise nicht, wenn Ihr System längere Zeit ausgeführt wurde und der aktuelle Puffer diese Informationen nicht mehr enthält (in diesem Fall müssen Sie "grep" für das ältere / var ausführen /log/dmesg.* Dateien):

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
Jed Daniels
quelle
10

Verwenden Sie den folgenden Befehl

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

verweise darauf

Vikas Hardia
quelle
Nützlich, wenn Sie keinen Root-Zugriff haben.
Mehdi Sadeghi
nützlich, wenn das Protokoll nicht überschrieben wird. Ich bin in einer unglücklichen Situation.
Zhaorufei
Das war praktisch, als ich keine Superuser-Rechte auf der Box hatte. Vielen Dank!
Sankalp
1

Ich habe auch festgestellt, dass das Geschwindigkeitsfeld in ethtool die vom NIC unterstützte Höchstgeschwindigkeit angibt und das mii-tool die tatsächliche Geschwindigkeit angibt, mit der der NIC ausgeführt wird.

[ 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

UPDATE: Nach einer Weile stellte sich heraus, dass das mii-tool nicht die richtige Geschwindigkeit zurückgab, da es veraltet und veraltet war und ethtool die ausgehandelte Geschwindigkeit zurückgab.

maco1717
quelle
-6

ethtool eth0arbeitete für mich. Beispiel:

$ethtool eth0 |grep -i speed
Speed: 1000Mb/s
Drachen
quelle
1
Bitte lesen Sie andere Antworten, bevor Sie antworten. Dies wurde bereits vor sechs Jahren gesagt und ist die akzeptierte Antwort mit 66 positiven Stimmen.
Sven
man kann seine antwort trotzdem posten. Die gegebenen Antworten könnten für jemanden nicht funktionieren, deshalb wollte ich nur eine weitere Option hinzufügen, die zu mir in meiner Situation passte.
Drache
Ihre Antwort ist genau die gleiche wie die akzeptierte und bietet keinen Mehrwert.
Sven
Wo ist der Befehl ethtool in den vorherigen Optionen erwähnt?
Drache
Schauen Sie sich die Antwort ganz oben mit dem grünen Häkchen daneben an. Dies ist die akzeptierte Antwort und wird sehr deutlich verwendet ethtool.
Sven