0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

debug 吞吐量的办法

lhl545545 来源:良许Linux 作者:良许Linux 2022-09-02 09:36 次阅读

Debug 网络质量的时候,我们一般会关注两个因素:延迟和吞吐量(带宽)。延迟比较好验证,Ping 一下或者mtr[1]一下就能看出来。这篇文章分享一个 debug 吞吐量的办法。

看重吞吐量的场景一般是所谓的长肥管道(Long Fat Networks, LFN,rfc7323[2]). 比如下载大文件。吞吐量没有达到网络的上限,主要可能受 3 个方面的影响:

发送端出现了瓶颈

接收端出现了瓶颈

中间的网络层出现了瓶颈

发送端出现瓶颈一般的情况是 buffer 不够大,因为发送的过程是,应用调用 syscall,将要发送的数据放到 buffer 里面,然后由系统负责发送出去。如果 buffer 满了,那么应用会阻塞住(如果使用 block 的 API 的话),直到 buffer 可用了再继续 write,生产者和消费者模式。

fc83cbec-2a4e-11ed-ba43-dac502259ad0.png

发送端出现瓶颈一般都比较好排查,甚至通过应用的日志看何时阻塞住了即可。大部分情况都是第 2,3 种情况,比较难以排查。这种情况发生在,发送端的应用已经将内容写入到了系统的 buffer 中,但是系统并没有很快的发送出去。

TCP 为了优化传输效率(注意这里的传输效率,并不是单纯某一个 TCP 连接的传输效率,而是整体网络的效率),会:

保护接收端,发送的数据不会超过接收端的 buffer 大小 (Flow control)。数据发送到接受端,也是和上面介绍的过程类似,kernel 先负责收好包放到 buffer 中,然后上层应用程序处理这个 buffer 中的内容,如果接收端的 buffer 过小,那么很容易出现瓶颈,即应用程序还没来得及处理就被填满了。那么如果数据继续发过来,buffer 存不下,接收端只能丢弃。

保护网络,发送的数据不会 overwhelming 网络 (Congestion Control, 拥塞控制), 如果中间的网络出现瓶颈,会导致长肥管道的吞吐不理想;

对于接收端的保护,在两边连接建立的时候,会协商好接收端的 buffer 大小 (receiver window size, rwnd), 并且在后续的发送中,接收端也会在每一个 ack 回包中报告自己剩余和接受的 window 大小。这样,发送端在发送的时候会保证不会发送超过接收端 buffer 大小的数据。(意思是,发送端需要负责,receiver 没有 ack 的总数,不会超过 receiver 的 buffer.)

fc9ec8d4-2a4e-11ed-ba43-dac502259ad0.png

对于网络的保护,原理也是维护一个 Window,叫做 Congestion window,拥塞窗口,cwnd, 这个窗口就是当前网络的限制,发送端不会发送超过这个窗口的容量(没有 ack 的总数不会超过 cwnd)。

怎么找到这个 cwnd 的值呢?

这个就是关键了,默认的算法是 cubic, 也有其他算法可以使用,比如 Google 的BBR[3].

主要的逻辑是,慢启动(Slow start), 发送数据来测试,如果能正确收到 receiver 那边的 ack,说明当前网络能容纳这个吞吐,将 cwnd x 2,然后继续测试。直到下面一种情况发生:

发送的包没有收到 ACK

cwnd 已经等于 rwnd 了

第 2 点很好理解,说明网络吞吐并不是一个瓶颈,瓶颈是在接收端的 buffer 不够大。cwnd 不能超过 rwnd,不然会 overload 接收端。

对于第 1 点,本质上,发送端是用丢包来检测网络状况的,如果没有发生丢包,表示一切正常,如果发生丢包,说明网络处理不了这个发送速度,这时候发送端会直接将 cwnd 减半。

但实际造成第 1 点的情况并不一定是网络吞吐瓶颈,而可能是以下几种情况:

网络达到了瓶颈

网络质量问题丢包

中间网络设备延迟了包的送达,导致发送端没有在预期时间内收到 ACK

2 和 3 原因都会造成 cwnd 下降,无法充分利用网络吞吐。

以上就是基本的原理,下面介绍如何定位这种问题。

rwnd 查看方式

这个 window size 直接就在 TCP header 里面,抓下来就能看这个字段。

fcaf21c0-2a4e-11ed-ba43-dac502259ad0.png

但是真正的 window size 需要乘以 factor, factor 是在TCP 握手节点通过 TCP Options 协商的[4]。所以如果分析一条 TCP 连接的 window size,必须抓到握手阶段的包,不然就不可以知道协商的 factor 是多少。

fcd64ff2-2a4e-11ed-ba43-dac502259ad0.png

cwnd 查看方式

Congestion control 是发送端通过算法得到的一个动态变量,会试试调整,并不会体现在协议的传输数据中。所以要看这个,必须在发送端的机器上看。

Linux 中可以使用ss -i选项将 TCP 连接的参数都打印出来。

fcfa4da8-2a4e-11ed-ba43-dac502259ad0.png

这里展示的单位是TCP MSS.[5]即实际大小是 1460bytes * 10.

Wireshark 分析

Wireshark 提供了非常使用的统计功能,可以让你一眼就能看出当前的瓶颈是发生在了哪里。但是第一次打开这个图我不会看,一脸懵逼,也没查到资料要怎么看。好在我同事[6]会,他把我教会了,我在这里记录一下,把你也教会。

首先,打开的方式如下:

fd1ef158-2a4e-11ed-ba43-dac502259ad0.png

然后你会看到如下的图。

fd3ab708-2a4e-11ed-ba43-dac502259ad0.png

首先需要明确,tcptrace 的图表示的是单方向的数据发送,因为 tcp 是双工协议,两边都能发送数据。其中最上面写了你当前在看的图数据是从 10.0.0.1 发送到 192.168.0.1 的,然后按右下角的按钮可以切换看的方向。

X 轴表示的是时间,很好理解。

然后理解一下 Y 轴表示的 Sequence Number, 就是 TCP 包中的 Sequence Number,这个很关键。图中所有的数据,都是以 Sequence Number 为准的。

所以,你如果看到如上图所示,那么说明你看反了,因为数据的 Sequence Number 并没有增加过,说明几乎没有发送过数据,需要点击 Switch Direction。

fd5cec38-2a4e-11ed-ba43-dac502259ad0.png

这就对了,可以看到我们传输的 Sequence Number 在随着时间增加而增加。

这里面有 3 条线,含义如下:

fd72b4fa-2a4e-11ed-ba43-dac502259ad0.png

除此之外,另外还有两种线:

fd911242-2a4e-11ed-ba43-dac502259ad0.png

需要始终记住的是 Y 轴是 Sequence Number,红色的线表示 SACK 的线表示这一段 Sequence Number 我已经收到了,然后配合黄色线表示 ACK 过的 Sequence Number,那么发送端就会知道,在中间这段空挡,包丢了,红色线和黄色线纵向的空白,是没有被 ACK 的包。所以,需要重新传输。而蓝色的线就是表示又重新传输了一遍。

学会了看这些图,我们可以认识几种常见的 pattern:

丢包

fda60e7c-2a4e-11ed-ba43-dac502259ad0.png

很多红色 SACK,说明接收端那边重复在说:中间有一个包我没有收到,中间有一个包我没有收到。

吞吐受到接收 window size 限制

fdc81dbe-2a4e-11ed-ba43-dac502259ad0.png

从这个图可以看出,黄色的线(接收端一 ACK)一上升,蓝色就跟着上升(发送端就开始发),直到填满绿色的线(window size)。说明网络并不是瓶颈,可以调大接收端的 buffer size.

吞吐受到网络质量限制

fdd7c354-2a4e-11ed-ba43-dac502259ad0.png

从这张图中可以看出,接收端的 window size 远远不是瓶颈,还有很多空闲。

fdf4cfc6-2a4e-11ed-ba43-dac502259ad0.png

放大可以看出,中间有很多丢包和重传,并且每次只发送一点点数据,这说明很有可能是 cwnd 太小了,受到了拥塞控制算法的限制。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6859

    浏览量

    88778
  • 带宽
    +关注

    关注

    3

    文章

    905

    浏览量

    40825
  • 吞吐量
    +关注

    关注

    0

    文章

    47

    浏览量

    12320
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1348

    浏览量

    78973

原文标题:如何使用 Wireshark 分析 TCP 吞吐瓶颈

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何提高CYBT-243053-02吞吐量

    你好我们一直在使用“EZ-Serial Firmware: v1.4.13.13 Sep 22 2023 10:24:41”测试“CYBT-243053-02”,我们得到的吞吐量比 PUART 高
    发表于 02-27 06:56

    求助,关于使用iperf测量mesh节点吞吐量问题求解

    我把esp-mesh-lite的no-route例程和iperf例程合在一起,想测试两个mesh节点间tcp通信的吞吐量,实际过程中一开始流量正常,数秒后客户端发数据这边monitor卡死没有任何
    发表于 07-23 06:59

    网卡吞吐量测试解决方案

    随着互联网的迅速发展,计算机日益成为人们生活中不可或缺的部分。伴随着网络业务的丰富,用户对计算机网卡的要求也越来也高。如何对计算机网卡吞吐量进行合理的测试,已越来越成为众多计算机网卡生产厂家日益关注
    发表于 12-23 11:07

    无线测试之吞吐量测试

    无线网络测试之无线吞吐量测试方法、步骤
    发表于 06-25 08:40

    iperf固定吞吐量测试如何设置

    我有两个CYW43907演示,并下载控制台项目。我想使用IpFF命令来测试固定的UDP吞吐量。示例:IPEF-C 192.1680.1-P 5001 -I 2 -T 30 -U-B 60M,但客户端
    发表于 11-06 14:09

    如何计算延迟和吞吐量

    如何计算延迟和吞吐量?在ISE时序报告中,我们发现一个名为“最大组合路径延迟”的参数是否与最大时钟频率有关?
    发表于 03-19 08:55

    提高BLE吞吐量的可行办法

    提高BLE吞吐量的可行办法如何实现更快的BLE吞吐量
    发表于 01-18 06:26

    如何通过触发模型提高吞吐量

    如何通过触发模型提高吞吐量
    发表于 05-11 07:00

    防火墙术语-吞吐量

    防火墙术语-吞吐量  术语名称:吞吐量 术语解释:网络中的数据是由一个个数据包组成,防火
    发表于 02-24 11:06 1530次阅读

    MIMO天线增益不同引起的吞吐量波动

    近期在对一款2×2 MIMO无线产品的测试中,发现了一件有意思的事情,当两只天线的增益不一致时,会导致吞吐量波动
    发表于 06-16 09:22 2858次阅读
    MIMO天线增益不同引起的<b class='flag-5'>吞吐量</b>波动

    debug 吞吐量办法

    Debug 网络质量的时候,我们一般会关注两个因素:延迟和吞吐量(带宽)。延迟比较好验证,Ping 一下或者 mtr[1] 一下就能看出来。这篇文章分享一个 debug 吞吐量
    的头像 发表于 08-23 09:17 929次阅读

    iperf吞吐量的测试流程

    iperf吞吐量测试指南
    发表于 04-03 15:40 2次下载

    如何显著提高ATE电源吞吐量

    作为一名测试工程师,你的工作并不容易。降低成本和提高系统吞吐量的压力一直存在。本文中,我们将讨论影响系统吞吐量的关键因素以及如何降低ATE测试成本。
    的头像 发表于 11-08 14:59 665次阅读
    如何显著提高ATE电源<b class='flag-5'>吞吐量</b>?

    影响ATE电源系统吞吐量的关键因素

    从串行设备测试改变为并行设备测试可以显著地增加测试系统吞吐量。测试执行活动的大部分可能涉及使用DC电源设置条件和进行测量。配置测试系统,使其能够使用多个直流电源同时对多个设备执行测试,是显著提高测试吞吐量的一种经济有效的方法。
    发表于 11-29 12:36 361次阅读
    影响ATE电源系统<b class='flag-5'>吞吐量</b>的关键因素

    TMS320VC5510 HPI吞吐量和优化

    电子发烧友网站提供《TMS320VC5510 HPI吞吐量和优化.pdf》资料免费下载
    发表于 10-16 09:35 0次下载
    TMS320VC5510 HPI<b class='flag-5'>吞吐量</b>和优化