Trace-cmd(ftraceのフロントエンド)を使用してエポック時間を取得するには?

Trace-cmd(ftraceのフロントエンド)を使用してエポック時間を取得するには?
  <...>-32578 [001] **133767.868869**: kfree:            call_site=ffffffff810e6f06 ptr=(nil)

trace-cmd報告された時間をエポック時間にするにはどうすればよいですか?デフォルトでは、時間はアプリケーションが正常に実行されてからの時間と見なされます。これは、イベントが発生した時期を正確に判断するための要件です。

trace-cmd list -Oオプションも役に立ちません。

ベストアンサー1

この例の時間は、133767.868869CPUの起動後の時間です(通常、/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などを使用してスクリプトを作成して出力の列を調整したりできます。

おすすめ記事