strace를 실행할 때 지정된 syscall의 시간 차이를 계산하고 그룹화하는 방법


2

웹 성능 테스트 (각 파일에 소요되는 시간을 확인)를 계획하고 있지만 모든 응용 프로그램에 유용 할 수 있습니다.

나는 존재와 다른 성능 응용 프로그램을 사용하는 방법을 정확히 알고 있으므로 strace 솔루션에만 관심이 있습니다.

기본적으로 필터링 된 syscall의 시간 실행 차이를 계산 한 다음 그룹화하고 정렬하고 요약을 생성합니다 (-C 옵션과 유사).

사용 예 :

$ strace -ttt -s1500 -o/dev/stdout -e trace=open,access sleep 1 | awk '{print $1 " " $2}'
$ strace -ttt -s1500 -s/dev/stdout -e trace=access drush ev '' | awk '{print $1 " " $2}'
(some example output)
1344416787.291395 execve("/bin/sleep",
1344416787.291796 brk(0)
1344416787.291879 access("/etc/ld.so.nohwcap",
1344416787.291960 mmap(NULL,
1344416787.292026 access("/etc/ld.so.preload",
1344416787.292089 open("/etc/ld.so.cache",
...
1344416787.294428 nanosleep({1,
1344416788.294726 close(1)
1344416788.294814 close(2)
1344416788.294906 exit_group(0)

그런 다음 위의 출력에서 ​​마지막 인쇄 통화 간의 시간 차이 (인간 형식)를 계산하고 싶습니다.

Pseudo code:
echo "1344416788.294906 1344416788.294814" | awk '{print $2 - $1}'
0.00101089

힌트 : strace에서는 -t, -tt 또는 -ttt와 같은 다른 형식을 사용할 수 있습니다 (파싱하기 쉬운 것을 사용할 수 있음).

그런 다음 목록을 생성하십시오 (예 : 헤더없이 sort, uniq 등 사용).

seconds  syscall
------ -----------
0.001580   close(2)
0.000132   close(1)
0.000032   exit_group(0)
0.000022   access("/etc/ld.so.preload",
0.000012   access("/etc/ld.so.cache",

syscall 이름으로 만 그룹화하지 말고 전체 구 ($ 2)로 그룹화하십시오.

가능한 한 쉬워야합니다. 하나의 라이너가 있다면 그것을보고 싶습니다. 감사.

추신 당신이 무의미하다고 생각되면 무시하십시오.

-

관련 주제 (일부 아이디어에 유용 할 수 있음) :

두 문자열에서 두 숫자를 추출하고 Bash의 차이를 계산하는 방법은 무엇입니까?

http://www.unix.com/shell-programming-scripting/121053-sum-value-selected-lines-script-awk-perl.html

http://unstableme.blogspot.ch/2009/12/sum-numbers-in-each-row-awk.html

http://www.unix.com/shell-programming-scripting/157047-awk-compare-previous-value-current.html

답변:


2

다음과 같이 할 수 있습니다 :

$ strace -ttt ls 2>&1 1>&2- | awk '{ if (NR < 2) {last_time=$1} else {sec[$2]+=($1-last_time)}} END {for (i in sec) printf("%f %s\n", sec[i], i)}'| sort -n
0.000874 access("/etc/ld.so.preload",
0.000944 open("/etc/ld.so.cache",
0.001242 open("/lib/x86_64-linux-gnu/libselinux.so.1",
0.001490 mprotect(0x7f0166a2b000,
0.001543 mmap(0x7f0166c2a000,

Linux에서 시스템 호출을 프로파일 링하려면 훨씬 좋은 도구가 있습니다.

BTW $ 2는 모든 시스템 호출 인수를 포함하지 않는, 당신은 볼 수 0.073917 mmap(NULL,귀하의 출력에

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.