0

我们已经在 VxWorks 5.5.1 上运行了一个相当大的应用程序,该应用程序已经开发和修改了大约 10 年。我们有一些简单的本土工具来表明我们没有使用过多的内存或过多的处理器,但我们对实际拥有的空间没有很好的感觉。它开始使为未来的增强做估计变得困难。

有人对如何分析这样的系统有任何建议吗?我们从来没有让 Wind River 工具正常工作的运气。

对于奖励积分:另一个复杂因素是我们的系统在不同时间有非常不同的行为;在启动期间它做了很多事情,然后除了短暂的活动外,它相对空闲。如果有一个具有某种编程方式的分析器必须记录状态信息,我认为这也会非常有用。

FWIW,这是用 GCC 编译的,完全用 C 编写。

4

3 回答 3

4

我已经对包括嵌入式应用程序在内的各种软件进行了很多性能调整。我不会讨论内存分析——我认为这是一个不同的问题。

我只能猜测“众所周知”的想法起源于何处,即要找到性能问题,您需要测量各个部分的性能。这是一种自上而下的方法,类似于政府试图通过细分来控制预算浪费的方式。恕我直言,它不是很好用。测量可以查看您所做的是否有所作为,但它无法告诉您要解决的问题。

擅长告诉你要解决什么问题的是一种自下而上的方法,在这种方法中,你检查一个有代表性的微观单位样本,了解正在使用的东西,并找出每个单位被使用的原因的完整解释。这出于简单的统计原因。如果有原因可以保存一些百分比(例如 40%)的样本,则平均 40% 的样本会显示它,并且不需要大量的样本。它确实需要您仔细检查每个样本,而不仅仅是将它们聚合成更大的束。

作为一个历史例子,这就是哈里·杜鲁门在美国卷入二战爆发时所做的。国防工业的浪费非常严重。他刚上车,开车到工厂,采访了周围的人。然后他回到美国参议院,解释了究竟是什么问题,并解决了这些问题。

也许这比您想要的答案更多。具体来说,这是我使用的方法这是一个逐个示例

补充:我想通过测量发现的想法很自然。82 年左右,我正在研究嵌入式系统,我需要进行一些性能调整。硬件工程师提议在板上放置一个我可以读取的计时器(从他的大量提供)。IOW 他认为发现性能问题需要时间。我感谢他并拒绝了,因为那时我知道并信任随机停止技术(使用在线仿真器完成)。

于 2009-07-19T16:11:14.207 回答
1

如果您有可用的辅助时钟,则可以使用 SPY 实用程序(可通过 config.h 文件进行配置),它确实可以非常粗略地估计哪些任务正在使用 CPU。

它的好处是它不需要附加到 Tornado 环境,您可以从 Kernel shell 中使用它。

否则,btpierre关于使用taskHookAdd的建议过去已经成功使用。

于 2009-07-20T01:37:33.160 回答
0

我曾使用基于 taskSwitchHookAdd 和相关功能(删除挂钩等)的本地构建监控实用程序的系统工作过。

“简单地”使用它来跟踪给定任务运行的滴答数。我意识到这是用于分析的相当粗略的信息,但根据您的需要它可能很有用。

要查看每个任务使用了多少 cpu%,请计算分配给每个任务的刻度百分比。

要查看您有多少余量,请添加一个仅执行“while(1){}”的最低优先级“空闲”任务,并查看分配给它的 cpu% 多少。粗略地说,这就是你的净空。

于 2009-07-19T04:09:18.120 回答