abl*_*hat 9 networking linux ip
我注意到/proc/net/dev说 eth3 有 1753drop秒。ip -s link显示 0 dropped。为什么有区别?不同的数据来自哪里?哪一个是正确的?
我已经删除了额外的数据。
# 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
Run Code Online (Sandbox Code Playgroud)
Pie*_*ier 11
在 Squeeze 机器上,信任/proc/net/dev. 这是查看相同数据的一种更直接、更可靠的方式。
对于丢失计数的特殊情况,我无法解释确切的问题,但我可以在其他 Squeeze 框上观察到它。如果我在意,我会将其作为错误报告给 Debian(并建议有人这样做并在此处报告)。
两者都从 的tx_dropped字段中取数字net_device_stats。在 中/proc/net/dev,该行由dev_seq_printf_statsfrom生成net/core/dev.c。
ip像往常一样,通过 netlink,更准确地说是网络设备统计数据,rtnetlink。传递给用户空间的结构,rtnl_link_stats.
本机结构使用unsigned longs、rtnetlinkuses __u32,或多或少的隐式转换在copy_rtnl_link_stats.
很容易从结构 rx_packets 的开头捕捉到正在使用的 32 位版本:同时/proc/net/dev显示 1258629839430,ip显示 244248462,大致对应于最后 32 位(加上命令之间的更多字节);与数据包计数相同的事情。
这是前两个字段的数字运算:
% echo '1258629839430 % (2^32)'|bc; echo 244248462
204421702
244248462
% echo '12545003042 % (2^32)'|bc; echo 3955476484
3955068450
3955476484
Run Code Online (Sandbox Code Playgroud)
引入以下内容后情况变得更好IFLA_STATS64:
| 归档时间: |
|
| 查看次数: |
11909 次 |
| 最近记录: |