Je remarque que /proc/net/dev
dit eth3 a 1753 drop
s. ip -s link
affiche 0 dropped
. Pourquoi y a-t-il une différence? D'où proviennent les différentes données? Laquelle est correcte?
J'ai supprimé les données supplémentaires.
# 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
la source
la source
ifconfig
fait la même chose ici) mais selonbc
, ce1258629839430%(2^32)
n'est204421702
pas 244248462, donc je ne suis pas sûr que ce soit le cas (sauf si vous avez exécutéip
~ 40 Mo plus tard)Réponses:
Sur une machine Squeeze, faites confiance
/proc/net/dev
. C'est une façon plus simple et plus fiable d'examiner les mêmes données.Pour le cas particulier du comptage abandonné, je ne peux pas expliquer le problème exact, mais je peux l'observer sur d'autres boîtes Squeeze. Si je m'en souciais, je le signalerais comme un bogue à Debian (et suggérerais que quelqu'un le fasse et fasse un rapport ici).
Les deux prennent le nombre du
tx_dropped
champ denet_device_stats
. Dans/proc/net/dev
, la ligne est générée par àdev_seq_printf_stats
partir denet/core/dev.c
.ip
passe, comme d'habitude, via netlink, et plus précisément pour les statistiques des périphériques réseau, rtnetlink. La structure passée à userspacertnl_link_stats
.La structure native utilise
unsigned long
s,rtnetlink
uses__u32
, une conversion plus ou moins implicite est effectuée danscopy_rtnl_link_stats
.Il est assez facile de comprendre que la version 32 bits est utilisée depuis le début de la structure, rx_packets: tandis que
/proc/net/dev
montre 1258629839430,ip
montre 244248462, ce qui correspond à peu près aux 32 derniers bits (plus quelques octets de plus entre les commandes); même chose avec le nombre de paquets.Voici le nombre crunching pour ces 2 premiers champs:
Les choses se sont améliorées avec l'introduction de
IFLA_STATS64
:la source
Sur la plupart des périphériques, / proc / net / dev est lu à partir des compteurs matériels. D'autres statistiques sont mises à jour à partir de la pile réseau dans les structures des appareils.
Les baisses sont plus susceptibles de ne pas correspondre car elles peuvent être effectuées par le matériel: la destination du paquet mac n'est ni du périphérique ni de la multidiffusion, et le périphérique n'est pas en promiscuité: le matériel supprime directement le paquet, la pile ne saura jamais qu'il existait.
Enfin, vous vous demandez peut-être pourquoi ne pas les synchroniser ou utiliser toujours les statistiques du matériel? Lorsque la pile supprime un paquet pour une raison quelconque, elle ne peut pas mettre à jour le compteur matériel, et pour le débogage, il est utile de savoir que vous pouvez trouver chacun pour localiser où le paquet a été déposé.
J'espère que cela t'aides
la source