Android systrace 工具,通过ADB调用 atrace 工具。但是,我不太了解跟踪文件的格式。显然它与linux ftrace 工具非常相似,但有一些差异。主要区别在于不使用 System.Map 文件,但它将所有信息包含在跟踪文件中。此外,还有一些特定于Android的新B | E条目。
Android源代码中有关于此格式的一些信息:http://androidxref.com/4.1.1/xref/external/chromium-trace/src/tracing/linux_perf_importer.js
但是,在该文档中我们可以看到该格式属于Linux Perf 工具。我不这么认为,linux perf作为输出提供了一种非常不同的格式......(除非某些特殊配置是活动的......)
我的问题是:有谁知道在哪里可以找到关于使用adb的 atrace 工具生成的Android跟踪文件的官方文档?
这种格式对您来说很熟悉吗?
# tracer: nop
#
# entries-in-buffer/entries-written: 66427/66427 #P:2
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
atrace-1724 [000] d..3 14186.680000: sched_switch: prev_comm=atrace prev_pid=1724 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
<idle>-0 [000] d.h7 14186.690000: sched_wakeup: comm=tfm_b6bcf800 pid=1714 prio=35 success=1 target_cpu=000
<idle>-0 [000] d..3 14186.690000: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=tfm_b6bcf800 next_pid=1714 next_prio=35
tfm_b6bcf800-1714 [000] d..3 14186.690000: sched_switch: prev_comm=tfm_b6bcf800 prev_pid=1714 prev_prio=35 prev_state=D|W ==> next_comm=swapper/0 next_pid=0 next_prio=120
<idle>-0 [001] d.h3 14186.690000: sched_wakeup: comm=Player Aud Mixe pid=146 prio=35 success=1 target_cpu=001
<idle>-0 [001] d..3 14186.690000: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Player Aud Mixe next_pid=146 next_prio=35
Player Aud Mixe-146 [001] d..3 14186.690000: sched_switch: prev_comm=Player Aud Mixe prev_pid=146 prev_prio=35 prev_state=D ==> next_comm=swapper/1 next_pid=0 next_prio=120
<idle>-0 [001] d.h3 14186.690000: sched_wakeup: comm=Player Aud Mixe pid=146 prio=35 success=1 target_cpu=001
<idle>-0 [001] d..3 14186.690000: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Player Aud Mixe next_pid=146 next_prio=35
Player Aud Mixe-146 [001] d..3 14186.690000: sched_switch: prev_comm=Player Aud Mixe prev_pid=146 prev_prio=35 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
<idle>-0 [001] d.h3 14186.700000: sched_wakeup: comm=Player Aud Mixe pid=146 prio=35 success=1 target_cpu=001
<idle>-0 [001] d..3 14186.700000: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Player Aud Mixe next_pid=146 next_prio=35
EventThread-110 [001] d..5 14190.100000: sched_wakeup: comm=SurfaceFlinger pid=103 prio=112 success=1 target_cpu=001
EventThread-110 [001] d..3 14190.100000: sched_switch: prev_comm=EventThread prev_pid=110 prev_prio=111 prev_state=S ==> next_comm=SurfaceFlinger next_pid=103 next_prio=112
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|onMessageReceived
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|handleTransaction
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|doTransaction
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: E
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: E
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|handleMessageInvalidate
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: E
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: E
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|onMessageReceived
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|handleMessageRefresh
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|rebuildLayerStacks
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|computeVisibleRegions
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: E
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: E
SurfaceFlinger-103 [001] ...1 14190.100000: tracing_mark_write: B|96|doComposition
SurfaceFlinger-103 [001] d.h4 14190.100000: sched_wakeup: comm=surfaceflinger pid=96 prio=120 success=1 target_cpu=001
SurfaceFlinger-103 [001] d..3 14190.100000: sched_switch: prev_comm=SurfaceFlinger prev_pid=103 prev_prio=112 prev_state=R ==> next_comm=surfaceflinger next_pid=96 next_prio=120
提前致谢!
答案 0 :(得分:4)
嗯,现在可以肯定:格式属于 ftrace 工具。 Android atrace 是 ftrace 版本的扩展,以方便配置。
ftrace 的官方文档显示,此输出格式可以通过以下方式直接生成:
root@adroid:# echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
root@adroid:# echo 1 > /sys/kernel/debug/tracing/tracing_on
root@adroid:# cat /sys/kernel/debug/tracing/trace > mytracefile.txt
root@adroid:# echo 0 > /sys/kernel/debug/tracing/tracing_on
root@adroid:# echo 0 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
官方文件: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/trace/ftrace.txt
# cat trace
# tracer: nop
#
# entries-in-buffer/entries-written: 77/77 #P:8
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
<idle>-0 [007] d... 2440.707395: sched_switch: prev_comm=swapper/7 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=snapshot-test-2 next_pid=2243 next_prio=120
snapshot-test-2-2229 [002] d... 2440.707438: sched_switch: prev_comm=snapshot-test-2 prev_pid=2229 prev_prio=120 prev_state=S ==> next_comm=swapper/2 next_pid=0 next_prio=120
[...]
此致
答案 1 :(得分:0)
很棒但是不要忘记安装调试文件系统,
"mount -t debugfs none /sys/kernel/debug" or
"mount -o rw,remount -t debugfs none /sys/kernel/debug"
否则你不会得到像
这样的东西运行atrace时“错误打开/ sys / kernel / debug / tracing / options / overwrite:没有这样的 文件或目录“
这里有一些更有用的信息http://rahulonblog.blogspot.se/2013/06/how-to-enable-debugfs-in-kernel.html