Làm cách nào để xác minh tốc độ của NIC của tôi?


119

Tôi vừa cài đặt một thẻ giao diện mạng gigabit mới (NIC) trong Linux. Làm thế nào để tôi biết nếu nó thực sự được đặt ở tốc độ gigabit? Tôi thấy ethtoolcó một tùy chọn để đặt tốc độ, nhưng dường như tôi không thể tìm ra cách báo cáo tốc độ hiện tại của nó.


1
ethtool -h nói: ethtool DEVNAME Hiển thị thông tin tiêu chuẩn về thiết bị
Ryan Babchishin

Câu trả lời:


165

Chỉ cần sử dụng một lệnh như: ethtool eth0để có được thông tin cần thiết. Ví dụ:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

2
Nếu bạn muốn có danh sách đầy đủ tất cả các giao diện của mình với tốc độ của chúng, bạn có thể sử dụng lệnh này:for i in $(netstat -i | cut -f1 -d" " | tail -n+3) ; do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done
Mã nguồn

Nếu bạn nhận được "Tốc độ: Không biết!" bạn có thể đang sử dụng tên ethXX sai, đáng để kiểm tra lại :)
rogerdpack

76

Có thể sử dụng thông tin từ kernel khi thiếu ethtool:

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

Ví dụ cho giao diện có tên eth0:

cat /sys/class/net/eth0/speed

5
Lưu ý: Chỉ khả dụng kể từ phiên bản 2.6.33
zhaorufei

6
Nhận "Đối số không hợp lệ"
wi1

@ wi1: Đã thêm một ví dụ để làm rõ việc sử dụng. Nó đang làm việc à?
Christian

@Christian Vâng, cảm ơn, nhưng chỉ trên một số giao diện mà tôi đã đọc được mong đợi vì vậy tôi rất ổn
wi1

RHEL6 đã đưa phần này vào kernel 2.6.32 của họ.
Dan Pritts 15/03/18

42

LƯU Ý: trang người đàn ông mii-toolcó từ chối trách nhiệm này:

This program is obsolete. For replacement check ethtool.

Sử dụng mii-toolđể xem tốc độ mạng đàm phán.

Ví dụ.

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

15
Đối với các hệ thống dựa trên Debian, ethtoolkhông được cài đặt theo mặc định. Nhưng mii-tool, là một phần của gói "công cụ mạng" thiết yếu. Vì vậy, đây là giải pháp tốt nhất cho tôi.
mivk

1
Tôi thấy điều này trong trang hướng dẫn cho mii-tool "Chương trình này đã lỗi thời. Phương tiện hợp lệ chỉ là 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD và 10baseT-HD ethernet. Để kiểm tra thay thế ethtool." : |
rogerdpack

Trong khi mii-toolbáo cáo 'đàm phán 100 baseTx-FD điều khiển luồng, liên kết ok', cả hai ethtoolcat /sys/class/net/eth…/speedđồng ý về ' 1000 Mb / s Full duplex'. Đây là một bộ điều khiển USB 3.0, cụ thể là trình điều khiển ASIX AX88179 ('ax88179_178a' cho Linux).
Anton Samsonov

23

Có một số câu trả lời tuyệt vời ở đây, tôi chỉ muốn thêm một vài lựa chọn.

1. Tôi biết đây không hoàn toàn là những gì bạn yêu cầu (đọc tiếp theo những cách khác). Nhưng nếu bạn muốn biết hiệu năng thực tế của NIC của bạn , hơn là những gì máy tính của bạn nói, bạn có thể sử dụng iperf. Tôi thường làm điều này - bởi vì bạn không bao giờ biết. Tôi đã mua một NIC 1Gb ​​gần đây chỉ chuyển ở tốc độ 672Mb / giây nhưng đường lên của nó là 1Gb. Điều tốt là tôi đã kiểm tra.

Bạn sẽ cần hai máy tính.

Trên máy tính, chạy iperf ở chế độ máy chủ:

iperf -s

Mặt khác, chạy iperf trong chế độ máy khách:

iperf -c 192.168.0.10

Nếu bạn muốn xem tốc độ song công hoàn toàn, thay vào đó hãy thử điều này:

iperf -d -c 192.168.0.10

Thay thế 192.168.0.10 cho địa chỉ IP của máy chủ

2. Trên các hệ thống Ubuntu, /var/log/kern.logđã đăng nhập hạn chế các sự kiện kernel. Nó sẽ ghi lại tốc độ liên kết và trạng thái của một NIC khi nó thay đổi. Tôi chắc rằng các bản phân phối khác có thể làm điều gì đó tương tự hoặc có thể được thiết lập để làm như vậy.

$ 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. Có lẽ bạn sẽ không bao giờ cần phải đi xa đến thế, nhưng bạn có thể viết mã c để có được tốc độ. Đã kiểm tra làm việc và root là không cần thiết.

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
Độ phân giải cuối cùng của bạn đối với hiệu suất không mong đợi là gì?
rogerdpack

Sử dụng iperf như bạn đã nêu là câu trả lời nếu một người muốn có được tốc độ hiện tại và không chỉ đơn giản là tốc độ tiềm năng nic.
droid-zilla

18

Như Khaled đã đề cập, bạn sẽ có thể chạy ethtool chỉ với giao diện làm đối số. Điều này sẽ liệt kê các tốc độ được hỗ trợ, tốc độ được quảng cáo, tốc độ hiện tại và một loạt các thứ khác nữa:

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

Bạn cũng có thể chạy dmesgvà grep cho giao diện của mình, nhưng điều này có thể không hoạt động nếu hệ thống của bạn đã chạy trong một thời gian dài và bộ đệm hiện tại không còn thông tin đó nữa (trong trường hợp đó, bạn sẽ phải grep cũ / var tập tin /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

Sử dụng lệnh dưới đây

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

giới thiệu này


Hữu ích khi bạn không có quyền truy cập root.
Mehdi Sadeghi

hữu ích khi nhật ký không bị ghi đè. Tôi đang ở trong tình huống không may.
zhaorufei

Điều này rất hữu ích khi tôi không có tài khoản siêu người dùng trên hộp. cảm ơn!
Sankalp

1

Ngoài ra để tham khảo trong tương lai tôi đã nhận thấy rằng trường tốc độ trong ethtool cung cấp tốc độ tối đa được hỗ trợ bởi công cụ NIC và mii cho tốc độ thực tế mà NIC đang chạy.

[ 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

CẬP NHẬT: Sau một thời gian phát hiện ra công cụ mii không trả lại đúng tốc độ vì nó đã lỗi thời và không còn dùng nữa và ethtool đang trả lại tốc độ thương lượng.


-6

ethtool eth0đã làm cho tôi. Thí dụ:

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

1
Xin vui lòng đọc câu trả lời khác trước khi trả lời. Điều này đã được đọc sáu năm trước và là câu trả lời được chấp nhận với 66 upvote.
Sven

người ta vẫn có thể đăng câu trả lời của mình bất kể Trả lời có thể không hiệu quả với ai đó, vì vậy chỉ muốn thêm một tùy chọn khác phù hợp với tôi trong tình huống của tôi.
rồng

Câu trả lời của bạn giống hệt như câu trả lời được chấp nhận và không thêm giá trị.
Sven

lệnh ethtool được đề cập ở đâu trong các tùy chọn trước?
rồng

nhìn vào câu trả lời trên cùng với đánh dấu màu xanh bên cạnh nó. Đây là câu trả lời được chấp nhận và nó sử dụng rất rõ ràng ethtool.
Sven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.