题 如何验证NIC的速度?


我刚在Linux中安装了一个新的千兆网卡(NIC)。如何判断它是否真的设置为千兆位速度?我知道了 ethtool 有一个设置速度的选项,但我似乎无法弄清楚如何报告其当前的速度。


101
2017-11-30 16:20




ethtool -h说:ethtool DEVNAME显示有关设备的标准信息 - Ryan Babchishin


答案:


只需使用如下命令: ethtool eth0 获得所需的信息。例如:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

145
2017-11-30 16:23



如果您希望获得具有速度的所有接口的完整列表,可以使用以下命令: 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


当ethtool丢失时,可以使用内核中的信息:

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

名为eth0的接口示例:

cat /sys/class/net/eth0/speed

54
2018-04-15 15:39



注意:仅适用于2.6.33版本 - zhaorufei
获得“无效的参数” - wi1
@ wi1:添加了一个示例来阐明用法。现在有效吗? - Christian
@Christian是的,谢谢,但只有我读过的一些界面才有所期待,所以我一切都很好 - wi1
RHEL6已将其移植到2.6.32内核中。 - Dan Pritts


使用 mii-tool 观看协商的网络速度。

防爆。

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

40
2017-11-30 20:58



对于基于Debian的系统, ethtool 默认情况下未安装。但 mii-tool 是,作为必不可少的“网络工具”包的一部分。所以这对我来说是最好的解决方案。 - mivk
我在mii-tool的手册页中看到了这个“这个程序已经过时了。有效媒体只有100baseT4,100baseTx-FD,100baseTx-HD,10baseT-FD和10baseT-HD以太网卡。用于替换检查ethtool。” :| - rogerdpack
而 mii-tool 报告'谈判 100baseTx-FD流量控制,链接ok',两者 ethtool 和 cat /sys/class/net/eth…/speed 同意 '1000Mb / s全双工'。这适用于USB 3.0控制器,即ASIX AX88179(适用于Linux的'ax88179_178a'驱动程序)。 - Anton Samsonov


这里有一些很好的答案,我只想添加一些选项。

1。 我知道这不是你提出的问题(请阅读其他方式)。但 如果你想知道你的NIC的真实世界性能,而不是你的电脑应该说的,你可以使用iperf。我经常这样做 - 因为你永远不知道。 我最近买了一个1Gb的网卡,只能以672Mbps的速度传输,但它的上行链路是1Gb。我查了一下好东西。

你需要两台电脑。

在计算机上,在服务器模式下运行iperf:

iperf -s

另一方面,在客户端模式下运行iperf:

iperf -c 192.168.0.10

如果要查看全双工速度,请尝试以下操作:

iperf -d -c 192.168.0.10

将192.168.0.10替换为服务器IP地址

2。 在Ubuntu系统上, /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代码 那是为了加快速度。不需要经过测试的工作和root。

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





正如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用于你的界面,但是如果你的系统已经运行了很长时间并且当前缓冲区不再具有那些信息,那么这可能不起作用(在这种情况下,你将不得不grep旧的/ 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

18
2017-11-30 16:40





使用以下命令

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

参考 这个


8
2017-11-28 10:17



没有root访问权限时很有用。 - Mehdi Sadeghi
在不覆盖日志时很有用。我处于不幸的境地。 - zhaorufei
当我没有超级用户权限时,这就派上用场了。谢谢! - Sankalp


同样为了将来参考,我注意到ethtool中的speed字段给出了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正在返回协商的速度。


1
2017-11-11 11:59