我一直在尝试了解掉线的详细信息,因为操作系统的各种工具(以及各个级别)都会报告掉线情况。到目前为止,我通过谷歌搜索找到的大部分信息对我来说似乎都比较“不着边际”。
首先,我要说明的是,我所查看的示例主机显示 中没有出现任何丢包/proc/net/softnet_stat
。这说明 NIC 环形缓冲区的大小可能足够大。现在,转到ethtool
...
NIC 多队列如下所示:
# ethtool -l em1
Channel parameters for em1:
Pre-set maximums:
RX: 16
TX: 16
Other: n/a
Combined: n/a
Current hardware settings:
RX: 16
TX: 16
Other: n/a
Combined: n/a
现在,以下是同一接口的 rx drop 的样子:
# ethtool -S em1 | grep rx.*dropped:
rx_dropped: 1742
rx0_dropped: 0
rx1_dropped: 0
rx2_dropped: 0
rx3_dropped: 0
rx4_dropped: 0
rx5_dropped: 0
rx6_dropped: 0
rx7_dropped: 0
rx8_dropped: 0
rx9_dropped: 0
rx10_dropped: 0
rx11_dropped: 0
rx12_dropped: 0
rx13_dropped: 0
rx14_dropped: 0
rx15_dropped: 0
我的假设这里的 16 个独立队列与 NIC 环形缓冲区多队列相关。这里的所有零似乎与我在 中看到的情况一致softnet_stat
。此外,我假设如果发生任何丢弃(目前没有发生),则计算在内任何丢弃softnet_stat
都会反映在此ethtool
输出中。
剩下的就是一些模糊的'rx_dropped'
字段,它实际上是在递增。因此,我对此的假设是,它与 NIC 环形缓冲区无关,而是一个更高协议的丢弃计数器。这个计数实际上反映在ip -s
接口的统计数据中:
# ip -s link show dev em1
2: em1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 94:18:82:70:2e:42 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
219512805660516 147616023841 0 1742 0 5624266
TX: bytes packets errors dropped carrier collsns
649765242476657 450168813646 0 0 0 0
我相信这些丢失可能是由许多与协议相关的问题造成的,例如格式错误的数据包、坏端口、应用程序缓冲区拥塞等等。
这看起来像是一个合理的分析,可以解释所报告的“不同”的下降统计数据吗ethtool -S
?