GNU/Linux >> Linux の 問題 >  >> Linux

cat /proc/net/dev と ip -s link は異なる統計を示します。嘘をついているのはどっち?

Squeeze マシンでは、/proc/net/dev を信頼します .これは、同じデータを確認するためのより簡単で信頼できる方法です。

ドロップ カウントの特定のケースについては、正確な問題を説明することはできませんが、他の Squeeze ボックスで確認できます。気にするなら、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 で行われます .

構造体 rx_packets:while /proc/net/dev の先頭から 32 ビット バージョンが使用されていることを確認するのは非常に簡単です。 1258629839430、ip を示しています 244248462 を示しています。これは、最後の 32 ビット (およびコマンド間のさらに数バイト) にほぼ対応しています。パケット数も同じです。

最初の 2 つのフィールドの計算結果は次のとおりです:

% 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 以降で利用可能)

Linux
  1. /dev/dm-Z デバイスから /dev/sdX および /dev/mapper/mpathY デバイスをマップする方法

  2. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  3. カーネル:/dev/kmem と /dev/mem を無効化

  1. Linux が /dev/tty と /dev/tty0 を使用する方法

  2. /dev/tcp を使用するために < または > が必要な理由

  3. /dev/sda と /dev/sda1 の違い

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. / dev/randomと/dev/ urandomをいつ使用するか?