ns3-性能分析
导入
ns3虽然底层都是c++,但是有时候做起仿真来,还是要跑几十个小时,大大延缓了开发速度。
因此,对ns3进行性能分析是十分必要的。
下面,将说明两种性能分析工具gprof和operf,在ns3中的使用。
一、gprof
这个工具在linux中常用。在ns3中配置使用它的步骤:
1:在~/ns-allinone-3.29/ns-3.29下wscript文件插入代码,代码一共有两段,在文件中的位置很好确定。
1 opt.add_option('--enable-gprof',
2 help=('Enable code profiling.'),
3 action="store_true", default=False,
4 dest='enable_gprof')
5 if Options.options.enable_gprof:
6 env['GPROF_ENABLED'] = True
7 env.append_value('CCFLAGS', '-pg')
8 env.append_value('CFLAGS', '-pg')
9 env.append_value('CXXFLAGS', '-pg')
10 env.append_value('LINKFLAGS', '-pg')
配置ns3
./waf configure -d optimized --enable-examples --enable-static --enable-gprof
./waf build
如果跳过“ --enable-static”,最终将仅对主程序进行性能分析,而不会对库代码进行性能分析。不过使用该选项,可能导致NS3占用高达25GB的存储空间。
optimized的作用:翻wscript结果看到了编译选项,先跳过这里,知道是个优化编译就行了
运行一个例子
将~/ns-allinone-3.29/ns-3.29/example/tcp下的例子tcp-large-transfer.cc,拷到~/ns-allinone-3.29/ns-3.29/scratch目录中,运行以下命令
./waf --run scratch/tcp-large-transfer
例子运行后,在~/ns-allinone-3.29/ns-3.29/下生成文件gmon.out,运行以下命令
gprof build/scratch/tcp-large-transfer gmon.out > analysis.txt
等待约1分钟,得到analysis.txt文件,该文件即为gprof工具测试tcp-large-transfer.cc例子的性能分析报告。
解读性能报告
如何阅读报告:
二、operf
在官方的HOWTO use oprofile中提到了如何使用operf进行性能分析。
https://www.nsnam.org/wiki/HOWTO_use_oprofile
三、比较
两种性能分析工具,分析的结果怎么样呢,下面运行first.cc,进行对比。
1gprof
2 operf