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 /ドライバ自体からのドロップカウントを報告することは理にかなっています。
正しい/間違っていますか?
助けていただければ幸いです、ありがとう
ソフトウェア記述子(つまり、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「ifnet
structure」を参照してください。またはあなたのOSのソースコード。