如何使用trace-cmd(ftrace的前端)获取纪元时间?

如何使用trace-cmd(ftrace的前端)获取纪元时间?
  <...>-32578 [001] **133767.868869**: kfree:            call_site=ffffffff810e6f06 ptr=(nil)

如何使trace-cmd报告时间为纪元时间?默认情况下的时间是我认为自应用程序正常运行以来的时间。这是精确确定事件发生时间的要求。

trace-cmd list -O选项也没有帮助。

答案1

本例中的时间133767.868869是自 cpu 启动以来的时间(假设您没有更改通常挂载在 /sys/kernel/debug/tracing/trace_clock 的文件的值)。问题是您需要多少准确度the exact time of the event。如果说到最接近的秒就可以了,那么您只需添加以下输出即可

  date | cat > /dev/null # Make sure programs are in cache
  set -- $(date +%s.%N) $(cat /proc/uptime)
  echo "$1-$2" | bc

它计算出系统启动的时间。这假设您的时钟设置合理。

如果你想要更准确的东西那么你可能应该这样做

  echo global > /sys/kernel/debug/tracing/trace_clock # Once only
  date +"Time=%s.%N" > /sys/kernel/debug/tracing/trace_marker

多次,并将Time=消息与时间戳进行比较,以估计值的偏移量以及存在的可变性。

一旦您知道要调整的量,您就可以进行一次性计算以查看特定事件何时发生,或者您可以使用 awk、perl、python 或 ... 编写脚本来调整输出中的列。

相关内容