«Cat / proc / net / dev» et «ip -s link» affichent des statistiques différentes. Lequel ment?

8

Je remarque que /proc/net/devdit eth3 a 1753 drops. ip -s linkaffiche 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
ablackhat
la source
Pareil ici. Cela ressemble à un survol d'entier 32 bits dans les programmes de l'espace utilisateur ( ifconfigfait la même chose ici) mais selon bc, ce 1258629839430%(2^32)n'est 204421702pas 244248462, donc je ne suis pas sûr que ce soit le cas (sauf si vous avez exécuté ip~ 40 Mo plus tard)
DerfK
@DerfK Oui, environ 40 Mo semblent corrects. Était juste quelques secondes, mais c'est un serveur occupé.
ablackhat

Réponses:

11

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_droppedchamp de net_device_stats. Dans /proc/net/dev, la ligne est générée par à dev_seq_printf_statspartir de net/core/dev.c.

ippasse, comme d'habitude, via netlink, et plus précisément pour les statistiques des périphériques réseau, rtnetlink. La structure passée à userspace rtnl_link_stats.

La structure native utilise unsigned longs, rtnetlinkuses __u32, une conversion plus ou moins implicite est effectuée dans copy_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/devmontre 1258629839430, ipmontre 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:

% echo '1258629839430 % (2^32)'|bc; echo 244248462
204421702
244248462
% echo '12545003042 % (2^32)'|bc; echo 3955476484 
3955068450
3955476484

Les choses se sont améliorées avec l'introduction de IFLA_STATS64:

  • dans le noyau (à partir de commit 10708f37ae729baba9b67bd134c3720709d4ae62, disponible en amont dans v2.6.35 et versions ultérieures)
  • dans iproute2 (à partir de la validation 8864ac9dc5bd5ce049280337deb21191673a02d0, disponible en amont dans v2.6.33-36 et versions ultérieures).
Pierre Carrier
la source
Génial, c'est exactement ce que je cherchais.
ablackhat
-2

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

fard à joues
la source