GNU/Linux >> Znalost Linux >  >> Linux

cat /proc/net/dev a odkaz ip -s ukazují různé statistiky. Který z nich lže?

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ší).

Linux
  1. Co jsou soubory /dev/zero a /dev/null v Linuxu

  2. Jak Linux používá /dev/tty a /dev/tty0

  3. Vytvořte virtuální blokové zařízení, které zapisuje do /dev/null

  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  3. Rozdíly mezi /dev/sda a /dev/sda1

  1. /proc/[pid]/pagemaps a /proc/[pid]/maps | linux

  2. Kdy mám použít /dev/shm/ a kdy /tmp/?

  3. Jak zjistit, ze které složky běží proces?