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.


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

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

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

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

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

10

Verwenden Sie den folgenden Befehl

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

verweise darauf


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.


-6

ethtool eth0arbeitete für mich. Beispiel:

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.