Skip to content

Latest commit

 

History

History
58 lines (43 loc) · 1.99 KB

perf-and-flamegraph.md

File metadata and controls

58 lines (43 loc) · 1.99 KB

perf and FlameGraph

perf

아래의 커맨드로 설치 가능:

$ sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`
  • X축은 스택 프로파일 모집단을 보여줌 (시간 순 아님)
  • Y축은 스택 깊이를 보여줌
  • 프레임이 넓을수록 스택에 더 자주 존재함
  • hottest code-path일수록 더 넓게 나타남
  • 각 스택 사각형의 너비는 해당 함수가 CPU에 있었던 총 시간을 나타냄 (샘플 카운트 기반)
    • 넓은 사각형을 보이는 함수는 좁은 사각형을 보이는 함수보다 execution 당 CPU를 더 많이 소비한 것일 수도 있고, 또는 단순히 더 자주 호출된 것일 수도 있음
    • 호출 횟수는 표시되지 않음

분석 방법

$ sudo perf record -F 99 -p xxx -g -- sleep 1200
$ sudo perf script > out.perf
$ ./stackcollapse-perf.pl out.perf > out.folded
$ ./flamegraph.pl out.folded > test.svg
  • perf로 call stack 수집함
  • perf data를 파싱해서 FlameGraph로 그림

PostgreSQL perf 사용 방법

src/Makefile.global 파일에서 enable_debug = yes로 변경하고 CFLAGS-g 옵션 추가한 후 다시 build:

$ vi src/Makefile.global
...
enable_debug  = yes
...
CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O2
...

$ make -j8 install

아래의 perf 명령어로 call stack 수집 및 FlameGraph 그림:

$ sudo perf record -F 99 -p XXX --call-graph dwarf sleep XXX
$ sudo perf script > out.perf
$ ./stackcollapse-perf.pl out.perf > out.folded
$ ./flamegraph.pl out.folded > test.svg