PID를 포함하여 "실시간"으로 추적점을 표시할 수 있는 명령이 있습니까?

PID를 포함하여 "실시간"으로 추적점을 표시할 수 있는 명령이 있습니까?

"참조"의 명령 목록을 포함하여 perf script, perf trace및 에 대한 설명서를 살펴보았습니다 .trace-cmd

sched:sched_process_exec예를 들어 "실시간"을 사용하여 추적 할 수 있습니다 perf trace -a --no-syscalls -e sched:sched_process_exec. 하지만 과정을 보여줄 뿐입니다이름(예를 들어 ls). 추적점에 특정 매개변수가 없으면 PID가 표시되지 않습니다. perf script항상 PID를 표시하지만 실시간 출력은 표시하지 않습니다. 파일의 내용을 표시합니다 perf.data.

btracefor 와 같은 단일 명령으로는 필요하지 않습니다 blktrace. .blktrace -d /dev/sda -o - | blkparse -i -

(위의 두 명령 모두 PID를 표시합니다 :-). blktrace추적 이벤트도 사용하는 일련의 명령이 기록된 추적을 인쇄하는 것과 동일한 형식으로 실시간 출력을 인쇄할 수 있다는 사실을 보면 실망스럽습니다 . 범용 추적 도구에서 이렇게 훌륭한 기능을 발견한 적이 없습니다! )

답변1

perf record -a --no-syscalls -e sched:sched_process_exec sh -c read | perf script

( sh -c read이 추적을 중지할 수 있는 방법이 있습니다. Enter 키를 누르십시오. 이 명령을 생략하고 ctrl+C를 사용하여 파이프를 중단하려고 하면 출력도 손실됩니다. 아마도 중단되기 때문일 것입니다 perf script.)

그러나 버퍼링으로 인해 이 출력은 "실시간"이 아닙니다. 예를 들어 위 명령을 실행하면 아무 것도 표시되지 않지만 Enter 키를 누르면 명령이 중지되고 의 exec() 줄이 표시됩니다 sh. blktrace가지다특별한 경우 코드기본 C stdio 버퍼링 비활성화를 포함하여 파이프의 출력을 처리합니다. 명령 perf record으로 실행하려고 하면 unbuffer"호환되지 않는 파일 형식" 오류가 발생합니다. 오류는 perf script.


man perf-report

...

옵션

-i, --input=파일 이름을 입력하세요. (기본값: perf.datastdin이 fifo가 아닌 이상)

관련 정보