iPerf3 -M参数详解,场景分析
本文目录
- iPerf3 -M参数说明
- 几个典型测试场景中应该如何设定合适的-M参数值
- 理想局域网模型(无丢包,无抖动)
- 高丢包,无抖动模型
- 高丢包,高抖动模型(网络质量比较差,IP转发路径变化频繁)
- 总结
从文章iperf参数(iperf3命令)详解中我们已经知道-M是用于设置TCP的MSS最大分片长度。本文假设读者应该已经理解什么是IP分片,为什么会产生IP分片,为什么要避免IP分片以及如何避免IP分片IP分片和TCP分段解析–之IP分片。那么设置适当的-M参数,有助于我们在使用iperf测试过程中得到最好的吞吐量测试结果,如果-M设置不当,就有可能引发IP分片,从而进一步引发大量重传,导致拥塞而导致吞吐量测试结果不理想。
iPerf3 -M参数说明
对-M参数的原始解释为:Attempt to set the TCP maximum segment size (MSS). The MSS is usually the MTU - 40 bytes for the TCP/IP header. For ethernet, the MSS is 1460 bytes (1500 byte MTU)。我们从参数解释中可以得知,如果设置了-M参数,那么iPerf3会尝试去设置TCP的MSS最大分片长度。MSS通常是MTU减去40字节的TCP/IP首部。对以达网来说MSS是1460(MTU是1500字节)。
通过IP分片和TCP分段解析–之IP分片这篇文章,我们已经知道了,IP分片产生的原因,了解IP分片带来的坏处,以及该如何设置合适的MSS来避免IP分片。
那么我们,只要根据测试链路中的路径MTP(PMTU),通过-M,让MSS<=PMTU-40,那么在整个网络中就不会发生分片,从而避免了IP分片给给测试结果带来的坏影响。
几个典型测试场景中应该如何设定合适的-M参数值
我们先来理解一下,通常我们用以下四个指标去衡量一个网络的质量(假设网络的转发路径是固定不变的):
- 带宽
- 延时
- 丢包率
- 抖动
这四个指标中,带宽和延时与IP分片,TCP分段没有什么相关性,所以与-M参数的选择无关。我们只需要从丢包率与抖动二个指标去考虑-M参数应该如何设置就可以了。
理想局域网模型(无丢包,无抖动)
-M参数修改的是在无丢包,无抖动的理想模型中,IP报文是不会丢失的,IP分片不会带来网络传输效率的降低,那么是不需要设置-M参数的。
高丢包,无抖动模型
这种网络模型或者说高丢包,低抖动的网络在现实网络中是很罕见的,但可以在测试环境中我们有时会构建这样的测试模型(比如5G基站的空口丢包测试场景)。在这样的模型中,意味着IP报文会丢失,但IP报文会按发送顺序到达接收端,不会或者极少产生乱序。在这种模型中,IP某个分片的丢失,会引发属于同一个TCP报文的多个IP分片全部需要重传。我们假设TCP每次发送的报文的大小都是一样大的,每次都会在IP层刚好被分成n个IP分片。如果我们用-M把要发送的报文大小限制成<=原来的1/n,那么就可以完全避免IP分片的产生。
- 在要发送的TCP报文的长度大于MTU的情况下
考虑以下二个情况
在分片的场景下:
需要重传n个IP分片。
在不分片的场景下:
需要重传1个IP分片
这里重传所占用的网络带宽减少到原来的1/n,那么网络利用率就得到的有效的提升。此时我们需要设置-M参数,并使得MSS<=PMTU-40,来避免分片的发生。
- 在要发送的TCP报文的长度小于等于MTU的情况下
本来就不会发生分片,那么不需要设置-M参数。
高丢包,高抖动模型(网络质量比较差,IP转发路径变化频繁)
这种网络模型是比较常见的,比较烂的经过多个路由路的广域网就属于这种网络。高丢包率如何影响-M的设置,我们已经在上一章中介绍了,这里主要考虑高抖动,意味着先发的IP报文可能会后到达接收端,在这种情况下其实也分二个情况:
第一个是抖动没有那么厉害,属于同一个TCP的后发的IP分片先到达,等待时间(接收方要等待属于同一个TCP的所有IP分片到达后才能完成TCP报文的重组)还没有超出TCP的超时重发定时器,没有引发TCP层重传时,延时到达的IP分片不产生坏的影响,那么不需要设置-M参数。
另外一个是抖动很厉害,属于同一个TCP的后发的IP分片先到达,等待时间(接收方要等待属于同一个TCP的所有IP分片到达后才能完成TCP报文的重组)已经超出TCP的超时重发定时器,引发TCP层重传时,那么这个情况就等同于引发了所有IP分片的重传,我们需要设置-M参数,并使得MSS<=PMTU-40,来避免分片的发生。
总结
网络抖动比较严重,或者丢包会导致TCP重传发生的网络条件下,且发送的TCP测试报文长度大于MTU时,需要通过设置-M参数来避免IP分片发生。
相关文章:
iPerf3 -M参数详解,场景分析
本文目录iPerf3 -M参数说明几个典型测试场景中应该如何设定合适的-M参数值理想局域网模型(无丢包,无抖动)高丢包,无抖动模型高丢包,高抖动模型(网络质量比较差,IP转发路径变化频繁)总…...
java的基本语法以及注意事项
Java 基础语法一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它…...
matlab搭建IAE,ISE,ITAE性能指标
目录前言准备IAEISEITAE前言 最近在使用matlab搭建控制系统性能评价指标模型,记录一下 准备 MATLAB R2020 IAE IAE函数表达式如下所示: IAE函数模型如下所示: ISE ISE函数表达式如下所示: ISE函数模型如下所示ÿ…...
docker安装mysql
在安装Mysql之前,我们可以先查看一下我们的镜像,输入命令: docker images 能发现,镜像里面只有一个Nginx,并没有Mysql 然后我们可以像上一篇安装Nginx一样,安装Mysql镜像。 输入以下命令,安装…...
Leetcode 回溯详解
回溯法 回溯法有“通用解题法”之称,用它可以系统地搜索问题的所有解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。 在包含问题的所有解的解空间树中,按照深度优先搜索(DFS))的策略,从根结点出发深度探索解空间树。当探索…...
AI_Papers:第一期
2023.02.06—2023.02.12 文摘词云 Top Papers Subjects: cs.CL 1.Multimodal Chain-of-Thought Reasoning in Language Models 标题:语言模型中的多模式思维链推理 作者:Zhuosheng Zhang, Aston Zhang, Mu Li, Hai Zhao, George Karypis, Alex Sm…...
C/C++内存管理
C/C内存管理C/C内存分布C语言中内存管理的方式:malloc/calloc/realloc/freeC内存管理方式内置类型自定义类型operator new 与operator deletenew和delete的实现原理内置类型自定义类型定位new表达式(placement-new)new/delete与malloc/free的区别C/C内存分布 我们先…...
【大数据hive】hive 函数使用详解
一、前言 在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分析软件,随着版本的不断更新迭代,…...
彻底搞懂分布式系统服务注册与发现原理
目录 引入服务注册与发现组件的原因 单体架构 应用与数据分离...
安卓Camera2用ImageReader获取NV21源码分析
以前如何得到Camera预览流回调 可以通过如下方法,得到一路预览回调流 Camera#setPreviewCallbackWithBuffer(Camera.PreviewCallback),可以通过如下方法,设置回调数据的格式,比如 ImageFormat.NV21 Camera.Parameters#setPreview…...
24. 两两交换链表中的节点
文章目录题目描述迭代法递归法参考文献题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入&a…...
linux006之帮助命令
linux帮助命令简介: linux的命令是非常多的,光靠人是记不住的,在工作中一般都会去网上查,这是有外网的情况下,如果项目中不允许访问外网,那么linux的帮助命令就可以派上用场了, linux帮助命令是…...
【C++初阶】十三、模板进阶(总)|非类型模板参数|模板的特化|模板分离编译|模板总结(优缺点)
目录 一、非类型模板参数 二、模板的特化 2.1 模板特化概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 三、模板分离编译 四、模板总结(优缺点) 前言:之前模板初阶并没有把 C模板讲完,因为当时没有接触…...
Linux之文本搜索命令
文本搜索命令学习目标能够知道文本搜索使用的命令1. grep命令的使用命令说明grep文本搜索grep命令效果图:2. grep命令选项的使用命令选项说明-i忽略大小写-n显示匹配行号-v显示不包含匹配文本的所有行-i命令选项效果图:-n命令选项效果图:-v命令选项效果图:3. grep命令结合正则表…...
微信小程序Springboot 校园拼车自助服务系统java
系统管理员: 管理员账户管理:在线对管理员的账户信息进行管理,包括对管理员信息的增加修改以及密码的修改等。 站内新闻管理:在后台对站内新闻信息进行发布,并能够对站内新闻信息进行删除修改等。 论坛版块管理&#x…...
【Unity3D 常用插件】Haste插件
一,Haste介绍 Haste插件是一款针对 Unity 3D 的 Everthing软件,可以实现基于名称快速定位对象的功能。Unity 3D 编辑器也自带了搜索功能,但是在 project视图 和 Hierarchy视图 中的对象需要分别查找,不支持模糊匹配。Haste插件就…...
【c++面试问答】全局变量和局部变量的区别
问题 C中的全局变量和局部变量有什么区别? 注:内容全部参考自文末的参考资料 全局变量和局部变量的区别 可以从以下4个角度来区分: 区别全局变量局部变量作用域全局作用域局部作用域内存分配全局变量在静态数据区静态局部变量在静态数据区…...
Java List集合
6 List集合 List系列集合:添加的元素是有序,可重复,有索引 ArrayList: 添加的元素是有序,可重复,有索引LinkedList: 添加的元素是有序,可重复,有索引Vector :是线程安全的ÿ…...
linux服务器挂载硬盘/磁盘
1. 查看机器所挂硬盘个数及分区情况:fdisk -l可以看出来目前/dev/vda 目前有300G可用.内部有两个分区(/dev/vda1,/dev/vda2)。2. 格式化磁盘格式化磁盘命令为【mkfs.磁盘类型格式 目录路径组成】查看磁盘文件格式:df -T格式化磁盘…...
Java 抽象类
文章目录1、抽象方法和抽象类2、抽象类的作用当编写一个类时,常常会为该类定义一些方法,用于描述该类的行为方式,这些方法都有具体的方法体。但在某些情况下,某个基类只是知道其子类应该包含那些方法,但不知道子类是如…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
