使用 ethtool -S 时 rx_packets 和 rx_pkts_nic 有什么区别?

使用 ethtool -S 时 rx_packets 和 rx_pkts_nic 有什么区别?

rx_packets比 大得多rx_pkts_nic。为什么会这样呢?

是否有一份文档对所有 NIC 统计字段进行了解释?

答案1

的输出ethtool -S与驱动程序有关。看来您使用了一些英特尔网卡。

可能您已启用某些卸载(GRO- 通用接收卸载、LRO- 大型接收卸载)。您可以检查 的输出ethtool -k <iface>

在这种情况下,多个接收到的数据包(以 计数rx_pkts_nic)将合并为一个更大的数据包(以 计数rx_packets)。然后,只有这个大数据包才会传递到系统网络堆栈中。

不幸的是,我不知道各种 NIC 计数器的完整文档和详细描述。它们中的大多数都有直观的名称,但不是全部。您可以尝试使用 Linux 内核邮件列表消息来理解其中一些。您也可以尝试写信给邮件列表以询问含义。

更新

我研究了驱动程序的源代码并发现了一些有趣的东西。

  1. rx_packets计数器值来自系统中网络设备的统计信息,而不是硬件。此值被视为所有 NIC 队列的数据包数。此值还包括坏数据包。

  2. rx_pkts_nic是从硬件接收的,而且它rx_missed值减少。似乎这个值只包括好的数据包(这个计数器的真实名称是gprc,也就是说good packets received count)。

  3. rx_packets因此,如果和之间存在差异rx_pkts_nic,请检查错误计数器。

  4. 调查 NIC 统计计数器的一个好东西是ethtool --register-dump <iface>命令。

相关内容