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 등을 사용하여 스크립트를 작성하여 출력의 열을 조정할 수 있습니다.

관련 정보