Vertrauen Sie auf einer Squeeze-Maschine /proc/net/dev
. Es ist eine einfachere und zuverlässigere Art, dieselben Daten zu betrachten.
Für den besonderen Fall des Dropped Count kann ich das genaue Problem nicht erklären, aber ich kann es bei anderen Squeeze-Boxen beobachten. Wenn es mich interessierte, würde ich es als Fehler an Debian melden (und vorschlagen, dass jemand es tut und hier zurückmeldet).
Beide nehmen die Nummer aus der tx_dropped
Feld von net_device_stats
. In /proc/net/dev
, die Zeile wird durch dev_seq_printf_stats
generiert ab net/core/dev.c
.
ip
geht wie üblich über netlink, genauer gesagt für Netzwerkgerätestatistiken, rtnetlink. Die an den Userspace übergebene Struktur, rtnl_link_stats
.
Die native Struktur verwendet unsigned long
s, rtnetlink
verwendet __u32
, erfolgt eine mehr oder weniger implizite Konvertierung in copy_rtnl_link_stats
.
Es ist ziemlich einfach zu erkennen, dass die 32-Bit-Version vom Anfang der Struktur verwendet wird, rx_packets:while /proc/net/dev
zeigt 1258629839430, ip
zeigt 244248462, was ungefähr den letzten 32 Bits entspricht (plus ein paar weitere Bytes zwischen den Befehlen); dasselbe gilt für die Paketanzahl.
Hier ist die Zahlenverarbeitung für diese beiden ersten Felder:
% echo '1258629839430 % (2^32)'|bc; echo 244248462
204421702
244248462
% echo '12545003042 % (2^32)'|bc; echo 3955476484
3955068450
3955476484
Mit der Einführung von IFLA_STATS64
wurde es besser :
- im Kernel (von Commit 10708f37ae729baba9b67bd134c3720709d4ae62, verfügbar in v2.6.35 und höher)
- in iproute2 (von Commit 8864ac9dc5bd5ce049280337deb21191673a02d0, verfügbar in Version 2.6.33-36 und höher).