UEK2/UEK3/UEK4内核中网络接口丢弃的数据包的统计值不断增加

 

UEK2/UEK3/UEK4内核中网络接口丢弃的数据包的统计值不断增加

前言

最近巡检发现好几台Oracle服务器中ifconfig中的网卡的dropped值比较大并且在不断增大。

还以为是哪里出现了什么问题。

[oracle@xxxxxxx01 ~]$ ifconfig | grep dropped
          RX packets:279317319655 errors:0 dropped:299396048 overruns:5086 frame:0
          TX packets:337295556398 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:95797270235 errors:0 dropped:140 overruns:551985 frame:0
          TX packets:88298397036 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:25110484 errors:0 dropped:25110484 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:279297602308 errors:0 dropped:0 overruns:5086 frame:0
          TX packets:337302377442 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:140 errors:0 dropped:140 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:95800918429 errors:0 dropped:0 overruns:551985 frame:0
          TX packets:88302098510 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:14887782944 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14887782944 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
[oracle@xxxxxxx01 ~]$ ifconfig | grep dropped
          RX packets:279317409080 errors:0 dropped:299396077 overruns:5086 frame:0
          TX packets:337295667440 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:95797307865 errors:0 dropped:140 overruns:551985 frame:0
          TX packets:88298432287 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:25110493 errors:0 dropped:25110493 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:279297691727 errors:0 dropped:0 overruns:5086 frame:0
          TX packets:337302488486 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:140 errors:0 dropped:140 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:95800956073 errors:0 dropped:0 overruns:551985 frame:0
          TX packets:88302133786 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:14887789129 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14887789129 errors:0 dropped:0 overruns:0 carrier:0
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

 

指标简要说明

RX errors: 表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。
RX dropped: 表示数据包已经进入了 Ring Buffer,但是由于内存不够,上层协议不支持等系统原因,导致在拷贝到内存的过程中被丢弃,netstat -s可以看到更详细的原因。
RX overruns: 表示了 fifo 的 overruns,这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的,而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。
很明显,overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了,而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一,
上面那台有问题的机器就是因为 interruprs 分布的不均匀(都压在 core0),没有做 affinity 而造成的丢包。
可以尝试设置驱动程序启用多个队列,分别在不同的CPU上产生中断,增加报文的并行处理速度。增加网络层的接收缓冲区memory大小,减少应用的数目,降低CPU的压力,使应用层能够尽快处理收到的数据包。
RX frame: 表示 misaligned 的 frames。

对于 TX 的来说,出现上述 counter 增大的原因主要包括 aborted transmission, errors due to carrirer, fifo error, heartbeat erros 以及 windown error,而 collisions 则表示由于 CSMA/CD 造成的传输中断。

原文链接:https://blog.csdn.net/sinat_38723234/article/details/103455999

 

什么是UEK?

Oracle在Oracle Linux上开发并激活了一种叫做uek(Unbreakable Enterprise Kernel)的内核,安装好Oracle Linux 5.8,默认使用的即是uek内核,但同时保持了对Red Hat内核的兼容,通过对grub.conf的修改可以继续使用Red Hat内核。
uek内核是Oracle Linux、Oracle Database、中间件和硬件工程师团队合作的结果,是一个快速、现代、可靠的内核,专门针对Oracle软件和硬件进行了优化。
随着硬件的快速发展,为了更好的兼容并支持快速发展的硬件,Linux系统版本及内核也在不断的更新,uek正是在这样的环境下应运而生的产物。
 

 

原因

关于这个现象,Oracle官方mos上作了说明,参考:

  The Statistic Value of Dropped Packets of Network Interface Increases Constantly in UEK2/UEK3/UEK4 Kernel (Doc ID 1515650.1)


这里对文档内容做一下翻译:

无论内核版本如何,始终丢弃数据包。但是,2.6.37之前的内核根本不计算和报告这些丢弃的数据包,只是默默地丢弃它们,仅在2.6.37和更高版本中才对数据包丢弃进行计数和报告。

这不是BUG。2.6.37之前的所有内核都不会记录在没有处理程序的接口上接收到的数据包。记录所有丢弃的数据包是设计使然,从2.6.37起是有意的。

在主动备份绑定的情况下,这包括所有发送到被动接口的数据包。将丢弃的其他数据包包括主机不关心的广播数据包。

 

请注意,ifconfig中的“dropped”是指成功接收到数据包的情况,但是内核*选择*丢弃数据包,因为它没有数据包中数据的处理程序。

因此,下降计数器是完全正常的(如果看起来很奇怪);但是,它们可能指向网络中不存在的流量(例如配置错误/恶意主机)。

 

丢帧率相对较低(百分之几)是正常现象,而且是预期的;高丢帧率通常表示LAN上其他地方的主机行为异常或流氓。

 

有条件地使用的大多数第2层协议(例如VLAN)使用与交换机的协商,以避免转发对本地主机无用的流量。

因此,当丢弃次数相对较高时,确实会有流量进入本地计算机的网络端口,而该流量不应该在该端口上出现-可能来自同一网络中其他地方的主机在做不正确的事情或发送大量广播数据包。

 

请注意,接收到的问题情况在“errors”,“overruns”和“frame”计数器中报告。这些分别计算接收到但格式不正确的数据包,硬件FIFO溢出和线路级数据包损坏。 

 

文档指出这是预期的一种行为,我看了下,果然有这个现象的都是Oracle Linux,并且内核版本都是在2.6.37之后。

至于丢帧率,

[oracle@xxxxxxx01 ~]$ ifconfig bond0
bond0     Link encap:Ethernet  HWaddr E0:4F:43:73:0D:22  
          inet addr:172.30.16.1  Bcast:172.30.16.255  Mask:255.255.255.0
          inet6 addr: fe80::e24f:43ff:fe73:d22/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:279322681399 errors:0 dropped:299396500 overruns:5086 frame:0
          TX packets:337301500702 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:83014618728275 (75.5 TiB)  TX bytes:311174623566225 (283.0 TiB)

 

丢帧率=299396500/83014618728275=0.0000036066,不清楚是否这么计算。

这可是比百分之几还要小很多了,算是正常现象。

 

posted @ 2020-07-08 09:38  PiscesCanon  阅读(34)  评论(0编辑  收藏