linux– 如何将ftrace精度提高到微秒?

linux– 如何将ftrace精度提高到微秒?,第1张

概述我正在尝试在Android环境中生成FTrace文件,使用:root@adroid:#echo1>/sys/kernel/debugracing/events/sched/sched_switch/enableroot@adroid:#echo1>/sys/kernel/debugracingracing_onroot@adroid:#cat/sys/kernel/debugracingrace>mytracefile.txtroot

我正在尝试在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精度提高到微秒?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1111928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存