电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Iperf 源代码解析

36页
  • 卖家[上传人]:jiups****uk12
  • 文档编号:88918469
  • 上传时间:2019-05-13
  • 文档格式:DOC
  • 文档大小:70.15KB
  • / 36 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Iperf 源代码分析(一) 概述前段时间学习Linux网络编程的有关知识,希望看一看这些网络编程的技术在实际的代码中是如何运用的。正巧实验室的项目中使用了开源网络性能测试软件Iperf,于是便初步分析了Iperf的源代码。现将分析代码的点滴收获写在我的Blog上,希望各位高人多多指教。Iperf 是美国伊利诺斯大学(University of Illinois)开发的一种网络性能测试工具。可以用来测试网络节点间TCP或UDP连接的性能,包括带宽、延时抖动(jitter,适用于UDP)以 及误码率(适用于UDP)等。关于Iperf的下载、安装以及详细的使用方法,可以参照:http:/ -s在连接的另一端启动Client:iperf -c 1.1.1.1此 处假设Server端的IP地址为1.1.1.1。经过一段测试时间(默认为10秒),在Server端和Client端就会打印出网络连接的各种性能参 数。Iperf作为一种功能完备的测试工具,还提供了各种选项,例如是建立TCP连接还是UDP连接、测试时间、测试应传输的字节总数、测试模式等。而测 试模式又分为单项测试(Normal Test

      2、)、同时双向测试(Dual Test)和交替双向测试(Tradeoff Test)。此外,用户可以指定测试的线程数。这些线程各自独立的完成测试,并可报告各自的以及汇总的统计数据。对于Iperf的详细使用方法以及命令行 参数的意义,请参照上面的网页。Iperf是用C+语言实现的,对设计中的各种结构和功能单元都按照面向对象的思想进行建模。它主要用到了 Unix系统编程中两个主要的部分:Socket网络编程和多线程编程。因此,通过分析Iperf的源代码,我们就可以在实际的例子中学习面向对象编 程,Socket网络编程以及多线程编程的技术。同时,Iperf实现的功能比较简单,代码并不复杂,而且功能比较单一。因此,Iperf是我们研究 Unix系统编程技术的一个很好的学习对象。我所分析的是Iperf 1.7.0版的源代码。需要说明的是,Iperf的源代码中既包含了对应于Unix的部分,也包含了对应于Windows的部分。这两部分是通过条件编译的预处理语句分别编译的。我仅对Unix部分的代码进行分析。Iperf提供的库在开发Iperf的过程中,开发者把 Socket编程和多线程编程中经常用到的一些

      3、系统调用封装成对象,屏蔽了底层函数的复杂接口,提供了模块化和面向对象的机制,也为我们提供了一些非常实 用的编程工具,我们可以在实现自己的程序时复用这些类。由于这些类实现的源代码都比较简单,也为我们修改前人的代码实现自己的功能提供了方便。这些类的定义与实现都在源代码文件夹的lib子文件夹下。主要包括以下一些对象:SocketAddr类:封装了Socket接口中的网络地址结构(sockaddr_in等)以及各种地址转换的系统调用(gethostbyname、gethostbyaddr、inet_ntop等);Socket类:封装了socket文件描述符,以及socket、listen、connect等系统调用;Mutex类以及Condition类:封装了POSIX标准中的mutex和condition(条件变量)线程同步机制;Thread类:封装了POSIX标准中的多线程机制,提供了一种简单易用的线程模型;Timestamp类:通过Unix系统调用gettimeofday实现了一个时间戳对象,提供了获得当前时间戳,计算两个时间戳之间的先后关系等方法。此外,在lib文件夹中还包括一些Iper

      4、f的实现提供的实用工具函数,包括endian.c文件中的字节序转 换函数、gnu_getopt文件中的命令行参数处理函数、snprintf文件中的字符串格式化函数、signal.c文件中的与信号处理有关的函数、 string.c文件中的字符处理函数、tcp_window_size.c文件中的TCP窗口大小处理函数等。接下来对lib文件夹中的一些比较重要的类和函数进行说明。Iperf 源代码分析(二) Thread类Thread类封装了POSIX标准中的多线程机制,提供了一种简单易用的线程模型。Thread类是Iperf的实现中比较重要的类,使Iperf实现多线程并行操作的核心。Thread类的定义在文件lib/Thread.hpp中,其实现位于lib/Thread.cpp中。/* - */class Thread public: Thread( void ); virtual Thread(); / start or stop a thread executing void Start( void ); void Stop( void ); / run is the main loop

      5、 for this thread / usually this is called by Start(), but may be called / directly for single-threaded applications. virtual void Run( void ) = 0; / wait for this or all threads to complete void Join( void ); static void Joinall( void ); void DeleteSelfAfterRun( void ) mDeleteSelf = true; / set a thread to be daemon, so joinall wont wait on it void SetDaemon( void ); / returns the number of user (i.e. not daemon) threads static int NumUserThreads( void ) return sNum; static nthread_t GetID( void

      6、 ); static bool EqualID( nthread_t inLeft, nthread_t inRight ); static nthread_t ZeroID( void );protected: nthread_t mTID; bool mDeleteSelf; / count of threads; used in joinall static int sNum; static Condition sNum_cond;private: / low level function which calls Run() for the object / this must be static in order to work with pthread_create static void* Run_Wrapper( void* paramPtr ); / end class Thread数据成员说明:mTID纪录本线程的线程ID;mDeleteSelf通过方法DeleteSelfAfterRun设置,用来说明是否在线程结束后释放属于该现程的变量;sNum是一个静态变量,即为

      7、所有的Thread实例所共有的。该变量纪录所生成的线程的总数。Thread对象的Joinall方法通过该变量判断所有的Thread实例是否执行结束;sNum_cond是用来同步对sNum的操作的条件变量,也是一个静态变量。主要函数成员说明:Start方法:/* -* Start the objects thread execution. Increments thread* count, spawns new thread, and stores thread ID.* - */void Thread:Start( void ) if ( EqualID( mTID, ZeroID() ) ) / increment thread count sNum_cond.Lock(); sNum+; sNum_cond.Unlock(); Thread* ptr = this; / pthreads - spawn new thread int err = pthread_create( &mTID, NULL, Run_Wrapper, ptr ); FAIL( err != 0, pthr

      8、ead_create ); / end Start首 先通过Num+纪录一个新的线程的产生,之后通过pthread_create系统调用产生一个新的线程。新线程执行Run_Wrapper函数,以至 向该Thread实例的ptr指针作为参数。原线程在判断pthread_create是否成功后退出Start函数。Stop方法:/* -* Stop the thread immediately. Decrements thread count and* resets the thread ID.* - */void Thread:Stop( void ) if ( ! EqualID( mTID, ZeroID() ) ) / decrement thread count sNum_cond.Lock(); sNum-; sNum_cond.Signal(); sNum_cond.Unlock(); nthread_t oldTID = mTID; mTID = ZeroID(); / exit thread / use exit() if called from within this thread / use cancel() if called from a different

      《Iperf 源代码解析》由会员jiups****uk12分享,可在线阅读,更多相关《Iperf 源代码解析》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.