Формат файла трассировки Systrace Android

Инструмент Android systrace вызывает инструмент atrace через ADB. Однако я не очень хорошо понимаю формат файла трассировки. По-видимому, он очень похож на инструмент ftrace для Linux с некоторыми отличиями. Основное отличие состоит в том, что он не использует файл System.Map, а включает всю эту информацию в файл трассировки. Кроме того, есть новые записи B|E, специфичные для Android.

Некоторая информация об этом формате содержится в исходном коде Android по адресу: http://androidxref.com/4.1.1/xref/external/chromium-trace/src/tracing/linux_perf_importer.js

Однако в этой документации мы можем прочитать, что формат принадлежит Linux Perf Tool. Я так не думаю, linux perf дает на выходе совсем другой формат... (если не активна какая-то специальная конфигурация...)

Мой вопрос: кто-нибудь знает, где я могу найти официальную документацию о файлах трассировки Android, созданных с помощью инструмента atrace из adb?

Знаком ли вам этот формат?

# 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

Заранее спасибо !


person Rodmar Conde    schedule 28.03.2013    source источник
comment
Возможно, это не совсем то, что вы ищете, но полезно?: developer.android.com/tools /help/systrace.html   -  person Peter L.    schedule 28.03.2013
comment
Какую команду вы использовали для создания приведенного выше журнала? Мне не удалось найти команду для генерации строк, содержащих tracing_mark_write: B| и tracing_mark_write: E   -  person Duke    schedule 25.02.2014
comment
Команда atrace — это скрытая команда в консоли оболочки Android (adb). Обычно он вызывается скриптом systrace Python. Я получил этот журнал, вручную запустив atrace.   -  person Rodmar Conde    schedule 28.02.2014


Ответы (2)


Что ж, теперь точно: формат принадлежит инструменту ftrace. atrace для Android — это расширение сборки 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
[...]

С уважением,

person Rodmar Conde    schedule 03.04.2013

Отличный пост, однако не забудьте смонтировать файловую систему отладки,

"mount -t debugfs none /sys/kernel/debug" or 
"mount -o rw,remount -t debugfs none /sys/kernel/debug"

иначе вы не получите что-то вроде

"Ошибка при открытии /sys/kernel/debug/tracing/options/overwrite: Нет такого файла или каталога"

при запуске atrace

Еще немного полезной информации здесь http://rahulonblog.blogspot.se/2013/06/how-to-enable-debugfs-in-kernel.html

person janCoffee    schedule 02.12.2013