加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – TCP acks暂停,然后恢复,然后再次暂停.为什么?

发布时间:2021-03-16 06:27:48 所属栏目:Linux 来源:网络整理
导读:我想帮助找到我的应用程序中降低数据传输速率的原因. 我有12个嵌入式系统和一个Linux服务器.嵌入式系统通过交换机在以太网链路上通过TCP向服务器发送数据.以下是通过Wireshark捕获来自一块板的流量的TCP StreamGraph. 如您所见,数据传输速率约为5.8MBit /

我想帮助找到我的应用程序中降低数据传输速率的原因.

我有12个嵌入式系统和一个Linux服务器.嵌入式系统通过交换机在以太网链路上通过TCP向服务器发送数据.以下是通过Wireshark捕获来自一块板的流量的TCP StreamGraph.

如您所见,数据传输速率约为5.8MBit / s,最高可达0.25秒.这跟我所期望的嵌入式系统一样快.在此之后,在传输中插入延迟.以下显示了图表的特写:

标记为ACK的底部的阶梯形状曲线显示服务器在任何给定时间已经确认了多少数据.标记为RWIN的相应曲线显示数据带上的缓冲区中有多少空间.标记为SENT DATA的较小垂直段是发送的实际包.

在A点,服务器以尽可能快的速度确认数据,但是在23ms的持续时间内,服务器不会发送任何消息.允许嵌入式系统在不等待ACK的情况下发送到RWIN,但它不会这样做,因为它需要保持发送的数据,直到它们被激活(如果它们需要被重新发送)并且发送缓冲区空间是有限.

然后,在B点,所有接收的数据立即被确认,正常的acking和发送在另一个暂停发生之前恢复2.5ms.

Wireshark捕获是由另一台PC完成的,该PC连接到交换机上的一个端口,该端口设置为镜像嵌入式系统所连接的端口上发送和接收的所有数据.

Linux服务器运行Java应用程序,该应用程序处理数据并将其存储在磁盘上.它没有显示出最大化CPU的迹象.操作系统是Ubuntu Server 12.04,具有默认网络设置.

我可以看到,我可能会从嵌入式系统中分配更多的发送缓冲区空间中获益,以匹配Linux服务器中的接收窗口空间量,但这似乎不是限制因素.

我的问题是:

>什么可能是Linux服务器暂停ACK的原因,即使它显然能够收到一切就好了?
>我该如何调试?

解决方法

尝试使用ethtool -A devname autoneg off rx off tx off关闭以太网PAUSE帧 如果这没有帮助,它可能是TCP窗口缩放问题和/或发送或接收器主机上的IRQ存储问题.您可以使用调节TCP流量的ethtool和sysctl条目来调查尝试不同设置的两个问题. 没有其他信息,很难说出这里发生了什么……

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读