Como posso verificar a velocidade da minha placa de rede?

104

Acabei de instalar uma nova placa de interface de rede gigabit (NIC) no Linux. Como sei se está realmente configurado para velocidades gigabit? Eu vejo ethtool tem uma opção para definir a velocidade, mas não consigo descobrir como relatar sua velocidade atual.

    
por User1 30.11.2010 / 17:20

8 respostas

148

Use apenas um comando como: ethtool eth0 para obter as informações necessárias. Ex:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s
    
por 30.11.2010 / 17:23
55

É possível usar as informações do kernel quando o ethtool está ausente:

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

Exemplo para interface chamada eth0:

cat /sys/class/net/eth0/speed
    
por 15.04.2016 / 17:39
40

NOTA: a página man do mii-tool tem este aviso:

This program is obsolete. For replacement check ethtool.

Use mii-tool para observar a velocidade de rede negociada.

Ex.

eth0: no link
eth1: negotiated 100baseTx-FD, link ok
    
por 30.11.2010 / 21:58
20

Há algumas ótimas respostas aqui, eu só queria adicionar mais algumas opções.

1. Eu sei que isso não é bem o que você pediu (leia sobre outras formas). Mas se você quiser saber o desempenho real do seu NIC , ao invés do que seu computador diz que deveria ser, você pode usar o iperf. Eu costumo fazer isso - porque você nunca sabe. Comprei recentemente uma placa de 1Gb que só foi transferida a 672Mbps, mas o uplink foi de 1Gb. Ainda bem que eu verifiquei.

Você precisará de dois computadores.

No computador, execute o iperf no modo de servidor:

iperf -s

Por outro lado, execute o iperf no modo cliente:

iperf -c 192.168.0.10

Se você quiser ver a velocidade full duplex, tente isso:

iperf -d -c 192.168.0.10

Substitua 192.168.0.10 pelo endereço IP dos servidores

2. Nos sistemas Ubuntu, /var/log/kern.log tem registro limitado de eventos do kernel. Ele registrará a velocidade do link e o status de uma NIC quando ela for alterada. Tenho certeza de que outras distribuições provavelmente fazem algo semelhante ou podem ser configuradas para isso.

$ 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. Você provavelmente nunca, nunca precisará ir tão longe, mas você pode escrever código c para obter a velocidade . O trabalho testado e o root não são necessários.

link

#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);
}
    
por 01.10.2015 / 12:28
18

Como Khaled mencionou, você deve ser capaz de rodar o ethtool apenas com a interface como argumento. Isso listará as velocidades suportadas, as velocidades anunciadas, a velocidade atual e um monte de outras coisas também:

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

Você também pode executar dmesg e grep para sua interface, mas isso pode não funcionar se o seu sistema estiver em execução há muito tempo e o buffer atual não tiver mais essas informações (nesse caso, você terá para grep os arquivos /var/log/dmesg.* mais antigos):

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
    
por 30.11.2010 / 17:40
8

Use o comando abaixo

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

refer isto

    
por 28.11.2014 / 11:17
1

Também para referência futura, observei que o campo de velocidade no ethtool fornece a velocidade máxima suportada pela NIC e a ferramenta mii fornece a velocidade real na qual a NIC está sendo executada.

[ 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

ATUALIZAÇÃO: Depois de um tempo descobri que a ferramenta mii não estava retornando a velocidade correta, já que estava desatualizada e obsoleta, e a ethtool estava retornando a velocidade negociada.

    
por 11.11.2016 / 12:59
-5

ethtool eth0 funcionou para mim. Exemplo:

$ethtool eth0 |grep -i speed
Speed: 1000Mb/s
    
por 11.07.2016 / 13:39