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 的工具,它是 ftrace 或 strace 的扩展(Linux工具)。
如果我们通过模拟器控制台(ADB shell)连接到 Android Jelly Bean,我们可以执行 strace 工具,但我们不能执行 ftrace工具(未安装命令)。
通过 Internet 进行一些研究,我发现 strace 是 ftrace 的前身: 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工具介绍 _&& Systrace生成的trace.html打开空白或者打不开的解决办法
Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)