Я заметил, /proc/net/dev
что у eth3 1753 drop
с. 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
linux
networking
ip
ablackhat
источник
источник
ifconfig
делает то же самое здесь), но, согласноbc
,1258629839430%(2^32)
это204421702
не 244248462, поэтому я не уверен, что это так (если вы не запустилиip
~ 40Ответы:
На выжимной машине доверяй
/proc/net/dev
. Это более простой и надежный способ просмотра одних и тех же данных.Для конкретного случая отброшенного счета я не могу объяснить точную проблему, но я могу наблюдать это на других полях Сжатия. Если бы я заботился, я бы сообщил об этом как об ошибке в Debian (и предложил бы, чтобы кто-то сделал и сообщил здесь).
Оба берут номер с
tx_dropped
поляnet_device_stats
. В/proc/net/dev
, строка генерируетсяdev_seq_printf_stats
изnet/core/dev.c
.ip
идет, как обычно, через netlink, а точнее для статистики сетевых устройств, rtnetlink. Структура передана в пользовательское пространствоrtnl_link_stats
.Нативная структура использует
unsigned long
s,rtnetlink
использует__u32
более или менее неявное преобразованиеcopy_rtnl_link_stats
.Довольно легко понять, что 32-битная версия используется с начала структуры, rx_packets: пока
/proc/net/dev
показывает 1258629839430,ip
показывает 244248462, что примерно соответствует последним 32 битам (плюс еще несколько байтов между командами); То же самое с количеством пакетов.Вот число хруст для этих 2 первых полей:
Вещи улучшились вокруг введения
IFLA_STATS64
:источник
На большинстве устройств / proc / net / dev читается со счетчиков оборудования. Другие характеристики обновляются из сетевого стека в структурах устройства.
Отбрасывания с большей вероятностью могут не совпадать, поскольку они могут быть сделаны аппаратным обеспечением: назначение Mac пакета не является ни устройством, ни многоадресной рассылкой, и устройство не находится в случайном порядке: аппаратное обеспечение непосредственно отбрасывает пакет, стек никогда не узнает о его существовании.
Наконец, вам может быть интересно, почему бы не синхронизировать их или всегда использовать аппаратную статистику? Когда стек сбрасывает пакет по какой-либо причине, он не может обновить аппаратный счетчик, и для отладки полезно знать, что вы можете найти каждый, чтобы отследить, куда был отброшен пакет.
Надеюсь это поможет
источник