FreeBSD的netstat -di,Idrop vs从网卡或内核的丢弃计数?

在FreeBSD上,Drop和Idrop在netstat输出中有什么区别?

$ 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由于缺less描述符而不能接受更多的数据包,丢失的数据包是否会被报告为netstat中的一个丢弃值?

我问,因为在Linux中,ifconfig从/ proc / net / dev读取,而且据我所知,它只有在内核缓冲区已满时才会丢弃。 所以如果网卡因为缺less描述符而不能接受数据包,你就不会知道它,也就是说它还没有进入内核内存。

那FreeBSD上的netstat有BPF缓冲区统计数据的-B选项,所以现在netstat -di报告NIC /驱动程序自身的丢弃数量是有意义的。

正确错误?

任何帮助表示赞赏,谢谢

缺乏软件decsriptors(即mbuf集群)可以通过以下方式观察到:

 # vmstat -z 

看看FAIL专栏。

缺less硬件描述符只能通过特定于驱动程序的接口进行观察,例如,通过以下方式访问Intel e1000卡:

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

也可以通过一些NIC中的loader.conf来调整描述符的计数

关于你的问题“idrops与滴”你应该寻找来源

 if_data.ifi_iqdrops if_snd.ifq_drops 

如果我正确理解一个是input下降其他输出下降(即ALTQ )。

PS。 有关更多信息,请参阅TCP / IP画报第2卷Stevens&Wright的第3.3节“ ifnet结构”。 或者你的操作系统的源代码。