仿真时,通常需要测量一个变量对另一个变量的影响,比如包数量对传输时间的影响,这就需要让程序根据不同的参数值依次运行。为了使结果更加客观,让同一个程序执行多次,取其平均值。本文给出一个实例,让程序在不同参数值下运行多次(可以挂机运行),得到数据,并绘成图。
1. Python源代码
我本意是测试传输n个数据包所需时间,这里只是简单测试程序运行的总时间,显然不准确。据说写脚本分析trace file(后缀名为.tr)才是常用方法,求指点。
for maxForward in range(2, 1000, 50): count = 0 for i in range(0, 10, 1): start = time.time() os.system('./waf --run "scratch/AliceBob_class_main --flag=1 --maxForward=%d"' %(maxForward)) end = time.time() elapsed = (end - start) count += elapsed count = count/10 print >> open("result_AliceBob_XOR_100M_2.txt", 'a'), maxForward, count
第一行类似于C语言for(maxForward=2; maxForward<1000; maxForward+=50),第二层for循环让程序运行10次。函数os.system运行程序(类似于命令行运行的命令),并传入参数。
2. 得到数据
用命令python python_AliceBob_class.py运行该脚本,即可得到一组数据,举例如下:
2 4.33108618259 52 4.32459049225 102 4.44101219177 152 4.45601665974 202 4.61485278606 252 4.60161876678 302 4.61147019863 352 4.63963832855 402 4.76935830116 452 4.84588670731 502 4.94689056873 552 4.90891900063 602 5.05824730396 652 5.1653026104 702 5.16471829414 752 5.19985570908 802 5.1322250843 852 5.21339273453 902 5.43519155979 952 5.51791219711
3. xgraph绘图
有了数据,就可以用xgraph等作图工具便把这些数据直观表示出来,考虑到命令太长,每次输入不方便,我写成shell脚本,源代码如下(可以用<<BLOCK *** BLOCK注释多行shell脚本):
#! /bin/sh xgraph -t "A--R--B, without/with XOR" -x "packets" -y "runtime" -P result_AliceBob_Without_100M_2.txt result_AliceBob_XOR_100M_2.txt -geometry 800x400 &
这里-t, -x, -y分别是用来标识标题,x轴,y轴,得到的图形如下(本例得到的是两组数据,分别存在两个文件):
注:网上几乎都说xgraph没有gnuplot好用。
赞赏微信赞赏
支付宝赞赏