Use apenas um comando como: ethtool eth0
para obter as informações necessárias. Ex:
$ sudo ethtool eth0 | grep Speed
Speed: 1000Mb/s
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.
É 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
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
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.
#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);
}
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
Use o comando abaixo
dmesg | grep -i duplex
Output: eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
refer isto
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.
ethtool eth0
funcionou para mim. Exemplo:
$ethtool eth0 |grep -i speed
Speed: 1000Mb/s