Iperf 源代码分析(五)

Iperf的工作机制

Iperf是基于Server-Client模式实现的。在测量网络参数时,Iperf区分听者和说者两种角色。说者向听着发送一定量的数据,由听 者统计并记录带宽、时延抖动等参数。说者的数据全部发送完成后,听者通过向说者回送一个数据包,将测量数据告知说者。这样,在听者和说者两边都可以显示记 录的数据。如果网络过于拥塞或误码率较高,当听者回送的数据包无法被说者收到时,说者就无法显示完整的测量数据,而只能报告本地记录的部分网络参数,发送 的数据量、发送时间、发送带宽等,像延时抖动等参数在说者一侧则无法获得。

Iperf提供了三种测量模式:normal, tradeoff, dualtest。对于每一种模式,用户都可以通过 -P 选项指定同时测量的并行线程数。以下的讨论假设用户设定的并行线程数为P个。

在normal模式下,Client生成P个说者线程,并行向Server发送数据。Server每接收到一个说者的数据,就生成一个听者线程,负 责与该说者间的通信。Client有P个并行的说者线程,而Server端有P个并行的听者线程(针对这一Client),两者之间共有P个连接同时收发 数据。测量结束后,Server端的每个听者向自己对应的说者回送测得的网络参数。

在tradeoff模式下,首先进行normal模式下的测量过程。然后Server和Client互换角色。Server生成P个说者,同时向 Client发送数据。Client对应每个说者生成一个听者接收数据并测量参数。最后有Client端的听者向Server端的说者回馈测量结果。这样 就可以测量两个方向上的网络参数了。

dualtest模式同样可以测量两个方向上的网络参数,与tradeoff模式的不同在于,在dualtest模式下,由Server到 Client方向上的测量与由Client到Server方向上的测量是同时进行的。Client生成P个说者和P个听者,说者向Server端发送数 据,听者等待接收Server端的说者发来的数据。Server端也进行相同的操作。在Server端和Client端之间同时存在2P个网络连接,其中 有P个连接的数据由Client流向Server,另外P个连接的数据由Server流向Client。因此,dualtest模式需要的测量时间是 tradeoff模式的一半。

在三种模式下,除了P个听者或说者进程,在Server和Client两侧均存在一个监控线程(monitor thread)。监控线程的作用包括:
 生成说者或听者线程;
 同步所有说者或听者的动作(开始发送、结束发送等);
 计算并报告说有说者或听者的累计测量数据。
在监控线程的控制下,所有P个线程间就可以实现同步和信息共享。说者线程或听者线程向一个公共的数据区写入测量数据(此数据区位于实现监控线程的对象中),由监控线程读取并处理。通过互斥锁(mutex)实现对该数据区的同步访问。

Server可以同时接收来自不同Client的连接,这些连接是通过Client的IP地址标识的。Server将所有Client的连 接信息组织成一个单向链表,每个Client对应链表中的一项,该项包含该Client的地址结构(sockaddr)以及实现与该Client对应的监 控线程的对象(我们称它为监控对象),所有与此Client相关的听者对象和说者对象都是由该监控线程生成的。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值