Android Systrace 工具内部使用 strace 还是 ftrace?

Posted

技术标签:

【中文标题】Android Systrace 工具内部使用 strace 还是 ftrace?【英文标题】:Android Systrace tool internally uses strace or ftrace? 【发布时间】:2013-03-30 12:10:31 【问题描述】:

Systrace android 工具在内部调用一个名为 atrace 的工具,它是 ftracestrace 的扩展(Linux工具)。

如果我们通过模拟器控制台(ADB shell)连接到 Android Jelly Bean,我们可以执行 strace 工具,但我们不能执行 ftrace工具(未安装命令)。

通过 Internet 进行一些研究,我发现 straceftrace 的前身: http://crtags.blogspot.de/2012/04/dtrace-ftrace-ltrace-strace-so-many-to.html

查看 Android 源代码,我发现最“内部”的参考是 Trace.h 文件: http://androidxref.com/4.1.1/xref/frameworks/native/include/utils/Trace.h

我认为这个文件会被解析为原生 Linux 驱动程序。

但是,我仍然无法知道此实现驱动程序属于 strace 还是 ftrace。 “通常”,它应该是 ftrace 因为它是较新的,但在这种情况下,我不知道为什么我们不能从模拟器运行 ftrace。相比之下,strace 完全可以从模拟器中获得。

那么,有人知道Systrace Android 工具是在非常低的级别使用strace 还是ftrace

谢谢!

【问题讨论】:

【参考方案1】:

我已按照此处找到的与 ftrace 相关的说明进行操作: http://www.linuxforu.com/2010/11/kernel-tracing-with-ftrace-part-1/

一切都很完美。我之前无法执行 ftrace,因为交互和检索数据是通过逻辑路径完成的。

要执行 ftrace,在正确配置后(许多步骤...),在 adb shell 中:

root@android:# cat /sys/kernel/debug/tracing/trace > mytracefile.txt

atrace 使配置过程更容易,因此我们可以通过以下方式访问跟踪信息:

root@android:# atrace -s -w -t 100 > mytracefile.txt

另一方面,我在这里找到了有关执行 strace 的信息: http://www.hokstad.com/5-simple-ways-to-troubleshoot-using-strace

所有指示的示例都在我的环境中使用 adb shell 成功执行。

这两种工具的交互和访问结果非常不同。

现在我可以说 systrace Android 工具基于 atrace,而 atrace 又基于 ftrace

strace 也受支持,但用于其他目的,与 systrace 无关。

问候,

【讨论】:

以上是关于Android Systrace 工具内部使用 strace 还是 ftrace?的主要内容,如果未能解决你的问题,请参考以下文章

Android性能分析工具-systrace使用

Android性能优化之Systrace工具介绍 _&& Systrace生成的trace.html打开空白或者打不开的解决办法

Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)

android性能測试systrace

Android Systrace 使用方法

使用adb命令测量Android应用的启动时间