这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [讨论]纯软件工具真的不适合做嵌入式软件的性能分析吗?

共4条 1/1 1 跳转至

[讨论]纯软件工具真的不适合做嵌入式软件的性能分析吗?

菜鸟
2007-03-19 07:26:07     打赏
纯软件工具真的不适合做嵌入式软件的性能分析吗?

作者:AnyEmb

日期:2007-3-18


CodeTEST嵌入式软件在线测试与分析工具在嵌入式系统开发中的应用》(参见http://bbs.51testing.com/thread-3149-1-1.html)一文论述了嵌入式软件分析和测试的重要性,着重分析纯软件、纯硬件和半硬半软(以CodeTEST为例)这三种测试工具的优缺点。笔者非常赞同《应用》文中认为对嵌入式软件进行测试分析是十分重要的观点,但不敢苟同其对纯软件测试工具的最终看法。

为了证明纯软件工具不适合做性能分析、覆盖率分析以及内存动态分配动态观察,《应用》用了两段文字进行论证。先对纯软件工具的测试原理进行分析,指出纯软件工具“必然存在”“插桩函数和预处理任务”。这一步的分析和结论是正确的,不过其接下来的论证过程就变得有点牵强了。

不适合做性能分析?非也!

因为“用户目标系统是在一种不真实的环境下运行”,导致纯软件工具“捕获的数据也是不够精确”,“不能对用户目标系统中的函数和任务运行的时间指标进行精确的分析”,“所以采用纯软件的测试工具缺乏性能分析”。乍看推导过程貌似没有问题,但仔细推敲,却发现其逻辑不够严密,有偷换概念之嫌。

首先,“不真实的环境”并非只是纯软件工具所造成的,严格的说,只要在目标系统插桩了一条语句,那么目标系统就会与插桩前有所不同,变得“不真实”。测试工具必然会对其测试目标系统造成影响——这是一种客观事实。不管其影响如何,只要测试工具在测试过程中不把“薛定谔的猫”弄死,那么就不能否认该测试工具的作用。

其次,我们知道,PC平台的所有性能分析工具均属于纯软件工具。那为何在嵌入式领域纯软件工具就不适合做性能分析了呢?《应用》一文给出的原因是纯软件工具捕捉的数据不够精确。孰是孰非?关键在于“性能分析”一词上,对该词的不同解读就会有不同的结论。性能分析只是一个过程,用户关心的是经历此过程是否能达到他们想要达到的目的。而进行“性能分析”的目的有二,一是对系统性能进行度量,二是找出系统性能瓶颈。系统的性能一般体现于功能与所需资源(时间、内存等)的比值,如任务上下文切换时间、中断响应时间等等。如果不进行软件插桩,又如何得到这些性能数据呢?看来《应用》认为的数据不够精确,绝非所指这些系统性能指标,而是特指某些代码段的运行时间,譬如函数的运行时间。使用纯软件工具插入的代码量大于半软半硬工具插入的代码量,二者相比,前者在测试代码段运行时间时产生的误差就会大于后者,所以《应用》才认为“纯软件工具捕捉的数据不够”半软半硬工具来得“精确”。还好,《应用》只是认为数据不够精确,并不否认纯软件工具获取测试数据的能力和科学性。

如果嵌入式系统对实时指标要求不高,那么也就没必要高精度地获取每一个函数的运行时间等数据。对于大多数非实时的嵌入式系统而言,进行性能分析的目的在于找出系统性能瓶颈,通过系统优化来提高系统性能水平。那么纯软件工具是否可以找出目标系统的性能瓶颈?答案是肯定的。

在拙作《浅论工具于嵌入式软件性能优化工作的重要性》一文提到,系统运行热点就是软件的系统性能瓶颈,而系统运行热点的粒度可分为任务级和函数级。任务级运行热点即为CPU占用率最高(或占用时间最长)的任务。要测量系统每个任务的CPU占用率,非要操作系统支持不可。如何支持?提供任务切换钩子函数由用户自己实现,或者操作系统本身提供统计各任务CPU占用率的功能,见图1。和任务CPU占用率实现原理一样,要提供函数级的CPU占用率,就必须在各函数之间插入一段代码,或者直接提供一个函数切换钩子函数,见图2。正如我们一般只关心任务的CPU占用率,而非运行一次所花的时间一样,函数的CPU占用率比单次运行函数所花的时间值更重要。CPU占用率高的函数就是系统运行热点。函数切换钩子函数的插入,会影响系统的运行效率,但和任务切换钩子函数一样,不会改变系统的运行逻辑,也不会影响各函数之间的CPU占用比例。纯软件工具和半软半硬工具在计算各函数运行时间的原理上是一致的,只不过纯软件工具需要在函数切换钩子函数内完成时间的统计运算,而半软半硬工具则可以把运算工作交由硬件完成,在函数切换钩子函数(此时已没有钩子函数的概念)的位置只需放置一条或数条标识语句即可。

1 任务CPU占用率实现原理示意图

2 函数CPU占用率实现原理示意图


不适合做覆盖率分析?非也!

《应用》认为“当做覆盖率分析的时候,因为要大量打点,而打点多于200时就会影响系统的运行,所以只能做单元覆盖率分析且单元的程序量不能太大。”难道半软半硬工具在做覆盖率分析的时候,可以无需打点,抑或打点数目可以少于200

不适合跟踪内存的动态分配?非也!

《应用》直接得出纯软件工具“不能对内存的动态分配进行动态的观察”的结论,连分析推论都给省掉了。也许《应用》的作者认为该论述是真理,无需讨论,但事实上该说法纯属谬论。目前市场上可以提供内存动态分配跟踪功能的纯软件工具并不在少数这一事实足以推翻其观点。至于如何可以做到内存的动态分配跟踪的技术细节就不必在此展开了,各位细想片刻便可知晓。

不该忘记的事实!

最后,特别需要提醒的是,《应用》的作者可能忘记了一件事实,CodeTEST也是有一个纯软件版本的。
<>
<版权所有,欢迎转载>

作者联系方式:

QQ741918060

E-mail : AnyEmb@126.com

MSN : AnyEmb@hotmail.com






关键词: 讨论     软件     工具     真的     不适合     嵌入式     性能     分析    

院士
2007-03-19 16:28:00     打赏
2楼

看不见图片~~~~


菜鸟
2007-03-20 06:35:00     打赏
3楼

图1:

图2:

[align=right][color=#000066][此贴子已经被作者于2007-3-19 22:35:57编辑过][/color][/align]

菜鸟
2007-03-20 19:39:00     打赏
4楼

可以参考一下windriver的profileScope,可以满足大部分的需求


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]