android - 如何将 Android FTrace 精度提高到微秒?

标签 android linux ftrace systrace

我正在尝试在 Android 环境中生成 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

问题在于mytracefile.txt中时间戳的精度以毫秒为单位:

          <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

通常情况下,它应该以微秒为单位,例如14186.691234,而不仅仅是14186.690000

我已经测试了我拥有的所有其他trace_clock 选项(本地、全局和计数器),但结果始终相同。更改该参数不会更改输出文件中的任何内容。

我仔细关注了FTrace documentation但我不知道配置中还需要更改什么。

在互联网上搜索我只找到了这个错误报告,但没有解决:http://lists.linaro.org/pipermail/linaro-dev/2011-February/002720.html

有什么建议吗?

内核中是否有我必须安装的其他模块?

更新:

  • Android版本:4.2.2
  • Linux 内核版本:3.4.7

dmesg 输出还显示毫秒精度:

<4>[   38.130000] oom_adj 0 => oom_score_adj 0
<4>[   38.130000] oom_adj 1 => oom_score_adj 58
<4>[   38.140000] oom_adj 2 => oom_score_adj 117
<4>[   38.140000] oom_adj 4 => oom_score_adj 235
<4>[   38.150000] oom_adj 9 => oom_score_adj 529
<4>[   38.150000] oom_adj 15 => oom_score_adj 1000

谢谢,

最佳答案

我不认为 Android 中有纳秒级精确的计时器。毫秒是您能得到的最好的结果。

关于android - 如何将 Android FTrace 精度提高到微秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943649/

相关文章:

android - 下载图像 URL 包含 "è"

java - 将 SQLite 数据库以 mdb 或 accdb 数据库格式从 Android 手机导出到我的系统

java - APK 构建期间出现 UnsupportedOperationException

linux - org.eclipse.swt.SWTError : No more handles - after installing ibus 错误

linux - kill(getpid(), sig)之后,信号是否保证在下一条语句之前送达?

linux - 如何根据网络接口(interface)名称获取 trace-cmd 报告(例如 : eth2)?

android - 应用程序因自定义 ListView 中的 NullPointerException 而崩溃

linux - Play 应用程序启动时出错

linux - 使用 ftrace 和 kprobes(通过使用虚拟地址转换)捕获用户空间程序集?

profiling - Linux 内核中 Perf 事件子系统的性能开销