Saya perhatikan bahwa /proc/net/dev
kata eth3 memiliki 1753 drop
s. ip -s link
menunjukkan 0 dropped
. Mengapa ada perbedaan? Dari mana datangnya data yang berbeda? Yang mana yang benar?
Saya telah menghapus data ekstra.
# 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
sumber
sumber
ifconfig
melakukan hal yang sama di sini) tetapi menurutbc
,1258629839430%(2^32)
adalah204421702
tidak 244.248.462, jadi saya tidak yakin bahwa ini itu (kecuali jika Anda berlariip
~ 40MB kemudian)Jawaban:
Pada mesin Squeeze, percayalah
/proc/net/dev
. Ini cara yang lebih mudah dan dapat diandalkan untuk melihat data yang sama.Untuk kasus tertentu dari penghitungan yang dijatuhkan, saya tidak bisa menjelaskan masalah yang sebenarnya, tetapi saya bisa mengamatinya di kotak Squeeze lainnya. Jika saya peduli, saya akan melaporkannya sebagai bug ke Debian (dan menyarankan seseorang melakukannya dan melaporkan kembali ke sini).
Keduanya mengambil nomor dari
tx_dropped
bidangnet_device_stats
. Di/proc/net/dev
, garis dihasilkan olehdev_seq_printf_stats
darinet/core/dev.c
.ip
berjalan, seperti biasa, melalui netlink, dan lebih tepatnya untuk statistik perangkat jaringan, rtnetlink. Struktur diteruskan ke userspacertnl_link_stats
,.Struktur asli menggunakan
unsigned long
s,rtnetlink
menggunakan__u32
, konversi yang kurang lebih dilakukan dicopy_rtnl_link_stats
.Sangat mudah untuk menangkap versi 32-bit yang digunakan dari awal struktur, rx_packets: sementara
/proc/net/dev
menunjukkan 1258629839430,ip
menunjukkan 244248462, yang sesuai kira-kira dengan 32 bit terakhir (ditambah beberapa byte lebih banyak antara perintah); hal yang sama dengan jumlah paket.Inilah angka-angka untuk 2 bidang pertama itu:
Banyak hal menjadi lebih baik di sekitar pengenalan
IFLA_STATS64
:sumber
Pada sebagian besar perangkat, / proc / net / dev dibaca dari penghitung perangkat keras. Statistik lainnya diperbarui dari tumpukan jaringan dalam struktur perangkat.
Drops lebih cenderung tidak cocok karena mereka dapat dibuat oleh perangkat keras: tujuan paket mac bukan perangkat maupun multicast, dan perangkat tidak dalam promiscuous: perangkat keras langsung menjatuhkan paket, tumpukan tidak akan pernah tahu itu ada.
Akhirnya, Anda mungkin bertanya-tanya mengapa tidak menyinkronkannya atau selalu menggunakan statistik perangkat keras? Ketika tumpukan menjatuhkan paket karena alasan apa pun, itu tidak dapat memperbarui penghitung perangkat keras, dan untuk debugging, perlu diketahui bahwa Anda dapat menemukan masing-masing untuk melacak di mana paket itu dijatuhkan.
Semoga ini membantu
sumber