Na stroji Squeeze důvěřujte /proc/net/dev
. Je to přímočařejší a spolehlivější způsob, jak nahlížet na stejná data.
U konkrétního případu poklesu počtu nemohu vysvětlit přesný problém, ale mohu jej pozorovat na jiných Squeeze boxech. Kdyby mi to záleželo, nahlásil bych to jako chybu Debianu (a navrhl bych, aby to někdo udělal a nahlásil to sem).
Oba přebírají číslo z tx_dropped
pole net_device_stats
. V /proc/net/dev
, řádek je generován dev_seq_printf_stats
od net/core/dev.c
.
ip
jde jako obvykle přes netlink, přesněji pro statistiku síťových zařízení rtnetlink. Struktura předána do uživatelského prostoru, rtnl_link_stats
.
Nativní struktura používá unsigned long
s, rtnetlink
používá __u32
, víceméně implicitní konverze se provádí v copy_rtnl_link_stats
.
Je docela snadné zachytit, že se používá 32bitová verze od začátku struktury, rx_packets:zatímco /proc/net/dev
zobrazuje 1258629839430, ip
ukazuje 244248462, což odpovídá zhruba posledním 32 bitům (plus několik dalších bajtů mezi příkazy); to samé s počtem paketů.
Zde je číslo pro tato 2 první pole:
% echo '1258629839430 % (2^32)'|bc; echo 244248462
204421702
244248462
% echo '12545003042 % (2^32)'|bc; echo 3955476484
3955068450
3955476484
Po zavedení IFLA_STATS64
se věci zlepšily :
- v jádře (z potvrzení 10708f37ae729baba9b67bd134c3720709d4ae62, dostupného ve verzi 2.6.35 a novější)
- v iproute2 (z commitu 8864ac9dc5bd5ce049280337deb21191673a02d0, dostupného ve verzi 2.6.33-36 a novější).