linux – “cat / proc / net / dev”和“ip -s link”显示不同的统计信息.哪一个在撒谎?

我注意到/ proc / net / dev表示eth3有1753滴. ip -s链接显示0丢弃.为什么会有区别?不同的数据来自哪里?哪一个是正确的?

我已经删除了额外的数据.

# 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

解决方法

在挤压机上,信任/ proc / net / dev.这是查看相同数据的更直接,更可靠的方式.

对于丢弃计数的特定情况,我无法解释确切的问题,但我可以在其他Squeeze盒子上观察它.如果我关心,我会把它报告给Debian一个bug(并建议有人这样做并在此报告).

两者都从net_device_stats的tx_dropped字段中获取数字.在/ proc / net / dev中,该行由net / core / dev.c中的dev_seq_printf_stats生成.

像往常一样,ip通过netlink,更准确地说,用于网络设备统计,rtnetlink.传递给用户间的结构rtnl_link_stats.

本机结构使用无符号长整数,rtnetlink使用__u32,或者在copy_rtnl_link_stats中进行或多或少的隐式转换.

从结构的开头就可以很容易地看到32位版本,rx_packets:虽然/ 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

IFLA_STATS64的推出使事情变得更好:

>在内核中(来自提交10708f37ae729baba9b67bd134c3720709d4ae62,可在v2.6.35及更高版本的上游获得)>在iproute2中(来自提交8864ac9dc5bd5ce049280337deb21191673a02d0,可在v2.6.33-36及更高版本的上游获得).

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...