iperf工具源码下载、编译、编译报错解决、以及测试网络带宽

news2024/10/5 22:21:17

1、iperf源码下载

(1)源码下载地址:https://iperf.fr/iperf-download.php;
(2)有的版本源码下载下来并不能直接编译成功,可能会报缺少头文件或者编译选项的错误,要么去解决这些错误,要么换个版本再试一下;
(3)在我的环境中,2.0.9版本的iperf是可以直接编译成功的,下面的讲解都是基于2.0.9版本;
(4)如果只是用iperf的基本功能,比如测网络带宽,没必要下载最新版本的iperf,最好是和你的交叉编译工具链时间上相近的;

2、iperf编译

//配置iperf源码,指定交叉编译工具链,静态链接成可执行程序
./configure --host=arm-himix200v002-linux CXXFLAGS=-static
make

(1)iperf源码中,刚解压开时是没有Makefile的,需要先运行顶层目录的configure配置文件,根据配置生成Makefile;
(2)在运行configure文件时,通过–host指定交叉编译工具链,CXXFLAGS指定是静态链接还是动态链接,如果还需要配置其他的去查看configure源码;
(3)在顶层生成Makefile文件后,使用make命令编译,在./src目录下会生成iperf可执行程序;

3、iperf工具测试网络带宽

3.1、测试网络带宽的基本原理

(1)iperf工具采用的客户端/服务器模式,统计客户端和服务器之间传递数据的多少和耗时,计算出网络带宽;
(2)在A设备上运行iperf指定为服务器模式;在B设备上运行iperf工具指定为客户端模式,然后客户端去连接服务器端,iperf就可统计出网络代码;

3.2、测试网络带宽的命令

//A设备:-s表示服务器端;
iperf -s

//B设备:
//-c --表示客户端,
//192.168.0.11 --是服务器端的ip
//-t 100 --测试100秒
//-i 5 --每5秒打印一下测试结果
//-P 20  创建20个线程去测试网络带宽
iperf -c 192.168.0.11 -t 100 -i 5

(1)首先确认A和B设备之间网络能ping通;
(2)A设备:运行服务器端;
(3)B设备:运行客户端;

3.3、实测效果

~ # iperf -c 192.168.0.11 -t 100 -i 5
------------------------------------------------------------
Client connecting to 192.168.0.11, TCP port 5001
TCP window size: 43.8 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.22 port 40052 connected with 192.168.0.11 port 5001
[  3] 35.0-40.0 sec  56.0 MBytes  94.0 Mbits/sec
[  3] 40.0-45.0 sec  56.2 MBytes  94.4 Mbits/sec
[  3] 45.0-50.0 sec  55.9 MBytes  93.7 Mbits/sec
[  3] 50.0-55.0 sec  56.2 MBytes  94.4 Mbits/sec
[  3] 55.0-60.0 sec  55.9 MBytes  93.7 Mbits/sec
[  3] 60.0-65.0 sec  56.2 MBytes  94.4 Mbits/sec
[  3] 65.0-70.0 sec  56.2 MBytes  94.4 Mbits/sec
[  3] 70.0-75.0 sec  56.0 MBytes  94.0 Mbits/sec
[  3] 75.0-80.0 sec  56.1 MBytes  94.2 Mbits/sec
[  3] 80.0-85.0 sec  56.0 MBytes  94.0 Mbits/sec
[  3] 85.0-90.0 sec  56.2 MBytes  94.4 Mbits/sec
[  3] 90.0-95.0 sec  55.9 MBytes  93.7 Mbits/sec
[  3] 95.0-100.0 sec  56.2 MBytes  94.4 Mbits/sec
[  3]  0.0-100.0 sec  1.10 GBytes  94.1 Mbits/sec

上面是100M网口的测试结果,平均94Mb/s左右,也就是11.75MB/s,比100M网口的理论值12.5MB/s稍低一点,但也在正常范围内。

3.4、测试需要注意的点

3.4.1、网络自协商

(1)在测试带宽时,需要注意内核识别到当前网口时千兆还是百兆;比如当前你要测试的网口本身物理硬件上是千兆的,当你插上网线后,内核会有网口上线的打印,100Mbit/s表示是百兆网口,1Gbit/s表示是千兆网口;
(2)千兆网口插上网线后不一定就是千兆。网卡有自协商机制,如果你使用的网线是百兆网线,或者对端是百兆的交换机、百兆的网口,经过自协商机制,千兆的网口会想百兆网口对齐,导致千兆网口只有百兆的网速;
总结:确保千兆网口的配套环境支持千兆的网速;

3.4.2、线程数限制了打流的上限

(1)iperf软件测试网络带宽的基本原理是在两个网口间收发数据,以及来统计网络带宽,收发的过程是线程来控制的;
(2)比如测试千兆网口,当不指定测试线程数时默认是使用单个线程来测试带宽,可能测试到只有400Mbit/s,远小于正常的千兆网口的网速;但实际网速可能是千兆,iperf软件测出来只有400Mbit/s只是因为单个线程的收发能力只能到400Mbit/s,而不是带宽只有400Mbit/s;
总结:当测试出来的带宽小于正常带宽时,尝试通过"-P"选项增加测试的线程数,如果增加测试线程得到的带宽在增加,说明是测试线程数限制了测试带宽,继续尝试增加测试线程数,知道测试出来的带宽不再随着测试线程的增加而增加;

4、编译报错:checking host system type… Invalid configuration `arm-none-linux-guneabi

4.1、配置文件出错

wget -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
wget -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'

(1)首先考虑拷贝当前编译服务器的配置文件去替换源码中的配置文件:
cp /usr/share/libtool/config/config.sub ./config.sub
cp /usr/share/libtool/config/config.guess ./config.guess
(2)第一步不能解决,则更新libtool工具,再拷贝配置文件;
(3)第二步也不能解决,则执行上面的命令去下载配置文件,再拷贝配置文件;​

4.2、编译链名字

4.2.1、出错的原因

(1)替换配置文件都不能解决问题后,可能是编译链的名字导致;
(2)导致出错有两种可能,一是编译链的名字过长,而是编译链的开头需要是芯片的架构;

4.2.2、解决办法:

(1)重新建立链接去指向真正的编译链,比如arm64位的芯片,链接名字取名为:aarch64-linux-xx;不用为每个编译链都重命令,只需要gcc、g++、ar、ld这些基础的编译工具;
(2)将编译链的目录导出到环境变量,在配置configure时,只需要指定–host=aarch64-linux;

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Linux学习【教程+实操】【超基础】

链接:资料提取码:6klp 今日内容Linux简介Linux安装网卡设置安装SSH连接工具Linux和Windows目录结构对比Linux常用命令Linux命令初体验文件目录操作命令拷贝移动命令打包压缩命令文本编辑命令查找命令Linux软件安装软件安装方式安装jdk(采用二进制发布包…

mysql索引字段设计

表字段数量与row大小限制可以参考官方文档 https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html#column-count-limits 复合索引 参考:https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html 数量限制 一个复合索引最多可以包含16个列&…

微信小程序--自定义组件

组件的创建与引用 1.创建组件 在项目的根目录中,鼠标右键,创建 components -> test 文件夹 在新建的components -> test文件夹上,鼠标右键,点击“新建Component" 键入组件的名称之后回车,会自动生成组件对…

C语言进阶(9)——C语言文件操作

本章重点 为什么使用文件什么是文件文件的打开和关闭文件的顺序读写文件的随机读写文本文件和二进制文件文件读取结束的判定文件缓冲区 文章目录本章重点1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件打开和关闭3.1 文件指针3.2文件的打开和关闭4. 文件…

【蓝桥杯嵌入式】第十一届蓝桥杯嵌入式省赛(第二场)程序设计试题及其题解

题目再现 题目分析 通过阅读本届试题可知,其功能比较单一,除了试题中常客——LED、LCD、按键三巨头外,还包含了定时器的PWM以及ADC读取这两个部分,考察的重点在于对定时器产生PWM的应用以及如何修改PWM的占空比,完全消…

MPU-6000(6050)介绍

MPU-6000(6050)简介MPU-60X0是全球首例9 轴运动处理传感器。它集成了3 轴MEMS陀螺仪,3 轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(DigitalMotion Processor),可用I2C接口连接一个数字传…

react PureComponent

这个 其实和我之前写的文章react组件优化,当父组件数据变化与子组件无关时,控制子组件不重新渲染实现的东西是一样的 只是用了一种更简洁的方式 我们还是重新来一次 创建一个react项目 然后 创建一个子组件 我这里就直接叫 subset.jsx 参考代码如下 i…

ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

核心 Adam: 一种基低阶矩的自适应估计的随机目标函数的一阶梯度优化算法,该方法实现简单**,计算效率高,内存需求很少**,对梯度的对角线重新缩放不变,并且非常适合于在数据或参数方面较大问题,该方法也适用…

ADI demo PS工程的编译-以adrv9371x_zc706为例子

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ADI demo PS工程的编译-以adrv9371x_zc706为例子前言VITIS建工程总结前言 接《ADI demo PL工程的编译-以adrv9371x_zc706为例子之使用Cygwin》这篇。导出XSA文件&#xff0c…

VMware虚拟机搭建安装MacOS13及开发环境搭建

文章目录前言准备工作:安装虚拟机及MacOS系统1.安装VMware 虚拟机2. 运行解锁工具3. 安装macOS 134. 配置网络5. 安装VMware tools开发环境1. 安装xcode2. 安装HbuilderX前言 终于把macOS13虚拟机安装好了,比起上次安装macOS10,这次走了很多弯路。 先说…

108. 将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树 难度简单1214 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1&…

春节期间商城如何做好运营

有经验的商家都知道,春节对于店铺来说,这是一个全新的起点,所以商家们一定要抓住新年这个过渡期的时机。那么在春节期间的运营该如何做呢? 首先看看春节期间会有的几个问题: 推广竞争会比较小,在这个时间…

git使用日常问题记录【按日期频繁记录,欢迎收藏】

git系列文章 文章目录2023.1.14 将gitee仓库转移到github遇到的问题1-1 add到暂存区,commit到仓库之后,不想push了???1-2 git push大文件失败解决1-3 上传多余文件,如何从远端仓库中删除2023.1.151-1 githu…

销售管理系统 | 数据库课设

文章目录前言项目介绍E-R图表结构系统总体框架搭建项目环境介绍创建网站主页连接数据库注册功能登录功能管理员登录功能注销登录功能个人信息后台管理查看供应商名单删除功能修改功能登记货物信息功能购买商品功能总源码教训总结前言 为了期末的数据库课设,这是最初…

【C++】STL - Stack - Queue - PriorityQueue使用和模拟实现

🐱作者:傻响 🐱专栏:《数据结构_STL》 🔥格言:你只管努力,剩下的交给时间! 目录 栈 Stack介绍 模拟实现 队列 Queue介绍 常用的函数接口介绍 模拟实现 优先级队列 Priority…

【docker18】docker容器之CAdvisor+InfluxDB+Granfana

1.原生命令 1.1操作 命令: docke stats 1.2问题 通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量控制等数据,一般的小公司够用了。 但是,docker stats统计结果只能是当前宿主机的全部容器&am…

669. 修剪二叉搜索树

669. 修剪二叉搜索树 难度中等 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除&#xff0c…

SourceTree使用方法总结

SourceTree使用方法总结 SourceTree使用总结 添加仓库 mac下从url克隆: windows下从url克隆: 抓取、获取分支信息 抓取(mac下的名字)获取(Windows下的名字)指获取服务端git库的变更信息,比如…

基于FPGA的UDP 通信(五)

引言 前文链接: 基于FPGA的UDP 通信(一) 基于FPGA的UDP 通信(二) 基于FPGA的UDP 通信(三) 基于FPGA的UDP 通信(四) 本文基于FPGA设计千兆以太网通信模块UDP数据发…

12.I/O复用

I/O复用 多进程方式跳过 基于I/O复用的服务器端 接下来讨论并发服务器实现方法的延伸。如果有读者已经跳过第10章和第11章,那就只需把本章内容当做并发服务器实现的第一种方法即可。将要讨论的内容中包含一部分与多进程服务器端的比较,跳过第10章和第…