Noto que /proc/net/dev
dice eth3 tiene 1753 drop
s. ip -s link
muestra 0 dropped
. ¿Por qué hay una diferencia? ¿De dónde provienen los diferentes datos? ¿Cuál es el correcto?
He eliminado los datos adicionales.
# uname -a
Linux example09 2.6.32-5-amd64 #1 SMP Thu Mar 22 17:26:33 UTC 2012 x86_64 GNU/Linux
# lsb_release -a
Distributor ID: Debian
Description: Debian GNU/Linux 6.0.4 (squeeze)
Release: 6.0.4
Codename: squeeze
# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
eth3:1258629839430 12545003042 0 1753 0 0 0 10594858 6666255952912 10026428444 0 0 0 0 0 0
# ip -s link
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP qlen 1000
link/ether 00:15:17:96:0b:61 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
244248462 3955476484 0 0 0 10595400
TX: bytes packets errors dropped carrier collsns
683632524 1436809416 0 0 0 0
linux
networking
ip
ablackhat
fuente
fuente
ifconfig
hace lo mismo aquí) pero, segúnbc
, no1258629839430%(2^32)
es204421702
244248462, así que no estoy seguro de que sea eso (a menos que haya ejecutadoip
~Respuestas:
En una máquina Squeeze, confíe
/proc/net/dev
. Es una forma más directa y confiable de ver los mismos datos.Para el caso particular del recuento eliminado, no puedo explicar el problema exacto, pero puedo observarlo en otros cuadros de Squeeze. Si me importara, lo reportaría como un error a Debian (y sugeriría que alguien lo haga e informe aquí).
Ambos toman el número del
tx_dropped
campo denet_device_stats
. En/proc/net/dev
, la línea es generada pordev_seq_printf_stats
desdenet/core/dev.c
.ip
va, como de costumbre, a través de netlink, y más precisamente para estadísticas de dispositivos de red, rtnetlink. La estructura pasó al espacio de usuario,rtnl_link_stats
.La estructura nativa usa
unsigned long
s,rtnetlink
usa__u32
, se realiza una conversión más o menos implícitacopy_rtnl_link_stats
.Es bastante fácil detectar que la versión de 32 bits se está utilizando desde el comienzo de la estructura, rx_packets: mientras
/proc/net/dev
muestra 1258629839430,ip
muestra 244248462, que corresponde aproximadamente a los últimos 32 bits (más algunos bytes más entre comandos); Lo mismo con el recuento de paquetes.Aquí está el número de crujidos para esos 2 primeros campos:
Las cosas mejoraron con la introducción de
IFLA_STATS64
:fuente
En la mayoría de los dispositivos, / proc / net / dev se lee desde los contadores de hardware. Otras estadísticas se actualizan desde la pila de red en las estructuras del dispositivo.
Es más probable que las caídas no coincidan, ya que pueden ser hechas por el hardware: el destino del paquete mac no es ni del dispositivo ni de multidifusión, y el dispositivo no es promiscuo: el hardware descarta directamente el paquete, la pila nunca sabrá que existió.
Finalmente, puede que se pregunte por qué no sincronizarlos o siempre usar estadísticas de hardware. Cuando la pila descarta un paquete por cualquier motivo, no puede actualizar el contador de hardware, y para la depuración es útil saber que puede encontrar cada uno para rastrear dónde se cayó el paquete.
Espero que esto ayude
fuente