Ich /proc/net/dev
stelle fest, dass eth3 1753 drop
s hat. ip -s link
zeigt 0 dropped
. Warum gibt es einen Unterschied? Woher kommen die verschiedenen Daten? Welches ist richtig?
Ich habe die zusätzlichen Daten entfernt.
# 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
quelle
quelle
ifconfig
tut die gleiche Sache hier) , aber nachbc
,1258629839430%(2^32)
ist204421702
nicht 244.248.462, so dass ich nicht sicher bin , dass es sich (es sei denn , Sie liefstip
~ 40MB später)Antworten:
Vertrauen Sie auf einer Squeeze-Maschine
/proc/net/dev
. Es ist eine einfachere und zuverlässigere Art, dieselben Daten zu betrachten.Für den speziellen Fall der abgelegten Zählung kann ich das genaue Problem nicht erklären, aber ich kann es auf anderen Squeeze-Boxen beobachten. Wenn es mich kümmerte, würde ich es Debian als Fehler melden (und vorschlagen, dass jemand dies tut und hier zurückmeldet).
Beide nehmen die Nummer aus dem
tx_dropped
Feld vonnet_device_stats
. In/proc/net/dev
wird die Leitung durch erzeugtdev_seq_printf_stats
ausnet/core/dev.c
.ip
geht wie üblich über netlink und genauer gesagt über die Netzwerkgerätestatistik rtnetlink. Die an den Benutzerbereich übergebene Strukturrtnl_link_stats
.Die native Struktur verwendet
unsigned long
s,rtnetlink
verwendet__u32
, eine mehr oder weniger implizite Konvertierung erfolgt incopy_rtnl_link_stats
.Es ist ziemlich einfach zu erkennen, dass die 32-Bit-Version vom Anfang der Struktur an verwendet wird: rx_packets:
/proc/net/dev
zeigt 1258629839430,ip
zeigt 244248462, was ungefähr den letzten 32 Bit entspricht (plus ein paar weitere Bytes zwischen Befehlen); Gleiches gilt für die Paketanzahl.Hier ist die Zahl, die für diese beiden ersten Felder berechnet wird:
Mit der Einführung von
IFLA_STATS64
:quelle
Auf den meisten Geräten wird / proc / net / dev von Hardware-Zählern gelesen. Andere Statistiken werden vom Netzwerkstapel in den Gerätestrukturen aktualisiert.
Drops stimmen mit größerer Wahrscheinlichkeit nicht überein, da sie von der Hardware vorgenommen werden können: Das Paket-Mac-Ziel ist weder ein Gerät noch ein Multicast, und das Gerät ist nicht promiskuitiv: Hardware verwirft das Paket direkt, der Stack wird nie wissen, dass es existiert.
Schließlich fragen Sie sich vielleicht, warum Sie sie nicht synchronisieren oder immer Hardwarestatistiken verwenden sollten. Wenn der Stapel ein Paket aus irgendeinem Grund verwirft, kann er den Hardwarezähler nicht aktualisieren. Zum Debuggen ist es hilfreich zu wissen, dass Sie jedes Paket finden können, um festzustellen, wo das Paket verworfen wurde.
Hoffe das hilft
quelle