web-dev-qa-db-ja.com

FreeBSD netstat -di、Idrop vs Drop and drop count from NIC or kernel?

FreeBSDでは、netstat出力のDropとIdropの違いは何ですか?

$ netstat -di 
Name    Mtu Network       Address              Ipkts Ierrs Idrop    Opkts Oerrs  Coll Drop
bge0*  1500 <Link#1>      00:16:d4:e3:49:31        0     0     0        0     0     0    0 
wpi0   2290 <Link#2>      00:1b:77:86:2d:fa        0 53068     0   179587     3     0    0 

また、netstatはNICまたはカーネルバッファからドロップカウントを取得しますか?たとえば、NICが原因で、これ以上パケットを受け入れることができない場合記述子がない場合、失われたパケットはnetstatのドロップ値の1つとして報告されますか?

Linuxでは、ifconfigが/ proc/net/devから読み取り、私が知っているように、カーネルバッファーがいっぱいになったときにのみドロップするので、私は尋ねます。したがって、記述子がないためにNICがパケットを受け入れない場合、それについてはわかりません。つまり、カーネルメモリに到達していません。

それとFreeBSDのnetstatにはBPFバッファ統計用の-Bオプションがあるので、今のところnetstat-diがNIC /ドライバ自体からのドロップカウントを報告することは理にかなっています。

正しい/間違っていますか?

助けていただければ幸いです、ありがとう

1
jon

ソフトウェア記述子(つまり、mbufクラスター)の欠如は、次の方法で観察できます。

# vmstat -z

FAIL列を見てください。

ハードウェア記述子の欠如は、ドライバー固有のインターフェイスを介してのみ観察できます。たとえば、Intele1000カードの場合は次のようになります。

# sysctl dev.em.0.debug=1 && dmesg | tail
...
em0: Tx Descriptors avail failure = 0
em0: RX discarded packets = 0
...

また、記述子の数は、一部のNICではloader.confを介して調整できます。

「idropsvs。drops」という質問については、ソースを探す必要があります

if_data.ifi_iqdrops
if_snd.ifq_drops

私が正しく理解していれば、1つは入力ドロップ用で、もう1つは出力ドロップ用です(つまり、ALTQ)。

PS。追加情報については、TCP/IP Illustrated Volume 2、Stevens&Wrightのセクション3.3「ifnetstructure」を参照してください。またはあなたのOSのソースコード。

2
SaveTheRbtz