Jak mogę sprawdzić szybkość mojej karty sieciowej?


119

Właśnie zainstalowałem nową kartę interfejsu sieciowego Gigabit (NIC) w systemie Linux. Skąd mam wiedzieć, czy tak naprawdę jest ustawiony na gigabitowe prędkości? Widzę, że ethtoolma opcję ustawienia prędkości, ale nie wydaje mi się, aby wymyślić, jak zgłosić jej bieżącą prędkość.


1
ethtool -h mówi: ethtool DEVNAME Wyświetl standardowe informacje o urządzeniu
Ryan Babchishin

Odpowiedzi:


165

Wystarczy użyć polecenia typu:, ethtool eth0aby uzyskać potrzebne informacje. Dawny:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

2
Jeśli chcesz mieć pełną listę wszystkich interfejsów z ich szybkością, możesz użyć tego polecenia: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 z

Jeśli pojawi się „Speed: Unknown!” być może używasz niewłaściwej nazwy ethXX, wartej podwójnej kontroli :)
rogerdpack

76

Możliwe jest wykorzystanie informacji z jądra, gdy brakuje ethtool:

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

Przykład interfejsu o nazwie eth0:

cat /sys/class/net/eth0/speed

5
Uwaga: Dostępne tylko od wersji 2.6.33
zhaorufei,

6
Uzyskiwanie „Nieprawidłowy argument”
wi1

@ wi1: Dodano przykład, aby wyjaśnić użycie. Czy teraz działa?
Christian

@Christian Tak, to dzięki, ale tylko na niektórych z moich interfejsów, które przeczytałem, można się spodziewać, więc jestem w porządku
wi1,

RHEL6 przeportował to do jądra 2.6.32.
Dan Pritts,

42

UWAGA: strona podręcznika użytkownika mii-toolma to wyłączenie odpowiedzialności:

This program is obsolete. For replacement check ethtool.

Służy mii-tooldo oglądania wynegocjowanej prędkości sieci.

Dawny.

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

15
W systemach opartych na Debianie ethtoolnie jest instalowany domyślnie. Jest jednak mii-toolczęścią podstawowego pakietu „narzędzi sieciowych”. To było dla mnie najlepsze rozwiązanie.
mivk

1
Widzę to na stronie podręcznika mii-tool „Ten program jest przestarzały. Prawidłowe media to tylko 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD i 10baseT-HD karty ethernetowe. Do wymiany ettool”. : |
rogerdpack

Choć mii-tooldoniesienia 'wynegocjowane 100 BaseTX-FD kontrolę przepływu, odwołują ok', zarówno ethtooli cat /sys/class/net/eth…/speedzgodzić się na ' 1000 Mb / s full duplex'. Dotyczy to kontrolera USB 3.0, a mianowicie ASIX AX88179 (sterownik „ax88179_178a” dla systemu Linux).
Anton Samsonov,

23

Jest tu kilka świetnych odpowiedzi, chciałem tylko dodać kilka dodatkowych opcji.

1. Wiem, że nie do końca o to prosiłeś (czytaj dalej na inne sposoby). Ale jeśli chcesz poznać rzeczywistą wydajność swojej karty sieciowej , a nie to, co mówi twój komputer, możesz użyć iperf. Zwykle to robię - bo nigdy nie wiadomo. Niedawno kupiłem kartę sieciową 1 Gb, która przesłała ją tylko przy 672 Mb / s, ale jej łącze w górę było 1 Gb. Dobrze, że sprawdziłem.

Potrzebujesz dwóch komputerów.

Na komputerze pierwszym uruchom iperf w trybie serwera:

iperf -s

Z drugiej strony uruchom iperf w trybie klienta:

iperf -c 192.168.0.10

Jeśli chcesz zobaczyć pełną prędkość drukowania dwustronnego, spróbuj tego:

iperf -d -c 192.168.0.10

Zastąp 192.168.0.10 adresem IP serwera

2. W systemach Ubuntu /var/log/kern.logma ograniczone rejestrowanie zdarzeń jądra. Będzie rejestrować prędkość łącza i status karty sieciowej, gdy się zmieni. Jestem pewien, że inne dystrybucje prawdopodobnie robią coś podobnego lub można to skonfigurować.

$ 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. Prawdopodobnie nigdy, nigdy nie będziesz musiał iść tak daleko, ale możesz napisać kod c , aby uzyskać prędkość. Testowane działanie i rootowanie nie jest wymagane.

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
Jakie było ostateczne rozwiązanie problemu z nieoczekiwanym działaniem?
rogerdpack

Użycie iperf, jak powiedziałeś, jest odpowiedzią, jeśli chcesz uzyskać aktualną prędkość, a nie tylko potencjalną prędkość potencjalną.
droid-zilla

18

Jak wspomniał Khaled, powinieneś być w stanie uruchomić ethtool z samym interfejsem jako argumentem. Spowoduje to wyświetlenie obsługiwanych prędkości, reklamowanych prędkości, bieżącej prędkości i wielu innych rzeczy:

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

Możesz także uruchomić dmesgi grep dla swojego interfejsu, ale to może nie działać, jeśli twój system działał przez długi czas, a bieżący bufor nie ma już tych informacji (w takim przypadku będziesz musiał grepować starszą / 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

10

Użyj poniższego polecenia

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

skieruj to


Przydatne, gdy nie masz dostępu do roota.
Mehdi Sadeghi,

przydatne, gdy dziennik nie jest nadpisywany. Jestem w niefortunnej sytuacji.
zhaorufei

przydało się to, gdy nie miałem w skrzynce prywatnej administratora. dzięki!
Sankalp

1

Również dla przyszłych odniesień zauważyłem, że pole prędkości w ethtool podaje maksymalną prędkość obsługiwaną przez NIC, a mii-tool podaje rzeczywistą prędkość, na której działa 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

AKTUALIZACJA: Po pewnym czasie odkryte narzędzie mii nie zwróciło właściwej prędkości, ponieważ było przestarzałe i przestarzałe, a ethtool zwrócił wynegocjowaną prędkość.


-6

ethtool eth0pracował dla mnie. Przykład:

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

1
Przed udzieleniem odpowiedzi przeczytaj inne odpowiedzi. Zostało to już powiedziane sześć lat temu i jest to akceptowana odpowiedź z 66 głosami pozytywnymi.
Sven

mimo to nadal można opublikować swoją odpowiedź. Podane odpowiedzi mogą nie działać dla kogoś, więc chciałem tylko dodać kolejną opcję, która pasowałaby mi w mojej sytuacji.
smok

Twoja odpowiedź jest dokładnie taka sama jak zaakceptowana i nie dodaje wartości.
Sven

gdzie jest wspomniane polecenie ethtool w poprzednich opcjach?
smok,

spójrz na najwyższą odpowiedź z zielonym ptaszkiem obok niej. To jest odpowiedź zaakceptowana i bardzo wyraźnie używana ethtool.
Sven
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.