飞行员夹克搭配男 图片:gnuplot用于逻辑复杂的高性能软件调试

来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 05:52:01
 在高性能软件调试中,常常面临一个困境,如果性能出现波动或不稳定时,无法通过程序日志来确认原因,因为:

    (1) 即使日志只是序列化到内存中,可是它依然会影响不少性能。

    (2) 即使性能没有受到严重影响,但是,在几十万的性能数据统计中,想要通过普通方式看出问题来,是比较困难的。如果使用平均值,显然是很难观察到波动的。

 

    于是,需要有一种调试方式,即不影响性能,又能将数据可视化,一览于眼底。于是, 使用gnuplot将数据可视化成为一种比较好的解决方式。就如上图中的结果一样,这幅图横坐标表示的是运行某段代码的次序,纵坐标是耗时。从图上我们可以看出在运行到20000次左右时,发生了大量的波动。然后我们可以再细化分析这段代码,再把代码分成几段,再画图,直到找到问题。注:绿色的那条线是平均值。

    我通常用的实施方法是:

    (1)  将程序分成几段关键的代码,对分段进行计时,把每次运行花费的时间记入一个数组中,数组给的大一点,存个十万个或更多,数组循环使用。

    (2) 在发生问题时,将数组的数据导出,再用gnuplot画成图。非常清晰。

    (3) 通过观察图,找出问题所在。

     第三步其实很重要,gnuplot画的图,只是让程序的所有性能点都一五一十的呈现在了你的面前,分析还是得靠自己。主要的技巧是你需要对图中的合理时间值有个估计,不然,当你看到每幅图时,你都有可能认为是合理的,也有可能认为是不合理的。

    注:如果能用INTEL.VTUNE.PERFORMANCE能分析是好事,不过这些工具不是所有的机子都能运行,且有局限性。