Como verifico a velocidade da minha placa de rede?

119

Acabei de instalar uma nova placa de interface de rede gigabit (NIC) no Linux. Como posso saber se está realmente definido para velocidades de gigabit? Vejo que ethtoolhá uma opção para definir a velocidade, mas não consigo descobrir como relatar sua velocidade atual.

Usuário1
fonte
1
ethtool -h diz: ethtool DEVNAME Exibir informações padrão sobre o dispositivo
Ryan Babchishin

Respostas:

165

Basta usar um comando como: ethtool eth0para obter as informações necessárias. Ex:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s
Khaled
fonte
2
Se você quiser ter a lista completa de todas as suas interfaces com a velocidade deles, poderá usar este comando:for i in $(netstat -i | cut -f1 -d" " | tail -n+3) ; do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done
Código-Fonte
Se você receber "Speed: Unknown!" você pode estar usando o nome ethXX errado, vale a pena uma segunda verificação :)
rogerdpack
76

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

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

Exemplo para a interface denominada eth0:

cat /sys/class/net/eth0/speed
cristão
fonte
5
Nota: Disponível apenas desde a versão 2.6.33
zhaorufei 05/05
6
Obtendo "Argumento inválido"
wi1 20/09
@ wi1: Adicionado um exemplo para esclarecer o uso. Agora está funcionando?
Christian
@Christian Sim, é obrigado, mas apenas em alguns de meus interfaces que eu li é esperado que eu sou tudo de bom
ICG1
O RHEL6 suportou isso de volta em seu kernel 2.6.32.
Dan Pritts 15/03/19
42

OBSERVAÇÃO: a página de manual para mii-toolpossui este aviso:

This program is obsolete. For replacement check ethtool.

Use mii-toolpara assistir à velocidade da rede negociada.

Ex.

eth0: no link
eth1: negotiated 100baseTx-FD, link ok
Simon Gate
fonte
15
Para sistemas baseados no Debian, ethtoolnão é instalado por padrão. Mas mii-toolé, como parte do pacote essencial "net-tools". Então essa foi a melhor solução para mim.
mivk
1
Vejo isso na página de manual da mii-tool "Este programa é obsoleto. As mídias válidas são apenas placas Ethernet 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD e 10baseT-HD. Para substituição, verifique a ethtool." : |
Rogerdpack
Enquanto os mii-toolrelatórios negociaram controle de fluxo 100 baseTx-FD, link ok ', ambos ethtoole cat /sys/class/net/eth…/speedconcordam com' 1000 Mb / s Full duplex '. Isso é para um controlador USB 3.0, ou seja, ASIX AX88179 (driver 'ax88179_178a' para Linux).
Anton Samsonov 24/09
23

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

1. Eu sei que isso não é exatamente o que você pediu (leia sobre outras maneiras). Mas se você deseja conhecer o desempenho do mundo real da sua NIC , e não o que o seu computador diz que deveria ser, você pode usar o iperf. Eu costumo fazer isso - porque você nunca sabe. Eu comprei recentemente uma placa de rede de 1Gb que só foi transferida a 672Mbps, mas seu uplink foi de 1Gb. Ainda bem que eu verifiquei.

Você precisará de dois computadores.

No computador um, 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 o seguinte:

iperf -d -c 192.168.0.10

Substitua 192.168.0.10 pelo endereço IP dos servidores

2. Nos sistemas Ubuntu, o /var/log/kern.logregistro de eventos do kernel é limitado. Ele registrará a velocidade e o status do link de uma NIC quando ela mudar. 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 precisará ir tão longe, mas pode escrever um código c para obter a velocidade. O trabalho e a raiz testados não são necessários.

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
fonte
1
Qual foi sua solução final para o desempenho não esperado?
rogerdpack 22/01
Usar o iperf como você declarou é a resposta se você deseja obter a velocidade atual e não simplesmente a velocidade potencial.
droid-zilla 23/02
18

Como Khaled mencionou, você deve poder executar o ethtool apenas com a interface como argumento. Isso listará as velocidades suportadas, as velocidades anunciadas, a velocidade atual e várias 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 dmesge grep para sua interface, mas isso pode não funcionar se o sistema estiver em execução por um longo tempo e o buffer atual não tiver mais essas informações (nesse caso, você precisará grep o arquivo / var mais antigo /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
Jed Daniels
fonte
10

Use o comando abaixo

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

referir isso

Vikas Hardia
fonte
Útil quando você não tem acesso root.
21816 Mehdi Sadeghi
útil quando o log não é substituído. Eu estou na situação infeliz.
Zhaorufei 5/05
isso foi útil quando eu não tinha privs de superusuário na caixa. obrigado!
precisa saber é o seguinte
1

Também para referência futura, notei que o campo de velocidade no ethtool fornece a velocidade máxima suportada pela NIC e o mii-tool 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, descobrimos que a ferramenta mii não estava retornando a velocidade certa, pois estava desatualizada e obsoleta e o ethtool estava retornando a velocidade negociada.

maco1717
fonte
-6

ethtool eth0trabalhou para mim. Exemplo:

$ethtool eth0 |grep -i speed
Speed: 1000Mb/s
Dragão
fonte
1
Por favor, leia outras respostas antes de responder. Isso já foi dito há seis anos e é a resposta aceita com 66 votos positivos.
Sven
ainda é possível postar sua resposta independentemente. As respostas dadas podem não funcionar para alguém, então, só queria adicionar outra opção que me convinha na minha situação.
dragon
Sua resposta é exatamente a mesma que a aceita e não agrega valor.
Sven
onde está o comando ethtool mencionado nas opções anteriores?
dragon
olhe para a resposta superior com a marca verde ao lado. Esta é a resposta aceita e muito claramente usa ethtool.
Sven