一、 实验目的
1、学会硬件实现网络硬件设备的带宽统计功能;
2、了解网络设备硬件内部的定时机制;
3、掌握基于时钟频率和计数器的定时器实现机制;
4、掌握基于定时器和计数器的接口速率估算;
5、掌握iPerf等网络性能评测工具的使用。
二、 实验内容
实验原理:
网络带宽是指在一个固定的时间内(1秒),能通过的最大位数据。就好象高速公路的车道一样,带宽越大,好比车道越多。网络带宽作为衡量网络使用情况的一个重要指标,日益受到人们的普遍关注。它不仅是政府或单位制订网络通信发展策略的重要依据,也是互联网用户和单位选择互联网接入服务商的主要因素之一。
具体内容:
- 硬件实现部分
原有工程内编写计时器和留下计时探针标志,本硬件设备的硬件工作频率为125MHz。 - 探测部分
在Signaltap上设置两个硬件探针实例,分别使用报文计数器的值、定时器的值作为触发条件。 - 外部对比和测试部分
在主机A上通过iPerf工具,分别测试与主机B进行TCP和UDP的单流通信带宽;在主机A上通过iPerf工具,分别测试与主机B进行TCP和UDP的多流通信带宽;在各种条件下,iPerf测试的A和B之间的通信带宽;根据每次signaltap触发的定时器和计数器的数值,估算网络接口的通信带宽;比较iPerf测试的带宽与根据硬件定时器与计数器估算的带宽的差异。
三、 实验环境
- 1台管理节点主机;1台主机A,2根网线;
- NetMagic08开发平台;
- 软件Quartus 16。
- Iperf (主机及网络详细配置参照附带的实验环境拓扑及软件配置文档。)
四、 实验步骤
1 使用Quartus 打开 上次实验完成好的in2out3目录下的硬件工程项目;
2 在工程项目中,打开文件列表对UM.v文件进行编写(用户模块文件);
3 在UM.v文件中增加计数和计时功能。每秒钟输出一次有效通过的数据位(字节数*8):
其中accu为时间累计器,entire为最终输出的结果(每秒钟输出一次有效通过的数据位数),quantity是累计的有效字节数。每次两个判断,第一个:如果报文有效,quantity就累加有效字节;第二个:当时间累计到12500000,的时候,赋值并且清零quantity。
4. 新建信号量完成数据统计 ,设计信号拉出观测:
5.点击编译命令,对代码进行编译,软件会完成硬件电路的设计和优化,生成和工程名同名的sof文件
6.将sof文件下载到NetMagic08中进行硬件调试
7.使用iperf工具测试
下载完毕后,使用网线将两台PC通过NetMagic设备相连,接着使用iperf工具测量其中一台PC的带宽(Client),测量方通过iperf3 -t标志向Server发送流量:
主机A上输入:iperf3 -s
主机B上输入:iperf3 -c 169.254.78.34
可以看见测试的带宽大约是在360Mbps左右
主机B上输入:iperf3 -c 169.254.78.34 -u -b 1000m
在quartus上的硬件信号分析工具上捕获数据包,可以看见总的字节数是374343840,除以10的6次方后即是374Mbps,与使用iperf工具测试的相近
五、 实验思考
1 为什么传输层获得的通信带宽小于接口标称的带宽?
接口标称的数据量只要本机发送了它就会统计,但是传输层真正能够使用的通信带宽是与发送窗口相关,用LastByteSent指示当前缓存中最后发送的字节,用LastByteAcked指示已被累计确认的字节;那么LastByteSent-LastByteAcked则是真实的能够发送的数据量,也就限制了传输层所能获得的通信带宽,如果报文得不到确认,该差值会越来越小;当差值为0时,此时发送缓存被占满,而上层交接下来的期望发送的数据是会被暂时拒收的,但是硬件并不知道,他只是单纯的统计交接给传输层的数据量。
并且传输层之下还有网络层、链路层、物理层,传输层的通信带宽只是其中的一部分,最大的链路传输单元中不可能仅含有数据,还有一些网络层数据报头部等指示信息,因此传输层的带宽是不包含这些的,因此小于接口标称的带宽。
2. 为什么iPerf测试的带宽与硬件推算的带宽有差异?
因为有丢包的产生,在我们使用通信主机中使用iperf发送流量探测带宽时,在server端只会记录到达并确认的数据,而我们通过硬件,在接口标称的数据量,我们只是在其发出时进行了统计,并不知道这些数据是否有丢失,因此通过接口标称的数据量也包含了中途节点丢失的数据量,所以传输层所获得的通信带宽小于接口标称的带宽。
并且在带宽探测的过程中,发送窗口会受到拥塞窗口与流量窗口的约束,实际通过iperf测量的带宽应该是趋近于一个瞬时值,而我们通过硬件标称,统计的是一个过程量,算的差不多是一个平均值;因此,这可能也是造成传输层获得的通信带宽与接口标称的带宽不一样的原因之一。
并且硬件推算的带宽实际上是理想情况下的能够获得的最大带宽,实际测试下肯定是无法达到的,因此iperf测试的带宽与硬件推算之间是会有一定差异的。