NIC 속도를 어떻게 확인합니까?


119

방금 Linux에 새로운 기가비트 네트워크 인터페이스 카드 (NIC)를 설치했습니다. 실제로 기가비트 속도로 설정되어 있는지 어떻게 알 수 있습니까? 내가 볼 ethtool의 속도를 설정할 수있는 옵션을 가지고 있지만, 나는 그것의 현재 속도를보고하는 방법을 알아낼 수 없습니다.


1
ethtool -h 말한다 : ethtool DEVNAME 장치에 대한 표준 정보 표시
Ryan Babchishin

답변:


165

ethtool eth0필요한 정보를 얻으려면 다음 과 같은 명령을 사용 하십시오. 전의:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

2
빠른 속도로 모든 인터페이스의 전체 목록을 보려면 다음 명령을 사용하십시오.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

"속도 : 알 수 없음!" 재확인 할 가치가있는 잘못된 ethXX 이름을 사용하고있을 수 있습니다. :)
rogerdpack 1

76

ethtool이 없으면 커널의 정보를 사용할 수 있습니다.

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

이름이 eth0 인 인터페이스의 예 :

cat /sys/class/net/eth0/speed

5
참고 : 2.6.33 버전 이후 만 사용 가능
zhaorufei

6
"잘못된 인수"를 얻는 중
wi1

@ wi1 : 사용법을 명확히하는 예제가 추가되었습니다. 지금 작동합니까?
Christian

@Christian 네, 감사합니다.하지만 제가 읽은 인터페이스 중 일부에서만 가능하므로 모두 좋습니다
wi1

RHEL6은 이것을 2.6.32 커널로 백 포트했습니다.
Dan Pritts

42

참고 : 의 맨 페이지 mii-tool에는이 면책 조항이 있습니다.

This program is obsolete. For replacement check ethtool.

mii-tool협상 된 네트워크 속도를 보는 데 사용 합니다.

전의.

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

15
데비안 기반 시스템의 경우 ethtool기본적으로 설치되지 않습니다. 그러나 mii-tool필수적인 "net-tools"패키지의 일부입니다. 그래서 이것은 나에게 가장 좋은 해결책이었습니다.
mivk

1
mii-tool 매뉴얼 페이지에서 "이 프로그램은 더 이상 사용되지 않습니다. 유효한 미디어는 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD 및 10baseT-HD 이더넷 카드뿐입니다. 교체 확인 ethtool." : |
rogerdpack

하지만 mii-tool보고서는 '협상 100 baseTx-FD 흐름 제어를 확인 링크'를 모두 ethtool하고 cat /sys/class/net/eth…/speed'합의 1,000 MB / s의 양방향'. USB 3.0 컨트롤러, 즉 ASIX AX88179 (Linux 용 'ax88179_178a'드라이버) 용입니다.
Anton Samsonov

23

여기에 몇 가지 훌륭한 답변이 있습니다. 몇 가지 옵션을 추가하고 싶었습니다.

1. 나는 이것이 당신이 요구 한 것이 아니라는 것을 알고 있습니다 (다른 방법으로 읽으십시오). 그러나 컴퓨터가 말한 것보다 NIC의 실제 성능을 알고 싶다면 iperf를 사용할 수 있습니다. 나는 보통 이것을한다-당신이 모르기 때문에. 나는 최근에 672Mbps로 전송되었지만 업 링크는 1Gb라는 1Gb NIC를 구입했습니다. 내가 확인한 좋은 것.

두 대의 컴퓨터가 필요합니다.

컴퓨터 1에서 서버 모드로 iperf를 실행하십시오.

iperf -s

다른 방법으로 클라이언트 모드에서 iperf를 실행하십시오.

iperf -c 192.168.0.10

전이중 속도를 보려면 대신 다음을 시도하십시오.

iperf -d -c 192.168.0.10

서버 IP 주소를 192.168.0.10으로 대체

2. 우분투 시스템에서는 /var/log/kern.log커널 이벤트의 로깅이 제한되어 있습니다. 변경시 NIC의 링크 속도와 상태를 기록합니다. 다른 배포판에서도 비슷한 작업을 수행하거나 그렇게 설정할 수 있습니다.

$ 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 코드작성할 수 있습니다 . 테스트 된 작업 및 루트는 필요하지 않습니다.

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
예상치 못한 성능에 대한 최종 해결책은 무엇입니까?
rogerdpack

언급 한대로 iperf를 사용하는 것은 단순히 nic 잠재적 속도가 아닌 현재 속도를 얻으려는 경우의 대답입니다.
droid-zilla

18

Khaled가 언급했듯이 인터페이스 만 인수로 ethtool을 실행할 수 있어야합니다. 지원되는 속도, 광고 된 속도, 현재 속도 및 기타 여러 가지가 나열됩니다.

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

dmesg인터페이스를 실행 하고 grep 할 수도 있지만 시스템이 오랫동안 실행 중이고 현재 버퍼에 더 이상 해당 정보가없는 경우 작동하지 않을 수 있습니다 (이 경우 이전 / var을 grep해야합니다) /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

아래 명령 사용

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

이것을 참조 하십시오


루트 액세스 권한이 없을 때 유용합니다.
Mehdi Sadeghi

로그를 덮어 쓰지 않을 때 유용합니다. 나는 불행한 상황에 처해있다.
zhaorufei

이것은 상자에 수퍼 유저 권한이 없었을 때 유용했습니다. 감사!
Sankalp

1

또한 나중에 참조 할 수 있도록 ethtool의 속도 필드가 NIC에서 지원하는 최대 속도를 제공하고 mii-tool은 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

업데이트 : 잠시 후 mii-tool이 오래되고 더 이상 사용되지 않아 ethtool이 협상 된 속도를 반환하므로 올바른 속도를 반환하지 않았습니다.


-6

ethtool eth0나를 위해 일했다. 예:

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

1
답변하기 전에 다른 답변을 읽으십시오. 이것은 6 년 전에 이미 언급 된 바 있으며 66 개의 공감대가 인정되는 답변입니다.
Sven

여전히 자신의 답변을 게시 할 수 있습니다. 주어진 답변은 누군가에게 효과가 없을 수 있으므로 내 상황에 맞는 다른 옵션을 추가하고 싶었습니다.
dragon

귀하의 답변은 허용 된 답변과 동일하며 가치를 추가하지 않습니다.
Sven

이전 옵션에서 언급 된 ethtool 명령은 어디에 있습니까?
dragon

그 옆에 녹색 틱이있는 가장 큰 대답을보십시오. 이것은 정답이며 매우 명확하게 사용합니다 ethtool.
Sven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.