ethtool如何让接口闪灯_ethtool原理介绍和解决网卡丢包排查思路

前言

之前记录过处理因为LVS网卡流量负载过高导致软中断发生丢包的问题,RPS和RFS网卡多队列性能调优实践,对一般人来说压力不大的情况下其实碰见的概率并不高。这次想分享的话题是比较常见服务器网卡丢包现象排查思路,如果你是想了解点对点的丢包解决思路涉及面可能就比较广,不妨先参考之前的文章如何使用MTR诊断网络问题,对于Linux常用的网卡丢包分析工具自然是ethtool。

更新历史

2020年06月22日 - 初稿

ethtool简介

ethtool - utility for controlling network drivers and hardware

ethtool is the standard Linux utility for controlling network drivers and hardware, particularly for wired Ethernet devices. It can be used to:

Get identification and diagnostic information

Get extended device statistics

Control speed, duplex, autonegotiation and flow control for Ethernet devices

Control checksum offload and other hardware offload features

Control DMA ring sizes and interrupt moderation

Control receive queue selection for multiqueue devices

Upgrade firmware in flash memory

Most features are dependent on support in the specific driver. See the manual page for full information.

ethtool 用于查看和修改网络设备(尤其是有线以太网设备)的驱动参数和硬件设置。你可以根据需要更改以太网卡的参数,包括自动协商、速度、双工和局域网唤醒等参数。通过对以太网卡的配置,你的计算机可以通过网络有效地进行通信。该工具提供了许多关于接驳到你的 Linux 系统的以太网设备的信息。

了解接收数据包的流程

这里摘取了美团技术团队的分析,在此表示感谢

接收数据包是一个复杂的过程,涉及很多底层的技术细节,但大致需要以下几个步骤:

网卡收到数据包。

将数据包从网卡硬件缓存转移到服务器内存中。

通知内核处理。

经过 TCP/IP 协议逐层处理。

应用程序通过 read() 从 socket buffer 读取数据。

将网卡收到的数据包转移到主机内存(NIC 与驱动交互)

NIC 在接收到数据包之后,首先需要将数据同步到内核中,这中间的桥梁是 rx ring buffer。它是由 NIC 和驱动程序共享的一片区域,事实上,rx ring buffer 存储的并不是实际的 packet 数据,而是一个描述符,这个描述符指向了它真正的存储地址,具体流程如下:

驱动在内存中分配一片缓冲区用来接收数据包,叫做 sk_buffer;

将上述缓冲区的地址和大小(即接收描述符),加入到 rx ring buffer。描述符中的缓冲区地址是 DMA 使用的物理地址;

驱动通知网卡有一个新的描述符;

网卡从 rx ring buffer 中取出描述符,从而获知缓冲区的地址和大小;

网卡收到新的数据包;

网卡将新数据包通过 DMA 直接写到 sk_buffer 中。

当驱动处理速度跟不上网卡收包速度时,驱动来不及分配缓冲区,NIC 接收到的数据包无法及时写到 sk_buffer,就会产生堆积,当 NIC 内部缓冲区写满后,就会丢弃部分数据,引起丢包。这部分丢包为 rx_fifo_errors,在 /proc/net/dev 中体现为 fifo 字段增长,在 ifconfig 中体现为 overruns 指标增长。

通知系统内核处理(驱动与 Linux 内核交互)

这个时候,数据包已经被转移到了 sk_buffer 中。前文提到,这是驱动程序在内存中分配的一片缓冲区,并且是通过 DMA 写入的,这种方式不依赖 CPU 直接将数据写到了内存中&#

你可能感兴趣的:(ethtool如何让接口闪灯)