Freebsd

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

  • February 4, 2012

在 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 中的丟棄值之一?

我問是因為在 Linux 中, ifconfig 從 /proc/net/dev 讀取,據我所知,它僅在核心緩衝區已滿時才會下降。因此,如果 NIC 由於缺少描述符而無法接受數據包,您就不會知道它,即它還沒有進入核心記憶體。

這和 FreeBSD 上的 netstat 具有 BPF 緩衝區統計資訊的 -B 選項,所以現在 netstat -di 報告來自 NIC/驅動程序本身的丟棄計數是有意義的。

正確錯誤?

任何幫助表示讚賞,謝謝

可以通過以下方式觀察到缺少軟體描述符(即 mbuf 集群):

# vmstat -z

FAIL專欄。

只有通過驅動程序特定的介面才能觀察到缺少硬體描述符,例如對於 Intel e1000 卡,通過:

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

還可以通過loader.conf某些 NIC調整描述符計數

關於您的問題“idrops vs. drop”,您應該查找來源

if_data.ifi_iqdrops
if_snd.ifq_drops

如果我理解正確的話,一個是輸入滴,另一個是輸出滴(即ALTQ)。

**PS。**有關更多資訊,請參閱ifnetTCP/IP 圖解第 2 卷,Stevens & Wright 的第 3.3 節“結構”。或您的作業系統的原始碼。

引用自:https://serverfault.com/questions/320654