¿Cómo verifico la velocidad de mi NIC?

119

Acabo de instalar una nueva tarjeta de interfaz de red gigabit (NIC) en Linux. ¿Cómo puedo saber si realmente está configurado a velocidades de gigabit? Veo que ethtooltiene una opción para establecer la velocidad, pero parece que no puedo entender cómo informar su velocidad actual.

Usuario1
fuente
1
ethtool -h dice: ethtool DEVNAME Muestra información estándar sobre el dispositivo
Ryan Babchishin

Respuestas:

165

Simplemente use un comando como: ethtool eth0para obtener la información necesaria. Ex:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s
Khaled
fuente
2
Si desea tener la lista completa de todas sus interfaces con su velocidad, puede 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 fuente
Si obtienes "Velocidad: ¡Desconocido!" puede estar usando el nombre ethXX incorrecto, vale la pena verificarlo dos
veces
76

Es posible utilizar la información del núcleo cuando falta ethtool:

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

Ejemplo para la interfaz llamada eth0:

cat /sys/class/net/eth0/speed
cristiano
fuente
55
Nota: Solo disponible desde la versión
2.6.33
66
Obteniendo "argumento inválido"
wi1
@ wi1: se agregó un ejemplo para aclarar el uso. ¿Funciona ahora?
Christian
@Christian Sí es gracias, pero sólo en algunas de mis interfaces que he leído se esperaba, así que estoy todo bien
Wi1
RHEL6 ha respaldado esto en su núcleo 2.6.32.
Dan Pritts
42

NOTA: la página del manual mii-tooltiene este descargo de responsabilidad:

This program is obsolete. For replacement check ethtool.

Use mii-toolpara ver la velocidad de red negociada.

Ex.

eth0: no link
eth1: negotiated 100baseTx-FD, link ok
Simon Gate
fuente
15
Para sistemas basados ​​en Debian, ethtoolno está instalado por defecto. Pero mii-tooles, como parte del paquete esencial de "herramientas de red". Así que esta fue la mejor solución para mí.
mivk
1
Veo esto en la página de manual de mii-tool "Este programa está obsoleto. Los medios válidos son solo tarjetas 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD y 10baseT-HD. Para reemplazar, revise ethtool". : |
rogerdpack
Mientras que los mii-toolinformes 'negociaron el control de flujo 100 baseTx-FD, enlace ok', ambos ethtooly cat /sys/class/net/eth…/speedacuerdan ' 1000 Mb / s Full duplex'. Esto es para un controlador USB 3.0, es decir, ASIX AX88179 (controlador 'ax88179_178a' para Linux).
Anton Samsonov
23

Aquí hay algunas respuestas geniales, solo quería agregar algunas opciones más.

1. Sé que esto no es exactamente lo que pediste (sigue leyendo para otras formas). Pero si desea conocer el rendimiento del mundo real de su NIC , en lugar de lo que su computadora dice que debería ser, puede usar iperf. Usualmente hago esto, porque nunca se sabe. Compré una NIC de 1Gb recientemente que solo se transfirió a 672Mbps pero su enlace ascendente fue de 1Gb. Buena cosa que revisé.

Necesitarás dos computadoras.

En la computadora uno, ejecute iperf en modo servidor:

iperf -s

Por otro lado, ejecute iperf en modo cliente:

iperf -c 192.168.0.10

Si desea ver la velocidad dúplex completa, intente esto en su lugar:

iperf -d -c 192.168.0.10

Sustituya 192.168.0.10 por la dirección IP del servidor

2. En los sistemas Ubuntu, /var/log/kern.logtiene un registro limitado de eventos del kernel. Registrará la velocidad del enlace y el estado de una NIC cuando cambie. Estoy seguro de que otras distribuciones probablemente hagan algo similar o se puedan configurar para hacerlo.

$ 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. Probablemente nunca necesitarás llegar tan lejos, pero puedes escribir código c para obtener la velocidad. No se requiere trabajo probado y root.

https://stackoverflow.com/questions/2872058/get-link-speed-programmatic

#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
fuente
1
¿Cuál fue su resolución final al rendimiento no esperado?
rogerdpack
Usar iperf como usted dijo es la respuesta si uno quiere obtener la velocidad actual y no simplemente la velocidad potencial agradable.
Droid-Zilla
18

Como Khaled mencionó, debería poder ejecutar ethtool solo con la interfaz como argumento. Esto enumerará las velocidades admitidas, las velocidades anunciadas, la velocidad actual y muchas otras cosas también:

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

También puede ejecutar dmesgy grep para su interfaz, pero esto podría no funcionar si su sistema ha estado funcionando durante mucho tiempo y el búfer actual ya no tiene esa información (en ese caso, tendrá que grep el anterior / var /log/dmesg.* archivos):

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
fuente
10

Utilice el siguiente comando

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

referir esto

Vikas Hardia
fuente
Útil cuando no tienes acceso de root.
Mehdi Sadeghi
útil cuando el registro no se sobrescribe. Estoy en la desafortunada situación.
zhaorufei
Esto fue útil cuando no tenía privs de superusuario en la caja. ¡Gracias!
Sankalp
1

También para referencia futura, he notado que el campo de velocidad en ethtool proporciona la velocidad máxima admitida por la NIC y mii-tool proporciona la velocidad real en la que se está ejecutando la 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

ACTUALIZACIÓN: Después de un tiempo, descubrí que la herramienta mii no estaba devolviendo la velocidad correcta, ya que estaba desactualizada y en desuso, y ethtool estaba devolviendo la velocidad negociada.

maco1717
fuente
-6

ethtool eth0trabajó para mi. Ejemplo:

$ethtool eth0 |grep -i speed
Speed: 1000Mb/s
continuar
fuente
1
Por favor, lea otras respuestas antes de responder. Esto ya se dijo hace seis años y es la respuesta aceptada con 66 votos a favor.
Sven
aún se puede publicar su respuesta independientemente. Las respuestas dadas pueden no funcionar para alguien, así que solo quería agregar otra opción que me convenga en mi situación.
dragón
Su respuesta es exactamente la misma que la aceptada y no agrega valor.
Sven
¿Dónde se menciona el comando ethtool en las opciones anteriores?
dragón
mira la respuesta superior con la marca verde al lado. Esta es la respuesta aceptada y se usa muy claramente ethtool.
Sven