Bagaimana cara saya memverifikasi kecepatan NIC saya?

119

Saya baru saja menginstal kartu antarmuka jaringan gigabit (NIC) baru di Linux. Bagaimana saya tahu apakah itu benar-benar diatur ke kecepatan gigabit? Saya melihat ethtoolmemiliki opsi untuk mengatur kecepatan, tetapi saya tidak bisa menemukan cara untuk melaporkan kecepatan saat ini.

Pengguna1
sumber
1
ethtool -h mengatakan: ethtool DEVNAME Menampilkan informasi standar tentang perangkat
Ryan Babchishin

Jawaban:

165

Cukup gunakan perintah seperti: ethtool eth0untuk mendapatkan info yang dibutuhkan. Ex:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s
Khaled
sumber
2
Jika Anda ingin memiliki daftar lengkap semua antarmuka Anda dengan kecepatannya, Anda dapat menggunakan perintah ini:for i in $(netstat -i | cut -f1 -d" " | tail -n+3) ; do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done
Source-Code
Jika Anda mendapatkan "Kecepatan: Tidak Diketahui!" Anda mungkin menggunakan nama ethXX yang salah, patut diperiksa dua kali :)
rogerdpack
76

Dimungkinkan untuk menggunakan informasi dari kernel ketika ethtool tidak ada:

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

Contoh untuk antarmuka bernama eth0:

cat /sys/class/net/eth0/speed
Kristen
sumber
5
Catatan: Hanya tersedia sejak versi 2.6.33
zhaorufei
6
Mendapatkan "Argumen tidak valid"
wi1
@ wi1: Menambahkan contoh untuk memperjelas penggunaan. Apakah sekarang berfungsi?
Christian
@Christian Ya itu terima kasih, tetapi hanya pada beberapa antarmuka saya yang saya baca diharapkan jadi saya baik
wi1
RHEL6 telah mem-backport ini ke kernel 2.6.32 mereka.
Dan Pritts
42

CATATAN: halaman manual untuk mii-toolmemiliki penafian ini:

This program is obsolete. For replacement check ethtool.

Gunakan mii-tooluntuk menonton kecepatan jaringan yang dinegosiasikan.

Ex.

eth0: no link
eth1: negotiated 100baseTx-FD, link ok
Simon Gate
sumber
15
Untuk sistem berbasis Debian, ethtooltidak diinstal secara default. Tetapi mii-tool, sebagai bagian dari paket "alat-bersih" yang penting. Jadi ini solusi terbaik bagi saya.
mivk
1
Saya melihat ini di halaman manual untuk mii-tool "Program ini sudah usang. Media yang valid hanya 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD dan 10baseT-HD kartu ethernet. Untuk penggantian periksa ethtool." : |
rogerdpack
Sementara mii-toollaporan 'dinegosiasikan 100 baseTx-FD, kontrol aliran, tautan ok', keduanya ethtooldan cat /sys/class/net/eth…/speedsetujui ' 1000 Mb / s dupleks penuh'. Ini untuk pengontrol USB 3.0, yaitu ASIX AX88179 (driver 'ax88179_178a' untuk Linux).
Anton Samsonov
23

Ada beberapa jawaban yang bagus di sini, saya hanya ingin menambahkan beberapa opsi lagi.

1. Saya tahu ini tidak sesuai dengan yang Anda minta (baca cara-cara lain). Tetapi jika Anda ingin mengetahui kinerja NIC Anda di dunia nyata , daripada apa yang seharusnya komputer Anda katakan, Anda bisa menggunakan iperf. Saya biasanya melakukan ini - karena Anda tidak pernah tahu. Saya membeli NIC 1Gb ​​baru-baru ini yang hanya ditransfer pada 672Mbps tetapi uplink-nya adalah 1Gb. Untung aku memeriksa.

Anda akan membutuhkan dua komputer.

Di komputer satu, jalankan iperf dalam mode server:

iperf -s

Di sisi lain, jalankan iperf dalam mode klien:

iperf -c 192.168.0.10

Jika Anda ingin melihat kecepatan dupleks penuh, coba ini sebagai gantinya:

iperf -d -c 192.168.0.10

Pengganti 192.168.0.10 untuk alamat IP server

2. Pada sistem Ubuntu, /var/log/kern.logmemiliki logging terbatas pada peristiwa kernel. Ini akan merekam kecepatan tautan dan status NIC saat berubah. Saya yakin distribusi lain mungkin melakukan sesuatu yang serupa atau dapat diatur untuk melakukannya.

$ 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. Anda mungkin tidak akan pernah perlu sejauh ini, tetapi Anda dapat menulis kode c untuk mendapatkan kecepatan. Kerja yang diuji dan root tidak diperlukan.

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
sumber
1
Apa resolusi akhirnya untuk kinerja yang tidak diharapkan?
rogerdpack
Menggunakan iperf seperti yang Anda sebutkan adalah jawabannya jika seseorang ingin mendapatkan kecepatan saat ini dan bukan hanya kecepatan potensial nic.
droid-zilla
18

Seperti yang disebutkan Khaled, Anda harus dapat menjalankan ethtool hanya dengan antarmuka sebagai argumen. Ini akan mencantumkan kecepatan yang didukung, kecepatan yang diiklankan, kecepatan saat ini, dan banyak hal lainnya juga:

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

Anda juga dapat menjalankan dmesg, dan grep untuk antarmuka Anda, tetapi ini mungkin tidak berfungsi jika sistem Anda telah berjalan untuk waktu yang lama dan buffer saat ini tidak lagi memiliki informasi itu (dalam hal itu, Anda harus grep yang lebih tua / 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
Jed Daniels
sumber
10

Gunakan perintah di bawah ini

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

lihat ini

Vikas Hardia
sumber
Berguna saat Anda tidak memiliki akses root.
Mehdi Sadeghi
berguna ketika log tidak ditimpa. Saya dalam situasi yang tidak menguntungkan.
zhaorufei
ini sangat berguna ketika saya tidak memiliki priv superuser di dalam kotak. Terima kasih!
Sankalp
1

Juga untuk referensi di masa mendatang, saya memperhatikan bahwa bidang kecepatan di ethtool memberikan kecepatan maksimum yang didukung oleh NIC dan mii-tool memberikan kecepatan aktual di mana NIC berjalan.

[ 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

PEMBARUAN: Setelah beberapa saat ditemukan, mii-tool tidak mengembalikan kecepatan yang tepat karena sudah ketinggalan zaman dan usang dan ethtool mengembalikan kecepatan yang dinegosiasikan.

maco1717
sumber
-6

ethtool eth0bekerja untukku. Contoh:

$ethtool eth0 |grep -i speed
Speed: 1000Mb/s
naga
sumber
1
Harap baca jawaban lain sebelum menjawab. Ini telah dikatakan enam tahun lalu dan merupakan jawaban yang diterima dengan 66 suara positif.
Sven
Anda masih dapat memposting jawabannya. Jawaban yang diberikan mungkin tidak bekerja untuk seseorang, jadi hanya ingin menambahkan opsi lain yang cocok dengan saya dalam situasi saya.
naga
Jawaban Anda sama persis dengan jawaban yang diterima dan tidak menambah nilai.
Sven
di mana perintah ethtool disebutkan dalam opsi sebelumnya?
naga
lihat jawaban paling atas dengan tanda centang hijau di sebelahnya. Ini adalah jawaban yang diterima dan sangat jelas digunakan ethtool.
Sven