Frage Wie überprüfe ich die Geschwindigkeit meiner Netzwerkkarte?


Ich habe gerade eine neue Gigabit-Netzwerkkarte (NIC) in Linux installiert. Wie kann ich feststellen, ob es wirklich auf Gigabit-Geschwindigkeiten eingestellt ist? Aha ethtool hat eine Option, um die Geschwindigkeit einzustellen, aber ich kann nicht herausfinden, wie man seine aktuelle Geschwindigkeit meldet.


101
2017-11-30 16:20


Ursprung


ethtool -h sagt: ethtool DEVNAME Zeigt Standardinformationen über das Gerät an - Ryan Babchishin


Antworten:


Verwenden Sie einfach einen Befehl wie: ethtool eth0 um die benötigten Informationen zu erhalten. Ex:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

145
2017-11-30 16:23



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 einen doppelten Scheck wert ist :) - rogerdpack


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

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

Beispiel für eine Schnittstelle namens eth0:

cat /sys/class/net/eth0/speed

54
2018-04-15 15:39



Hinweis: Nur verfügbar seit Version 2.6.33 - zhaorufei
"Ungültiges Argument" erhalten - wi1
@ wi1: Ein Beispiel hinzugefügt, um die Verwendung zu verdeutlichen. Funktioniert es jetzt? - Christian
@Christian Ja es ist Danke, aber nur an einigen meiner Interfaces, die ich gelesen habe, ist zu erwarten, also bin ich alle gut - wi1
RHEL6 hat dies in ihren Kernel 2.6.32 zurückportiert. - Dan Pritts


Benutzen mii-tool um die ausgehandelte Netzwerkgeschwindigkeit zu beobachten.

Ex.

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

40
2017-11-30 20:58



Für Debian-basierte Systeme ethtool ist nicht standardmäßig installiert. Aber mii-tool ist, als Teil des essentiellen "net-tools" -Pakets. Das war also die beste Lösung für mich. - mivk
Ich sehe das in der Manpage für mii-tool "Dieses Programm ist veraltet. Gültige Medien sind nur 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD und 10baseT-HD Ethernet-Karten. Für den Ersatz-Check ethtool." : | - rogerdpack
Während mii-tool Berichte verhandelt 100baseTx-FD Flusskontrolle, Link ok ', beides ethtool und cat /sys/class/net/eth…/speed zustimmen '1000Mb / s Vollduplex '. Dies ist für einen USB 3.0-Controller, nämlich ASIX AX88179 ('ax88179_178a' Treiber für Linux). - Anton Samsonov


Es gibt einige gute Antworten hier, ich wollte nur ein paar weitere Optionen hinzufügen.

1. Ich weiß, das ist nicht ganz das, was Sie gefragt haben (lesen Sie weiter für andere Möglichkeiten). Aber wenn Sie die reale Weltleistung Ihres NICs kennen möchtenAnstatt zu sagen, was Ihr Computer sagt, können Sie iperf verwenden. Normalerweise mache ich das - weil man es nie weiß. Ich kaufte kürzlich eine 1Gb NIC, die nur bei 672Mbps übertragen wurde, aber es war Uplink 1Gb. Gut, dass ich nachgesehen habe.

Sie benötigen zwei Computer.

Führen Sie auf dem 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 sehen möchten, versuchen Sie es stattdessen:

iperf -d -c 192.168.0.10

Ersetzen Sie 192.168.0.10 für die IP-Adresse des Servers

2. Auf Ubuntu-Systemen /var/log/kern.log hat die Protokollierung von Kernel-Ereignissen begrenzt. Es zeichnet die Verbindungsgeschwindigkeit und den Status einer Netzwerkkarte auf, wenn sie sich ändert. Ich bin sicher, dass andere Distributionen wahrscheinlich etwas Ähnliches tun oder dazu 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. Du wirst wahrscheinlich niemals jemals so weit gehen müssen, aber du kann c-code schreiben dass, um die Geschwindigkeit zu bekommen. Tested Working 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);
}

20
2017-10-01 10:28





Wie Khaled bereits erwähnt hat, solltest du ethtool nur mit der Schnittstelle als Argument ausführen können. Hier werden die unterstützten Geschwindigkeiten, die angekündigten Geschwindigkeiten, die aktuelle Geschwindigkeit und eine Reihe anderer Dinge aufgelistet:

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 laufen dmesgund grep für Ihre Schnittstelle, aber das funktioniert möglicherweise nicht, wenn Ihr System für eine lange Zeit ausgeführt wurde und der aktuelle Puffer diese Informationen nicht mehr enthält (in diesem Fall müssen Sie das ältere / var / log / dmesg grep) . * 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

18
2017-11-30 16:40





Verwenden Sie den folgenden Befehl

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

verweisen diese


8
2017-11-28 10:17



Nützlich, wenn Sie keinen Root-Zugriff haben. - Mehdi Sadeghi
nützlich, wenn das Protokoll nicht überschrieben wird. Ich bin in der unglücklichen Situation. - zhaorufei
das war praktisch, wenn ich keine Superuser-Rechte an der Box hatte. Vielen Dank! - Sankalp


Auch für zukünftige Referenz habe ich festgestellt, dass das Geschwindigkeitsfeld in ethtool gibt die maximale Geschwindigkeit von der NIC unterstützt und mii-tool gibt die tatsächliche Geschwindigkeit, auf der die NIC läuft.

[ 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 einiger Zeit stellte sich heraus, dass das mii-Tool nicht die richtige Geschwindigkeit zurück gab, da es veraltet und veraltet war und ethtool die ausgehandelte Geschwindigkeit zurückgab.


1
2017-11-11 11:59





ethtool eth0 hat für mich gearbeitet. Beispiel:

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

-5
2017-07-11 11:39



Bitte lesen Sie andere Antworten, bevor Sie antworten. Dies wurde bereits vor sechs Jahren gesagt und ist die akzeptierte Antwort mit 66 Upvotes. - Sven♦
man kann seine Antwort trotzdem posten. Gegebene Antworten könnten für jemanden nicht funktionieren, also wollte ich nur eine andere Option hinzufügen, die mir in meiner Situation passte. - dragon
Ihre Antwort ist die gleiche wie die akzeptierte und fügt keinen Mehrwert hinzu. - Sven♦
Wo ist der in vorherigen Optionen erwähnte Befehl ethtool? - dragon
schau dir die oberste Antwort mit dem grünen Häkchen daneben an. Dies ist die akzeptierte Antwort und es wird sehr klar verwendet ethtool. - Sven♦