Linux 网络: 网卡速度异常案例(1)

文章目录

  • 1. 前言
  • 2. 问题描述
  • 3. 问题简析

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 问题描述

TIAM335x 平台适配了一个 1000Mbps 的 PHY 芯片,通过 iperf 打流,TCP 带宽测试结果如下:

# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.201, port 55944
[  5] local 192.168.1.88 port 5201 connected to 192.168.1.201 port 55945
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  51.5 MBytes   431 Mbits/sec                  
[  5]   1.00-2.00   sec  53.0 MBytes   444 Mbits/sec                  
[  5]   2.00-3.00   sec  52.1 MBytes   438 Mbits/sec                  
[  5]   3.00-4.00   sec  52.6 MBytes   442 Mbits/sec                  
[  5]   4.00-5.00   sec  53.0 MBytes   443 Mbits/sec                  
[  5]   5.00-6.00   sec  52.4 MBytes   441 Mbits/sec                  
[  5]   6.00-7.00   sec  52.0 MBytes   435 Mbits/sec                  
[  5]   7.00-8.00   sec  52.1 MBytes   438 Mbits/sec                  
[  5]   8.00-9.00   sec  52.2 MBytes   439 Mbits/sec                  
[  5]   9.00-10.00  sec  53.0 MBytes   444 Mbits/sec                  
[  5]  10.00-11.00  sec  52.9 MBytes   442 Mbits/sec                  
[  5]  11.00-12.00  sec  52.9 MBytes   445 Mbits/sec                  
[  5]  12.00-13.00  sec  52.4 MBytes   439 Mbits/sec                  
[  5]  13.00-14.00  sec  52.6 MBytes   441 Mbits/sec                  
[  5]  14.00-15.00  sec  51.6 MBytes   433 Mbits/sec                  
[  5]  15.00-16.00  sec  52.5 MBytes   442 Mbits/sec                  
[  5]  16.00-17.00  sec  52.2 MBytes   438 Mbits/sec                  
[  5]  17.00-18.00  sec  52.1 MBytes   437 Mbits/sec                  
[  5]  18.00-19.00  sec  52.1 MBytes   438 Mbits/sec                  
[  5]  19.00-19.54  sec  27.8 MBytes   431 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-19.54  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-19.54  sec  1023 MBytes   439 Mbits/sec                  receiver
-----------------------------------------------------------
# iperf3 -c 192.168.1.201 -p 5201 -n 2G
Connecting to host 192.168.1.201, port 5201
[  4] local 192.168.1.88 port 45292 connected to 192.168.1.201 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.02   sec  45.0 MBytes   371 Mbits/sec    0    130 KBytes       
[  4]   1.02-2.01   sec  43.8 MBytes   370 Mbits/sec    0    130 KBytes       
[  4]   2.01-3.02   sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]   3.02-4.01   sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]   4.01-5.02   sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]   5.02-6.01   sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]   6.01-7.02   sec  45.0 MBytes   374 Mbits/sec    0    130 KBytes       
[  4]   7.02-8.00   sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]   8.00-9.01   sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]   9.01-10.03  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  10.03-11.01  sec  43.8 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  11.01-12.02  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  12.02-13.00  sec  43.8 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  13.00-14.02  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  14.02-15.00  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  15.00-16.02  sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  16.02-17.00  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  17.00-18.02  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  18.02-19.00  sec  43.8 MBytes   371 Mbits/sec    0    130 KBytes       
[  4]  19.00-20.01  sec  45.0 MBytes   374 Mbits/sec    0    130 KBytes       
[  4]  20.01-21.03  sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  21.03-22.01  sec  43.8 MBytes   374 Mbits/sec    0    130 KBytes       
[  4]  22.01-23.02  sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  23.02-24.01  sec  43.8 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  24.01-25.03  sec  45.0 MBytes   371 Mbits/sec    0    130 KBytes       
[  4]  25.03-26.01  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  26.01-27.00  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  27.00-28.01  sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  28.01-29.00  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  29.00-30.01  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  30.01-31.00  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  31.00-32.02  sec  45.0 MBytes   371 Mbits/sec    0    130 KBytes       
[  4]  32.02-33.01  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  33.01-34.02  sec  45.0 MBytes   374 Mbits/sec    0    130 KBytes       
[  4]  34.02-35.03  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  35.03-36.01  sec  43.8 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  36.01-37.03  sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  37.03-38.02  sec  43.8 MBytes   371 Mbits/sec    0    130 KBytes       
[  4]  38.02-39.00  sec  43.8 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  39.00-40.01  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  40.01-41.02  sec  45.0 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  41.02-42.01  sec  43.8 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  42.01-43.03  sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  43.03-44.02  sec  43.8 MBytes   371 Mbits/sec    0    130 KBytes       
[  4]  44.02-45.00  sec  43.8 MBytes   373 Mbits/sec    0    130 KBytes       
[  4]  45.00-46.02  sec  45.0 MBytes   372 Mbits/sec    0    130 KBytes       
[  4]  46.02-46.16  sec  6.25 MBytes   368 Mbits/sec    0    130 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-46.16  sec  2.00 GBytes   372 Mbits/sec    0             sender
[  4]   0.00-46.16  sec  2.00 GBytes   372 Mbits/sec                  receiveriperf Done.

可以看到,TCP 带宽测试,接收(RX)方向的平均带宽为 439 Mbits/sec,发送方向的平均带宽为 372 Mbits/sec,无论哪个方向,都离 1000Mbps 的很远。
进行 UDP 带宽测试,在 TI AM335x 一侧运行的 iperf 作为 server 时,发现有极高的丢包率

3. 问题简析

先交代下背景,TIAM335x CPU 是单核的,最高频率为 1GHz,系统 RAM256MB。另外,测试当中去掉所有无干或可能产生对测试产生干扰的程序。首先排除硬件相关的问题,譬如网线、变压器、电阻电容,以及上电、复位时序,都有可能造成网络通信异常,但不属于本文案例中的情形。既然排查了硬件问题,剩下的自然是排查软件问题。在进行 TCP 带宽测试时(无论是 server 还是 client 模式运行),首先用 top 观察了基础状况:

# top
Mem: 25632K used, 220844K free, 180K shrd, 0K buff, 1528K cached
CPU:   0% usr  63% sys   0% nic   0% idle   0% io   0% irq  36% sirq
Load average: 0.45 0.17 0.06 3/51 133PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND132     1 root     R     2084   1%  97% iperf3 -s -D9     2 root     SW       0   0%   2% [ksoftirqd/0]10     2 root     RW       0   0%   1% [rcu_preempt]133   126 root     R     2076   1%   0% top16     2 root     IW       0   0%   0% [kworker/0:1-eve]7     2 root     IW       0   0%   0% [kworker/u2:0-ev]126     1 root     S     2076   1%   0% -sh124     1 root     S     2072   1%   0% inetd1     0 root     S     1976   1%   0% init71     1 root     S     1976   1%   0% /sbin/syslogd -n72     1 root     S     1976   1%   0% /sbin/klogd -n45     2 root     IW       0   0%   0% [kworker/u2:1-ev]13     2 root     SW       0   0%   0% [kdevtmpfs]56     2 root     SW       0   0%   0% [ubi_bgt0d]57     2 root     SW       0   0%   0% [ubifs_bgt0_0]2     0 root     SW       0   0%   0% [kthreadd]3     2 root     IW<      0   0%   0% [rcu_gp]4     2 root     IW<      0   0%   0% [rcu_par_gp]5     2 root     IW       0   0%   0% [kworker/0:0-pm]

从上面看到,RAM 使用上毫无压力;但 iperf 程序的 CPU 的占用率,已经高达97%。进一步从 CPU 那一行的信息:

CPU:   0% usr  63% sys   0% nic   0% idle   0% io   0% irq  36% sirq

可以看到,CPU 消耗在内核空间的时间 sys63%,同时 softirq 占据 36%。我们知道,网络子系统收发包都会经由 softirq 处理,所以一部分时间消耗在 softirq 上,而另外一部分时间消耗在 Linux 网络协议栈的处理过程中,经过进一步通过 ftrace 分析网络协议栈数据传输流程,验证了这一点。由于某些原因,这部分验证过程的相关信息没能在本文中有所系统。
另一方面,也排查了相关 MAC 和 PHY 驱动:PHY 的排查是通过厂商提供可读调试寄存器,在网络通信后,读取其中的调试信息,没有发现有问题出现;而对 MAC 的排查,除了对其驱动代码进行检验外,也通过 ethtool 导出数据通信后的信息,如下(只取了某侧测试的结果):

# ethtool -S eth0
NIC statistics:Good Rx Frames: 1108831Broadcast Rx Frames: 63Multicast Rx Frames: 2762Pause Rx Frames: 0Rx CRC Errors: 0Rx Align/Code Errors: 0Oversize Rx Frames: 0Rx Jabbers: 0Undersize (Short) Rx Frames: 0Rx Fragments: 0Rx Octets: 1141776072Good Tx Frames: 1104727Broadcast Tx Frames: 2Multicast Tx Frames: 20Pause Tx Frames: 0Deferred Tx Frames: 0Collisions: 0Single Collision Tx Frames: 0Multiple Collision Tx Frames: 0Excessive Collisions: 0Late Collisions: 0Tx Underrun: 0Carrier Sense Errors: 0Tx Octets: 1141221834Rx + Tx 64 Octet Frames: 370190Rx + Tx 65-127 Octet Frames: 369612Rx + Tx 128-255 Octet Frames: 198Rx + Tx 256-511 Octet Frames: 34Rx + Tx 512-1023 Octet Frames: 6Rx + Tx 1024-Up Octet Frames: 1473518Net Octets: 2282997906Rx Start of Frame Overruns: 0Rx Middle of Frame Overruns: 0Rx DMA Overruns: 0Rx DMA chan 0: head_enqueue: 1Rx DMA chan 0: tail_enqueue: 1106205Rx DMA chan 0: pad_enqueue: 0Rx DMA chan 0: misqueued: 0Rx DMA chan 0: desc_alloc_fail: 0Rx DMA chan 0: pad_alloc_fail: 0Rx DMA chan 0: runt_receive_buf: 0Rx DMA chan 0: runt_transmit_bu: 0Rx DMA chan 0: empty_dequeue: 0Rx DMA chan 0: busy_dequeue: 1071101Rx DMA chan 0: good_dequeue: 1106078Rx DMA chan 0: requeue: 0Rx DMA chan 0: teardown_dequeue: 0Tx DMA chan 0: head_enqueue: 369476Tx DMA chan 0: tail_enqueue: 735251Tx DMA chan 0: pad_enqueue: 0Tx DMA chan 0: misqueued: 17Tx DMA chan 0: desc_alloc_fail: 0Tx DMA chan 0: pad_alloc_fail: 0Tx DMA chan 0: runt_receive_buf: 0Tx DMA chan 0: runt_transmit_bu: 368846Tx DMA chan 0: empty_dequeue: 369476Tx DMA chan 0: busy_dequeue: 447896Tx DMA chan 0: good_dequeue: 1104727Tx DMA chan 0: requeue: 3Tx DMA chan 0: teardown_dequeue: 0

从上面的信息也没有看到有问题的地方。每家 MAC 驱动的输出信息都会有所不同,具体的含义要结合驱动代码来看。
通过一系列的排查,最终将问题定为 CPU 资源不够导致。在单核系统下,网卡多队列、RPS、RFS 等等内核内置的优化策略都毫无意义,因为只有一个 CPU 核。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言最详细内存函数

1. memcpy 使用和模拟实现 void * memcpy(void *destination,const void * source,size_t num);• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 ‘\0’ 的时候并不会停下来。 • 如果source和destination有任何的重…

IPv4地址

IP v4 由32位二进制构成、可以用点分十进制表示。 例如&#xff1a;192.168.1.1 11000000101010000000000100000001 由网络位和主机位组成。为了区分网络位和主机位&#xff0c;需要用子网掩码&#xff0c;子网掩码也是由32位二进制构成&#xff0c;连续的1对应网络位&#…

HDMI 2.1b 规范解读

HDMI 规范 HDMI 2.1b 是最新版 HDMI 规范&#xff0c;支持一系列更高的视频分辨率和刷新频率&#xff0c;包括 8K60 和 4K120 以及高达 10K 的分辨率。同时支持动态 HDR 格式&#xff0c;带宽能力增加到 48Gbps HDMI。 新的超高速 HDMI 线缆支持 48Gbps 带宽。该线缆可确保提供…

TS学习02 面向对象 类、封装继承、接口、泛型

TS学习02 TypeScript 面向对象1、类&#xff08;class&#xff09;属性实例属性&类属性只读属性 方法实例方法类方法 构造函数 & this 2、面向对象的特点封装属性的权限属性存取器静态属性 继承重写super抽象类 3、接口&#xff08;Interface&#xff09;4、泛型&#…

吴恩达机器学习笔记 三十二 K-means初始化 选择聚类数量

K-means 初始化 首先 K < m&#xff0c;若集群的数量多于样本数显然是不合理的。 第一步&#xff1a;随机选取 K 个样本&#xff1b; 第二步&#xff1a;设这 K 个样本为 μ1 μ2 ... μk 有时候K-meas 算法会出现局部最小值的情况&#xff0c;如左下图和右下图&#xf…

spark sql执行引擎原理及配置

如果我们想要给上层开发人员配置好一个统一的sql开发界面&#xff0c;让他们统一通过sql开发即可&#xff0c;可通过spark中的thriftserver服务实现&#xff0c;与hive中的thriftserver类似&#xff0c;配置好该服务后&#xff0c;上层通过db client或者代码中通过jdbc连接即可…

Android U user+root实现方案

背景 由于项目&#xff08;MTK平台&#xff09;上要实现userroot的版本&#xff0c;供特殊用户使用。Android T上的方案无效&#xff0c;经历了各种搜索查看资料&#xff0c;和bsp大佬一起通宵奋战&#xff0c;整出了方案。梳理记录下&#xff0c;有需要的同学可以参考。 Root…

cesium键盘控制相机位置和姿态

该类主要用于监听键盘事件并在用户按下不同按键时执行相应的相机操作&#xff0c;如改变相机的位置、偏航角、俯仰角和翻滚角&#xff0c;从而实现在三维场景中的漫游。 以下是代码的主要逻辑&#xff1a; 导入Cesium库&#xff0c;并定义一个flags对象&#xff0c;其中包含了…

Linux gcc day2

mkdir -p 递归的创建目录 rm or rmdir&#xff1a; rmdir &#xff1a;是用来删除空目录的 实际上我们更加常用的是rm命令 rm可以删除普通文件,也可以删除目录&#xff0c;目录是从某次开始就是一棵树就是递归&#xff0c;所以就要递归删除 rm -r [文件名] 递归删除目录或者目…

linux系统命令chkconfig详解,管理系统服务的工具-查看、启用、禁用和设置系统服务的启动级别

目录 一、chkconfig命令介绍 二、命令的主要作用 1、管理服务的启动和停止&#xff1a; 2、配置运行级别&#xff1a; 3、简化系统管理&#xff1a; 4、查看服务状态&#xff1a; 三、命令语法 1、基本语法 2、运行级别 四、获取帮助 1、通过help获取 2、通过man获…

Azure入门实践-如何创建两个虚拟网络的对等连接

在Azure中创建两个虚拟网络&#xff08;Virtual Network, VNet&#xff09;之间的对等连接&#xff08;VNet Peering&#xff09;可以让这两个虚拟网络中的资源像在同一个网络中一样相互通信。以下是详细的步骤&#xff1a; 1. 登录到Azure门户 打开浏览器&#xff0c;访问Az…

基于“遥感+”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作

原文链接&#xff1a;基于“遥感”蓝碳储量估算、红树林信息提取实践技术应用与科研论文写作https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599633&idx5&sn1398cde523f9c5e036e4d478fc1d3388&chksmfa8207f6cdf58ee0a3a2bf652e7ac5cf65636b05f9e3306…

备战蓝桥杯Day36 - 动态规划 - 三角形最小路径和问题

一、什么是动态规划 通过拆分问题&#xff0c;定义问题状态和状态之间的关系&#xff0c;使得问题能够以递推的方式解决。 哪些问题可以使用动态规划&#xff1f; 1、具有最优子结构&#xff1a;问题的最优解所包含的子结构的解也是最优的 2、具有无后效性&#xff1a;未来…

java项目依赖的依赖加载不到

1、描述&#xff1a; 一个项目包含多个子模块&#xff0c;并且可以根据profiles切换环境。 然后依赖的依赖就是加载不到 上面flow-es-6.8是我封装的一个环境。 2、解决: profiles里要加上默认一个环境配置,如下红色部分&#xff1a; 虽然我在idea右边maven中的profiles选项…

【ElementUI】详细分析DatePicker 日期选择器

目录 前言1. 通用Demo2. 快捷键3. 参数 前言 对于全栈玩家&#xff0c;各个组件都需相应了解才可做好前后端的CRUD 以下为实战结合Element官网的心得体会 如图所示&#xff1a; 1. 通用Demo 如果只想要一个选择日期&#xff0c;而不是范围&#xff0c;Demo如下&#xff1a;…

Docker搭建LNMP环境实战(09):安装mariadb

1、编写mariadb部署配置文件 在文件夹&#xff1a;/mnt/hgfs/dockers/test_site/compose下创建文件&#xff1a;test_site_mariadb.yml&#xff0c;内容如下&#xff1a; version: "3.5" services:test_site_mariadb:container_name: test_site_mariadbimage: mari…

逐步学习Go-Select多路复用

概述 这里又有多路复用&#xff0c;但是Go中的这个多路复用不同于网络中的多路复用。在Go里&#xff0c;select用于同时等待多个通信操作&#xff08;即多个channel的发送或接收操作&#xff09;。Go中的channel可以参考我的文章&#xff1a;逐步学习Go-并发通道chan(channel)…

JS基本类型作用域作用域链

#### 作用域链 作用域链的用途&#xff0c;是保证对执行环境有权访问的所有变量和函数的有序访问。看一个例子 js var a 1 function fn () {var b a 1console.log(b) } fn() ### 从代码执行来看 首先在创建fn函数时&#xff0c;会创建一个预先包含全局变量对象的作用域链&am…

Gparted工具 初始化磁盘

Gparted工具 初始化磁盘 1、安装 没有此工具请先安装&#xff1a; yum install epel-release yum install gparted yum install yum-utils git gnome-common gcc-c yum-builddep gparted 2、打开Gparted工具&#xff0c;初始化磁盘 使用具有root权限的普通用户打开gparted&…

HWOD:整型数组排序

一、知识点 while(1){}表示永久循环 使用break结束循环 二、题目 1、描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 2、数据范围 1<n<1000 0<val<100000 3、输入 第一行输入数组元素个数 第二行输入待排序的数组&#x…