我正在尝试在Android环境中生成FTrace文件,使用:
root@adroID:# echo 1 > /sys/kernel/deBUG/tracing/events/sched/sched_switch/enableroot@adroID:# echo 1 > /sys/kernel/deBUG/tracing/tracing_onroot@adroID:# cat /sys/kernel/deBUG/tracing/trace > mytracefile.txtroot@adroID:# echo 0 > /sys/kernel/deBUG/tracing/tracing_onroot@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 ftrace文件构建一个图形解析器(包括atrace痕迹).这就是为什么尽可能多地保持精度是非常重要的.
使用相同的设备和其他软件工具,我们可以成功地获得微秒精度.
所以,现在我们计划编辑ftrace.c源代码来修改生成时间戳的方式:
static inline uint64_t my_custom_jiffIEs(voID){ struct timeval tv; gettimeofday(&tv, NulL); return tv.tv_sec*1000000 + tv.tv_usec;}
我个人认为这不是一个非常好的解决方案/架构/实现,因为这可以在不修改源代码的情况下实现……但它是我们此时唯一的想法.
你怎么看 ?
解决方法:
显然这个问题与AndroID无关.我们已经使用我们的自定义linux版本进行了测试,我们仍然遇到同样的问题:FTrace产生毫秒精度,而其他工具能够产生微秒精度.也许是FTrace模块版本的问题?
问候,
总结以上是内存溢出为你收集整理的linux – 如何将ftrace精度提高到微秒?全部内容,希望文章能够帮你解决linux – 如何将ftrace精度提高到微秒?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)