Table of Contents

1. 了解接收数据包的流程

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

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

2. ifconfig 解释

(1) RX errors

(2) RX dropped

(3) RX overruns

(4) RX frame

3. 网卡工作原理

网卡收包

网卡发包

网卡中断处理函数

缓冲区访问

4. 丢包排查思路

先查看硬件情况

overruns 和 buffer size

Red Hat 官方解决思路

参考文章

附录A:ethtool命令常见参数说明

附录B:ethtool - utility for controlling network drivers and hardware


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

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

1. 了解接收数据包的流程


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

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

  1. 网卡收到数据包。
  2. 将数据包从网卡硬件缓存转移到服务器内存中。
  3. 通知内核处理。
  4. 经过 TCP/IP 协议逐层处理。
  5. 应用程序通过 read() 从 socket buffer 读取数据。

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


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

  1. 驱动在内存中分配一片缓冲区用来接收数据包,叫做 sk_buffer
  2. 将上述缓冲区的地址和大小(即接收描述符),加入到 rx ring buffer描述符中的缓冲区地址是 DMA 使用的物理地址;
  3. 驱动通知网卡有一个新的描述符;
  4. 网卡从 rx ring buffer 中取出描述符,从而获知缓冲区的地址和大小;
  5. 网卡收到新的数据包;
  6. 网卡将新数据包通过 DMA 直接写到 sk_buffer 中。

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

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


这个时候,数据包已经被转移到了 sk_buffer 中。前文提到,这是驱动程序在内存中分配的一片缓冲区,并且是通过 DMA 写入的,这种方式不依赖 CPU 直接将数据写到了内存中,意味着对内核来说,其实并不知道已经有新数据到了内存中。那么如何让内核知道有新数据进来了呢?答案就是中断,通过中断告诉内核有新数据进来了,并需要进行后续处理。

提到中断,就涉及到硬中断和软中断,首先需要简单了解一下它们的区别:

  • 硬中断:由硬件自己生成,具有随机性,硬中断被 CPU 接收后,触发执行中断处理程序。中断处理程序只会处理关键性的、短时间内可以处理完的工作,剩余耗时较长工作,会放到中断之后,由软中断来完成。硬中断也被称为上半部分。
  • 软中断:由硬中断对应的中断处理程序生成,往往是预先在代码里实现好的,不具有随机性。(除此之外,也有应用程序触发的软中断,与本文讨论的网卡收包无关。)也被称为下半部分。

《Linux 硬中断和软中断》

当 NIC 把数据包通过 DMA 复制到内核缓冲区 sk_buffer 后,NIC 立即发起一个硬件中断。CPU 接收后,首先进入上半部分,网卡中断对应的中断处理程序是网卡驱动程序的一部分,之后由它发起软中断,进入下半部分,开始消费 sk_buffer 中的数据,交给内核协议栈处理。

DPDK 网卡收包流程

通过中断,能够快速及时地响应网卡数据请求,但如果数据量大,那么会产生大量中断请求,CPU 大部分时间都忙于处理中断,效率很低。为了解决这个问题,现在的内核及驱动都采用一种叫 NAPI(new API)的方式进行数据处理,其原理可以简单理解为 中断 + 轮询,在数据量大时,一次中断后通过轮询接收一定数量包再返回,避免产生多次中断。

2. ifconfig 解释


[root@localhost ~]
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.135 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe9b:52d3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9b:52:d3 txqueuelen 1000 (Ethernet)
RX packets 833 bytes 61846 (60.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 122 bytes 9028 (8.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

(1) RX errors

表示总的收包的错误数量,这包括 too-long-frames 错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。

(2) RX dropped

表示数据包已经进入了 Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃。

(3) 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 而造成的丢包。

(4) RX frame

表示 misaligned 的 frames。

3. 网卡工作原理


如果上面接收数据包的流程觉得不够详细可以再看纯文字解释

网卡收包


网线上的 packet 首先被网卡获取,网卡会检查 packet 的 CRC 校验,保证完整性,然后将 packet 头去掉,得到 frame。网卡会检查 MAC 包内的目的 MAC 地址,如果和本网卡的 MAC 地址不一样则丢弃 (混杂模式除外)。

网卡将 frame 拷贝到网卡内部的 FIFO 缓冲区,触发硬件中断。(如有 ring buffer 的网卡,好像 frame 可以先存在 ring buffer 里再触发软件中断(下篇文章将详细解释 Linux 中 frame 的走向),ring buffer 是网卡和驱动程序共享,是设备里的内存,但是对操作系统是可见的,因为看到 linux 内核源码里网卡驱动程序是使用 kcalloc 来分配的空间,所以 ring buffer 一般都有上限,另外这个 ring buffer size,表示的应该是能存储的 frame 的个数,而不是字节大小。另外有些系统的 ethtool 命令 并不能改变 ring parameters 来设置 ring buffer 的大小,暂时不知道为什么,可能是驱动不支持。)

网卡驱动程序通过硬中断处理函数,构建 sk_buff,把 frame 从网卡 FIFO 拷贝到内存 skb 中,接下来交给内核处理。(支持 napi 的网卡应该是直接放在 ring buffer,不触发硬中断,直接使用软中断,拷贝 ring buffer 里的数据,直接输送给上层处理,每个网卡在一次软中断处理过程能处理 weight 个 frame)

过程中,网卡芯片对 frame 进行了 MAC 过滤,以减小系统负荷。(除了混杂模式)

网卡发包


网卡驱动程序将 IP 包添加 14 字节的 MAC 头,构成 frame(暂无 CRC)。Frame(暂无 CRC)中含有发送端和接收端的 MAC 地址,由于是驱动程序创建 MAC 头,所以可以随便输入地址,也可以进行主机伪装。

驱动程序将 frame(暂无 CRC)拷贝到网卡芯片内部的缓冲区,由网卡处理。

网卡芯片将未完全完成的 frame(缺 CRC)再次封装为可以发送的 packet,也就是添加头部同步信息和 CRC 校验,然后丢到网线上,就完成一个 IP 报的发送了,所有接到网线上的网卡都可以看到该 packet。

网卡中断处理函数


产生中断的每个设备都有一个相应的中断处理程序,是设备驱动程序的一部分。每个网卡都有一个中断处理程序,用于通知网卡该中断已经被接收了,以及把网卡缓冲区的数据包拷贝到内存中。

当网卡接收来自网络的数据包时,需要通知内核数据包到了。网卡立即发出中断。内核通过执行网卡已注册的中断处理函数来做出应答。中断处理程序开始执行,通知硬件,拷贝最新的网络数据包到内存,然后读取网卡更多的数据包。

这些都是重要、紧迫而又与硬件相关的工作。内核通常需要快速的拷贝网络数据包到系统内存,因为网卡上接收网络数据包的缓存大小固定,而且相比系统内存也要小得多。所以上述拷贝动作一旦被延迟,必然造成网卡 FIFO 缓存溢出 - 进入的数据包占满了网卡的缓存,后续的包只能被丢弃,这也应该就是 ifconfig 里的 overrun 的来源。

当网络数据包被拷贝到系统内存后,中断的任务算是完成了,这时它把控制权交还给被系统中断前运行的程序。

缓冲区访问


网卡的内核缓冲区,是在 PC 内存中,由内核控制,而网卡会有 FIFO 缓冲区,或者 ring buffer,这应该将两者区分开。FIFO 比较小,里面有数据便会尽量将数据存在内核缓冲中。

  • 网卡中的缓冲区既不属于内核空间,也不属于用户空间。它属于硬件缓冲,允许网卡与操作系统之间有个缓冲;
  • 内核缓冲区在内核空间,在内存中,用于内核程序,做为读自或写往硬件的数据缓冲区;
  • 用户缓冲区在用户空间,在内存中,用于用户程序,做为读自或写往硬件的数据缓冲区;
  • 另外,为了加快数据的交互,可以将内核缓冲区映射到用户空间,这样,内核程序和用户程序就可以同时访问这一区间了。

对于有 ring buffer 的网卡,ring buffer 是由驱动与网卡共享的,所以内核可以直接访问 ring buffer,一般拷贝 frames 的副本到自己的内核空间进行处理(deliver 到上层协议,之后的一个个 skb 就是按 skb 的指针传递方式传递,直到用户获得数据,所以,对于 ring buffer 网卡,大量拷贝发生在 frame 从 ring buffer 传递到内核控制的计算机内存里)。

4. 丢包排查思路


网卡工作在数据链路层,数据量链路层,会做一些校验,封装成帧。我们可以查看校验是否出错,确定传输是否存在问题。然后从软件层面,是否因为缓冲区太小丢包。

先查看硬件情况


一台机器经常收到丢包的报警,先看看最底层的有没有问题:

(1) 查看工作模式是否正常

[root@localhost ~]# ethtool eth0 | egrep 'Speed|Duplex'
Speed: 1000Mb/s
Duplex: Full

(2) 查看检验是否正常

[root@localhost ~]# ethtool -S eth0 | grep crc
rx_crc_errors: 0

Speed,Duplex,CRC 之类的都没问题,基本可以排除物理层面的干扰。

overruns 和 buffer size


for i in `seq 1 100`; do ifconfig eth2 | grep RX | grep overruns; sleep 1; doneRX packets:346547657 errors:0 dropped:0 overruns:35345 frame:0-g   –show-ringQueries the specified ethernet device for rx/tx ring parameter information.
-G   –set-ringChanges the rx/tx ring parameters of the specified ethernet device.ethtool -g eth0[root@localhost ~]
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256ethtool -G eth0 rx 2048
ethtool -G eth0 tx 2048[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 2048
RX Mini: 0
RX Jumbo: 0
TX: 2048

Red Hat 官方解决思路


Issue

Why rx_crc_errors incrementing in the receive counter of ethtool -S output?

$ ethtool -S <Interface_name> | grep -i errorrx_error_bytes: 0tx_error_bytes: 0tx_mac_errors: 0tx_carrier_errors: 0rx_crc_errors: 9244rx_align_errors: 0

Resolution 解析度

  1. Change the cable.
  2. Check switch configuration.
  3. Change the network interface card.
  1. 更换电缆。
  2. 检查交换机配置。
  3. 更换网络接口卡。

Root Cause 根本原因

  1. Most of the time incrementing the value of rx_crc_errors means the problem is in Layer-1of the networking model.
  2. When a packet is received at the interface, it goes through a data integrity check which is called cyclic redundancy check. If the packet fails in that check, it is marked as rx_crc_errors.
  3. The switch was forcing the NIC to operate in half-duplex mode. Fixing the switch to tell the NIC to operate in full-duplex mode have resolved the issue.
  1. 在大多数情况下,增加rx_crc_errors的值意味着该问题出在网络模型的第1层。
  2. 当在接口上接收到数据包时,它将经历数据完整性检查,这称为循环冗余检查。 如果数据包在该检查中失败,则将其标记为rx_crc_errors。
  3. 交换机强制NIC以半双工模式运行。 固定交换机以告知NIC以全双工模式运行已解决了该问题。

Diagnostic Steps 诊断步骤

Check ethtool -S output and find where are the drops and errors.

$ ethtool -S <Interface_name> | grep -i errorrx_error_bytes: 0tx_error_bytes: 0tx_mac_errors: 0tx_carrier_errors: 0rx_crc_errors: 9244  >>>>>>rx_align_errors: 0

Check the numbers corresponding to rx_crc_errors.

ethtool p1p1Settings for p1p1:Supported ports: [ FIBRE ]Supported link modes:   10000baseT/FullSupported pause frame use: SymmetricSupports auto-negotiation: NoSupported FEC modes: Not reportedAdvertised link modes:  10000baseT/FullAdvertised pause frame use: SymmetricAdvertised auto-negotiation: NoAdvertised FEC modes: Not reportedSpeed: 10000Mb/sDuplex: FullPort: FIBREPHYAD: 0Transceiver: internalAuto-negotiation: offSupports Wake-on: dWake-on: dCurrent message level: 0x00000007 (7)drv probe linkLink detected: yes

显示了 p1p1 的接口类型,连接模式,速率等等信息,以及当前是否连接了网线(如果是网线 Supported ports 就是 TP,如果是光纤则显示 Fiber),这里例举下 3 个重要关键词

Supported ports: [FIBRE]
Speed: 10000Mb/s
Link detected: yes

ethtool -S p1p1 | grep -i errorrx_errors: 0tx_errors: 0rx_over_errors: 0rx_crc_errors: 0rx_frame_errors: 0rx_fifo_errors: 0rx_missed_errors: 0tx_aborted_errors: 0tx_carrier_errors: 0tx_fifo_errors: 0tx_heartbeat_errors: 0rx_length_errors: 0rx_long_length_errors: 0rx_short_length_errors: 0rx_csum_offload_errors: 0ethtool -p <Interface_name>
ethtool -p eth0ethtool -i p1p1driver: ixgbe
version: 5.1.0-k-rh7.6
firmware-version: 0x80000960, 18.3.6
expansion-rom-version:
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yesethtool -s eth0 speed 100

参考文章

《ethtool原理介绍和解决网卡丢包排查思路》简书

《ethtool 原理介绍和解决网卡丢包排查思路》微信

《DPDK examples ethtool-app完全注释》

《Linux查看网口带宽状态(ifconfig,netstat,ethtool)》

《Linux系统利用C语言获取网口信息(IP地址,MAC地址,状态,带宽speed等)》

附录A:ethtool命令常见参数说明

参数

说明

-a

查看网卡中接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。

-A

修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。

-c

display the Coalesce(聚合、联合) information of the specified ethernet card.聚合网口信息,使看起来更有规律。

-C

Change the Coalesce setting of the specified ethernet card.修改网卡聚合信息。

-g

Display the rx/tx ring parameter information of the specified ethernet card. 显示网卡的接收/发送环形参数。

-G

Change the rx/tx ring setting of the specified ethernet card. 修改网卡的接收/发送环形参数。

-i

显示网卡驱动的信息,如驱动的名称、版本等。

-d

显示register dump信息, 部分网卡驱动不支持该选项。

-e

显示EEPROM dump信息,部分网卡驱动不支持该选项。

-E

修改网卡EEPROM byte.

-k

显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。

-K

修改网卡Offload参数的状态

-p

用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。

-r

如果auto-negotiation模块的状态为on,则restarts auto-negotiation.

-s

修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。加上-s选项修改的内容才会生效

-S

显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。

-t

让网卡执行自我检测,有两种模式:offline or online.

附录B:ethtool - utility for controlling network drivers and hardware

https://mirrors.edge.kernel.org/pub/software/network/ethtool/

Introduction

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.

Bugs

Bug reports should be sent to the maintainer, Michal Kubecek <mkubecek@suse.cz>, and to the netdev mailing list <netdev@vger.kernel.org>.

Development

See the development page.

Download

Version Date Files
5.9 2020-10-15 ethtool-5.9.tar.xz ethtool-5.9.tar.gz ethtool-5.9.tar.sign
5.8 2020-08-04 ethtool-5.8.tar.xz ethtool-5.8.tar.gz ethtool-5.8.tar.sign
5.7 2020-06-04 ethtool-5.7.tar.xz ethtool-5.7.tar.gz ethtool-5.7.tar.sign
5.6 2020-05-12 ethtool-5.6.tar.xz ethtool-5.6.tar.gz ethtool-5.6.tar.sign
5.4 2020-01-10 ethtool-5.4.tar.xz ethtool-5.4.tar.gz ethtool-5.4.tar.sign
5.3 2019-09-23 ethtool-5.3.tar.xz ethtool-5.3.tar.gz ethtool-5.3.tar.sign
5.2 2019-07-25 ethtool-5.2.tar.xz ethtool-5.2.tar.gz ethtool-5.2.tar.sign
5.1 2019-05-17 ethtool-5.1.tar.xz ethtool-5.1.tar.gz ethtool-5.1.tar.sign
5.0 2019-03-13 ethtool-5.0.tar.xz ethtool-5.0.tar.gz ethtool-5.0.tar.sign
4.19 2018-11-02 ethtool-4.19.tar.xz ethtool-4.19.tar.gz ethtool-4.19.tar.sign
4.18 2018-08-24 ethtool-4.18.tar.xz ethtool-4.18.tar.gz ethtool-4.18.tar.sign
4.17 2018-05-15 ethtool-4.17.tar.xz ethtool-4.17.tar.gz ethtool-4.17.tar.sign
4.16 2018-04-13 ethtool-4.16.tar.xz ethtool-4.16.tar.gz ethtool-4.16.tar.sign
4.15 2018-02-01 ethtool-4.15.tar.xz ethtool-4.15.tar.gz ethtool-4.15.tar.sign
4.13 2017-10-27 ethtool-4.13.tar.xz ethtool-4.13.tar.gz ethtool-4.13.tar.sign
4.11 2017-06-02 ethtool-4.11.tar.xz ethtool-4.11.tar.gz ethtool-4.11.tar.sign
4.10 2017-03-24 ethtool-4.10.tar.xz ethtool-4.10.tar.gz ethtool-4.10.tar.sign
4.8 2016-10-04 ethtool-4.8.tar.xz ethtool-4.8.tar.gz ethtool-4.8.tar.sign
4.6 2016-06-26 ethtool-4.6.tar.xz ethtool-4.6.tar.gz ethtool-4.6.tar.sign
4.5 2016-03-14 ethtool-4.5.tar.xz ethtool-4.5.tar.gz ethtool-4.5.tar.sign
4.2 2015-10-09 ethtool-4.2.tar.xz ethtool-4.2.tar.gz ethtool-4.2.tar.sign
4.0 2015-05-31 ethtool-4.0.tar.xz ethtool-4.0.tar.gz ethtool-4.0.tar.sign
3.18 2014-12-14 ethtool-3.18.tar.xz ethtool-3.18.tar.gz ethtool-3.18.tar.sign
3.16 2014-09-22 ethtool-3.16.tar.xz ethtool-3.16.tar.gz ethtool-3.16.tar.sign
3.15 2014-07-20 ethtool-3.15.tar.xz ethtool-3.15.tar.gz ethtool-3.15.tar.sign
3.14 2014-04-21 ethtool-3.14.tar.xz ethtool-3.14.tar.gz ethtool-3.14.tar.sign
3.13 2014-01-27 ethtool-3.13.tar.xz ethtool-3.13.tar.gz ethtool-3.13.tar.sign
3.12.1 2013-11-08 ethtool-3.12.1.tar.xz ethtool-3.12.1.tar.gz ethtool-3.12.1.tar.sign
3.12 2013-11-07 ethtool-3.12.tar.xz ethtool-3.12.tar.gz ethtool-3.12.tar.sign
3.11 2013-09-12 ethtool-3.11.tar.xz ethtool-3.11.tar.gz ethtool-3.11.tar.sign
3.10 2013-07-01 ethtool-3.10.tar.xz ethtool-3.10.tar.gz ethtool-3.10.tar.sign
3.9 2013-04-30 ethtool-3.9.tar.xz ethtool-3.9.tar.gz ethtool-3.9.tar.sign
3.8 2013-02-28 ethtool-3.8.tar.xz ethtool-3.8.tar.gz ethtool-3.8.tar.sign
3.7 2012-12-13 ethtool-3.7.tar.xz ethtool-3.7.tar.gz ethtool-3.7.tar.sign
3.6 2012-10-05 ethtool-3.6.tar.xz ethtool-3.6.tar.gz ethtool-3.6.tar.sign
3.5 2012-08-02 ethtool-3.5.tar.xz ethtool-3.5.tar.gz ethtool-3.5.tar.sign
3.4.2 2012-07-16 ethtool-3.4.2.tar.xz ethtool-3.4.2.tar.gz ethtool-3.4.2.tar.sign
3.4.1 2012-06-13 ethtool-3.4.1.tar.xz ethtool-3.4.1.tar.gz ethtool-3.4.1.tar.sign
3.4 2012-06-08 ethtool-3.4.tar.xz ethtool-3.4.tar.gz ethtool-3.4.tar.sign
3.2 2012-01-12 ethtool-3.2.tar.xz ethtool-3.2.tar.gz ethtool-3.2.tar.sign
3.1 2011-11-16 ethtool-3.1.tar.xz ethtool-3.1.tar.gz ethtool-3.1.tar.sign
3.0 2011-08-04 ethtool-3.0.tar.xz ethtool-3.0.tar.gz ethtool-3.0.tar.sign
2.6.39 2011-06-01 ethtool-2.6.39.tar.xz ethtool-2.6.39.tar.gz ethtool-2.6.39.tar.sign
2.6.38 2011-03-15 ethtool-2.6.38.tar.xz ethtool-2.6.38.tar.gz ethtool-2.6.38.tar.sign
2.6.37 2011-01-05 ethtool-2.6.37.tar.xz ethtool-2.6.37.tar.gz ethtool-2.6.37.tar.sign
2.6.36 2010-11-16 ethtool-2.6.36.tar.xz ethtool-2.6.36.tar.gz ethtool-2.6.36.tar.sign

Older versions are available in the Sourceforge 'gkernel' project.

ethtool 原理介绍和解决网卡丢包排查思路(附ethtool源码下载)相关推荐

  1. centos 7 局域网丢包排查_ethtool原理介绍和解决网卡丢包排查思路

    前言 之前记录过处理因为LVS网卡流量负载过高导致软中断发生丢包的问题,RPS和RFS网卡多队列性能调优实践,对一般人来说压力不大的情况下其实碰见的概率并不高.这次想分享的话题是比较常见服务器网卡丢包 ...

  2. linux 丢包排查思路简述(tcp+rdma)

    linux 丢包排查思路简述 概述 网络包接收流程 网络包发送流程 丢包排查的思路 tcp排查方法 rdma排查方法 网络工具汇总 参考链接 概述 我们首先以tcp网络为例,谈谈linux系统如何收发 ...

  3. K8S集群中Pod资源数据丢包排查思路

    K8S集群中Pod资源数据丢包排查思路 Pod资源可能会由于网络原因产生丢包的现象. 当Pod资源存在丢包的现象时,会出现下面的报错: Connect to 100.111.156.74 port 5 ...

  4. 好玩的表情包机器人微信小程序源码下载支持直接搜索仿聊天界面

    这是一款和表情包有关的一款机器人小程序 界面就相当于是聊天界面,然后是你和AI的界面 打开小程序后会自动全网推送几个表情包给你 然后你可以点击下方的说你还要然后又会随机发给你 当然你也可以输入关键词然 ...

  5. 好玩的表情包机器人微信小程序源码下载支持直接搜索仿聊天界面获取支持流量主

    这是一款和表情包有关的一款机器人小程序 界面就相当于是聊天界面,然后是你和AI的界面 打开小程序后会自动全网推送几个表情包给你 然后你可以点击下方的说你还要然后又会随机发给你 当然你也可以输入关键词然 ...

  6. DHCP的工作原理 公网IP与私网IP 网络通信的流程与数据包发送 网卡的工作原理 网卡丢包问题

    网络通信的四个要素 本机的IP地址 子网掩码 网关的IP地址 DNS服务器的IP地址 获取以上配置,有两种方式 : 静态获取==>手动配置 动态获取==>dhcp自动获取 DHCP的作用 ...

  7. linux编译安装网卡驱动详解(网卡丢包)

    安装编译网卡驱动 这两天发现一台server丢包很严重,使用cacti监控工具时能获得snmp包,时常又不能,丢包严重,导致使用ssh工具连接过慢,连接数据库访问超时,此时要先确定是中病毒还是网卡问题 ...

  8. Linux网卡丢包分类整理(1)——网卡篇

    网卡丢包怎么办?或者再具体点,使用ifconfig查看网卡,发现有dropped统计时可以从哪些方面进行调查?要想知道为什么丢包,首先要弄清楚接收数据包的流程. 一. 收包模块间的关系 Linux系统 ...

  9. 【博客573】linux内核层丢包排查方法汇总

    linux丢包排查方法汇总 1.排查网卡丢包 命令1: ifconfig xxx ifconfig eth0 eth0 Link encap:Ethernet HWaddr AC::3D:A9::0D ...

最新文章

  1. python:文件操作
  2. 7 Java NIO Selector-翻译
  3. 易宝典文章——用ISA 2006标准版发布Exchange 2010的OWA系列之申请Excha
  4. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
  5. docker启动odoo提示module没有安装_Ubuntu20.04通过docker安装微信
  6. 暑期训练日志----2018.8.23
  7. Google Chrome 开发进度 官方Blog
  8. jqgrid 点击列头的超链接或按钮时,不触发列排序事件
  9. 超好用epub阅读器分享
  10. C++17 并行排序初体验
  11. 软件特性开发的流程感想
  12. Android进阶之路 - 毛玻璃遮罩层
  13. Android build.gradle配置详解
  14. JAVA学习笔记(三十一)-电影系统案例
  15. 2021-2027全球与中国MPO连接器市场现状及未来发展趋势
  16. 使用StarUml画数据库ER图,并使用DDL生成SQL代码
  17. Cesium双屏对比
  18. 无线通信网知识点笔记
  19. mysql1064错误_Mysql1064错误
  20. 实现cookie跨域共享的两种方式

热门文章

  1. 2021年北京学校高考成绩查询,2021年北京高考成绩查询时间及入口【官方】
  2. ubuntu无法定位软件包问题
  3. BZOJ1509: [NOI2003]逃学的小孩
  4. Python学习(十)Python 函数
  5. JS基础9-BOM常用对象(window和history)
  6. java用volatile或AtomicBoolean实现高效并发处理 (只初始化一次的功能要求)
  7. 请不要叫我“程序员”,我是一名软件工程师--读《走出软件作坊》1
  8. Android2.2缩略图类ThumbnailUtils
  9. 如何weak link一个framework (高版本兼容低版本)
  10. XmlReader 内部使用NameTable