Linux Kernel TCP/IP Stack — 网卡监控

Posted 范桂飓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux Kernel TCP/IP Stack — 网卡监控相关的知识,希望对你有一定的参考价值。

目录

文章目录

ethtool -S

查看网卡统计信息。例如:接收和发送的数据包总数,接收和发送的流量,丢弃的包数量,错误的数据包数量等。

监控这些数据比较困难。因为用命令行获取很容易,但是以上字段并没有一个统一的标准。不同的驱动,甚至同一驱动的不同版本可能字段都会有差异。

可以先粗略的查看 “drop”, “buffer”, “miss” 等字样。然后,在驱动的源码里找到对应的更新这些字段的地方,这可能是在软件层面更新的,也有可能是在硬件层面通过寄存器更新的。如果是通过硬件寄存器的方式,就得查看网卡的 data sheet(说明书),搞清楚这个寄存器代表什么。ethtoool 给出的这些字段名,有一些是有误导性的(misleading)。

sysfs

sysfs 也提供了统计信息,但相比于网卡层的统计,要更上层一些。

  • 可以获取的 ens33 的接收端数据包的类型有这些:

  • 获取接收到的数据包的总数为:

不同类型的统计分别位于 /sys/class/net/NIC/statistics/ 下面的不同文件,包括 collisions, rx_dropped, rx_errors, rx_missed_errors 等等。

要注意的是,每种类型代表什么意思,是由驱动来决定的,因此也是由驱动决定何时以及在哪里更新这些计数的。你可能会发现一些驱动将一些特定类型的错误归类为 drop,而另外一些驱动可能将它们归类为 miss。

这些值至关重要,因此需要查看对应的网卡驱动,搞清楚它们真正代表什么。

/proc/net/dev

/proc/net/dev 提供了更高一层的网卡统计。

这个文件里显示的统计只是 sysfs 里面的一个子集,但适合作为一个常规的统计参考。

如果对这些数据准确度要求特别高,那必须查看内核源码 、驱动源码和驱动手册,搞清楚每个字段真正代表什么意思,计数是如何以及何时被更新的。

以上是关于Linux Kernel TCP/IP Stack — 网卡监控的主要内容,如果未能解决你的问题,请参考以下文章

Linux Kernel TCP/IP Stack — L4 Layer

Linux Kernel TCP/IP Stack — 协议栈发包处理流程

Linux Kernel TCP/IP Stack — Overview

Linux Kernel TCP/IP Stack — Overview

Linux Kernel TCP/IP Stack — L1 Layer

Linux Kernel TCP/IP Stack — L1 Layer