【问题标题】:How to increase Android FTrace precision to microseconds?如何将 Android FTrace 精度提高到微秒?
【发布时间】:2013-06-05 15:17:10
【问题描述】:

我正在尝试在 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

有什么建议吗?

我必须在内核中安装其他模块吗?

更新:

  • 安卓版本: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

谢谢,

【问题讨论】:

  • 您需要查看您在安卓设备上使用的内核版本。可能检查内核源代码会有所帮助。
  • @rakib 谢谢,我添加了内核版本并对问题进行了一些更新。
  • 好吧,我的意思是寻找您正在使用的 Android 内核。你需要看看那个Android内核的ftrace特性,ftrace代码是否有任何修改。通常 Android 内核包含对稳定 Linux 内核的一些修改。

标签: android linux ftrace systrace


【解决方案1】:

我认为 Android 中没有纳秒级精确计时器。毫秒是您可以获得的最佳时间。

【讨论】:

  • 抱歉,我更新了这个问题。我对 微秒 很感兴趣,我确信我们可以获得这种精度,因为它在 FTrace 文档中明确显示。谢谢。
【解决方案2】:

几乎所有硬件都能够生成毫秒级的时间,但计时器的准确性取决于硬件。如今,许多系统都提供具有微秒或更高分辨率的计时器。这些通常可以配置为提供您想要的精度。

【讨论】:

    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2014-01-11
    • 1970-01-01
    • 2014-03-21
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多