【发布时间】:2010-07-19 21:58:42
【问题描述】:
我有一个在嵌入式处理器 (ARM) 上运行的应用程序,我想分析该应用程序以了解它在何处使用系统资源,如 CPU、内存、IO 等。该应用程序正在运行在 Linux 之上,所以我假设有许多分析应用程序可用。有人有什么建议吗?
谢谢!
编辑:我还应该添加我们正在使用的 Linux 版本有点旧(2.6.18)。不幸的是,我现在对此没有太多控制权。
【问题讨论】:
标签: c++ linux embedded profiling
我有一个在嵌入式处理器 (ARM) 上运行的应用程序,我想分析该应用程序以了解它在何处使用系统资源,如 CPU、内存、IO 等。该应用程序正在运行在 Linux 之上,所以我假设有许多分析应用程序可用。有人有什么建议吗?
谢谢!
编辑:我还应该添加我们正在使用的 Linux 版本有点旧(2.6.18)。不幸的是,我现在对此没有太多控制权。
【问题讨论】:
标签: c++ linux embedded profiling
正如 bobah 所说,gprof 和 valgrind 很有用。您可能还想尝试OProfile。如果您的应用程序使用 C++(如标记所示),您可能需要考虑禁用异常(如果您的编译器允许)并避免动态转换,如 sashan 上面提到的。另见Embedded C++。
【讨论】:
在相关说明中,C++ 工作组针对各种 C++ 语言特性的性能成本做了一份技术报告。例如,他们分析了 dynamic_casting 一层或两层深度的成本。 http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf 此处的报告可能会让您深入了解嵌入式应用程序中的痛点可能在哪里。
【讨论】:
假设您正在测试的程序大到可以使用,那么调用树可能会被修剪,因此优化的最佳机会是您可以删除或避免的函数/方法调用。该链接显示了找到它们的好方法。
许多人将此视为一种测量时间的分层侦查过程。 或者你可以简单地在行动中抓住它,这就是我所做的。
【讨论】: